### FUNC _FINI_0 @ 00026594 void _FINI_0(void) { __cxa_finalize(&DAT_0006b000); return; } ### FUNC _INIT_0 @ 000265a4 void _INIT_0(void) { CFunctions::CFunctions((CFunctions *)theFunc); __cxa_atexit(CFunctions::~CFunctions,theFunc,&DAT_0006b000); return; } ### FUNC _INIT_1 @ 000265d4 void _INIT_1(void) { int iVar1; iVar1 = pthread_key_create(&DAT_00070a18,(__destr_function *)0x30b41); if (iVar1 == 0) { DAT_00070a1c = 0xc; DAT_00070a20 = 0x155; DAT_00070a24 = 0xffc; pthread_mutex_init((pthread_mutex_t *)&DAT_00070a28,(pthread_mutexattr_t *)0x0); DAT_00070a2c = 0; DAT_00070a30 = 0; __cxa_atexit(0x30611,&DAT_00070a14,&DAT_0006b000); return; } /* WARNING: Subroutine does not return */ FUN_00030e78("Can\'t allocate C++ runtime pthread_key_t"); } ### FUNC _INIT_2 @ 0002666c void _INIT_2(void) { std::ios_base::Init::Init((Init *)&DAT_00070d78); __cxa_atexit(std::ios_base::Init::~Init,&DAT_00070d78,&DAT_0006b000); return; } ### FUNC _INIT_3 @ 00026698 void _INIT_3(void) { pthread_mutex_init((pthread_mutex_t *)&DAT_00070de0,(pthread_mutexattr_t *)0x0); __cxa_atexit(0x4cde5,&DAT_00070de0,&DAT_0006b000); return; } ### FUNC CAccumulator @ 000266f0 /* CAccumulator::CAccumulator() */ CAccumulator * __thiscall CAccumulator::CAccumulator(CAccumulator *this) { *(undefined ***)this = &PTR__CAccumulator_00068c28; __aeabi_memclr4(this + 4,0x1c); return this; } ### FUNC ~CAccumulator @ 00026710 /* CAccumulator::~CAccumulator() */ CAccumulator * __thiscall CAccumulator::~CAccumulator(CAccumulator *this) { *(undefined ***)this = &PTR__CAccumulator_00068c28; if (*(void **)(this + 4) != (void *)0x0) { operator_delete__(*(void **)(this + 4)); *(undefined4 *)(this + 4) = 0; } *(undefined4 *)(this + 8) = 0; if (*(void **)(this + 0xc) != (void *)0x0) { operator_delete__(*(void **)(this + 0xc)); *(undefined4 *)(this + 0xc) = 0; } return this; } ### FUNC ~CAccumulator @ 00026748 /* CAccumulator::~CAccumulator() */ void __thiscall CAccumulator::~CAccumulator(CAccumulator *this) { void *pvVar1; pvVar1 = (void *)~CAccumulator(this); operator_delete(pvVar1); return; } ### FUNC Reset @ 00026756 /* CAccumulator::Reset(unsigned int, unsigned int, unsigned int) */ undefined4 __thiscall CAccumulator::Reset(CAccumulator *this,uint param_1,uint param_2,uint param_3) { void *pvVar1; uint uVar2; undefined4 uVar3; undefined8 uVar4; uVar3 = 0; *(undefined4 *)(this + 0x1c) = 0; if (*(void **)(this + 4) != (void *)0x0) { operator_delete__(*(void **)(this + 4)); *(undefined4 *)(this + 4) = 0; } *(undefined4 *)(this + 8) = 0; if (*(void **)(this + 0xc) != (void *)0x0) { operator_delete__(*(void **)(this + 0xc)); *(undefined4 *)(this + 0xc) = 0; } if (((param_1 != 0) && (param_2 < 0x41)) && ((param_2 - 1 & param_2) == 0)) { *(undefined4 *)(this + 0x10) = 0; *(uint *)(this + 0x14) = param_1; *(uint *)(this + 0x18) = param_2; uVar4 = __muldi3((param_3 + 3 >> 2) + (param_1 >> 1 & 0x3fffffff),0,4,0); uVar2 = 0xffffffff; if ((int)((ulonglong)uVar4 >> 0x20) == 0) { uVar2 = (uint)uVar4; } pvVar1 = operator_new__(uVar2); *(void **)(this + 4) = pvVar1; *(uint *)(this + 8) = (int)pvVar1 + (param_3 & 0xfffffffe); if (2 < param_2) { uVar4 = __muldi3(param_1,0,4,(int)param_1 >> 0x1f); uVar2 = 0xffffffff; if ((int)((ulonglong)uVar4 >> 0x20) == 0) { uVar2 = (uint)uVar4; } pvVar1 = operator_new__(uVar2); *(void **)(this + 0xc) = pvVar1; } uVar3 = 1; *(undefined4 *)(this + 0x1c) = 1; } return uVar3; } ### FUNC PushFrame @ 0002680e /* CAccumulator::PushFrame(unsigned short const*) */ bool __thiscall CAccumulator::PushFrame(CAccumulator *this,ushort *param_1) { ushort uVar1; uint *puVar2; undefined2 *puVar3; ushort *puVar4; int iVar5; uint uVar6; int iVar7; if (*(int *)(this + 0x1c) == 0) { return false; } iVar7 = *(int *)(this + 0x10); *(int *)(this + 0x10) = iVar7 + 1; iVar5 = *(int *)(this + 0x18); if (iVar5 == 2) { if (iVar7 != 0) { if (*(uint *)(this + 0x14) >> 2 != 0) { iVar5 = -(*(uint *)(this + 0x14) >> 2); puVar4 = *(ushort **)(this + 8); do { *puVar4 = (ushort)((uint)*param_1 + (uint)*puVar4 >> 1); puVar4[1] = (ushort)((uint)param_1[1] + (uint)puVar4[1] >> 1); puVar4[2] = (ushort)((uint)param_1[2] + (uint)puVar4[2] >> 1); puVar4[3] = (ushort)((uint)param_1[3] + (uint)puVar4[3] >> 1); param_1 = param_1 + 4; puVar4 = puVar4 + 4; iVar5 = iVar5 + 1; } while (iVar5 != 0); } goto LAB_000268a0; } } else if (iVar5 != 1) { puVar2 = *(uint **)(this + 0xc); if (iVar7 == 0) { if (*(uint *)(this + 0x14) >> 2 != 0) { iVar5 = -(*(uint *)(this + 0x14) >> 2); do { *puVar2 = (uint)*param_1; puVar2[1] = (uint)param_1[1]; puVar2[2] = (uint)param_1[2]; puVar2[3] = (uint)param_1[3]; puVar2 = puVar2 + 4; param_1 = param_1 + 4; iVar5 = iVar5 + 1; } while (iVar5 != 0); } goto LAB_000268a0; } if (iVar7 + 1 != iVar5) { if (*(uint *)(this + 0x14) >> 2 != 0) { iVar5 = -(*(uint *)(this + 0x14) >> 2); do { *puVar2 = *puVar2 + (uint)*param_1; puVar2[1] = puVar2[1] + (uint)param_1[1]; puVar2[2] = puVar2[2] + (uint)param_1[2]; puVar2[3] = puVar2[3] + (uint)param_1[3]; puVar2 = puVar2 + 4; param_1 = param_1 + 4; iVar5 = iVar5 + 1; } while (iVar5 != 0); } goto LAB_000268a0; } puVar3 = *(undefined2 **)(this + 8); iVar5 = 2; if (iVar7 < 0xf) { if (iVar7 != 3) { if (iVar7 == 7) { iVar5 = 3; } else { LAB_0002691e: iVar5 = 0; } } } else if (iVar7 == 0xf) { iVar5 = 4; } else if (iVar7 == 0x1f) { iVar5 = 5; } else { if (iVar7 != 0x3f) goto LAB_0002691e; iVar5 = 6; } for (iVar7 = *(int *)(this + 0x14); iVar7 != 0; iVar7 = iVar7 + -1) { uVar1 = *param_1; uVar6 = *puVar2; *puVar3 = (short)(uVar6 + uVar1 >> iVar5); *puVar2 = uVar6 + uVar1; puVar2 = puVar2 + 1; puVar3 = puVar3 + 1; param_1 = param_1 + 1; } goto LAB_000268a0; } __aeabi_memcpy(*(undefined4 *)(this + 8),param_1,*(int *)(this + 0x14) << 1); LAB_000268a0: iVar5 = *(int *)(this + 0x10); if (iVar5 == *(int *)(this + 0x18)) { *(undefined4 *)(this + 0x10) = 0; } return iVar5 == *(int *)(this + 0x18); } ### FUNC Restart @ 0002693e /* CAccumulator::Restart() */ void __thiscall CAccumulator::Restart(CAccumulator *this) { if (*(int *)(this + 0x1c) != 0) { *(undefined4 *)(this + 0x10) = 0; } return; } ### FUNC GetTickCount @ 0002694c /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* GetTickCount() */ void GetTickCount(void) { int iVar1; timespec local_1c; int local_14; local_14 = __stack_chk_guard; clock_gettime(1,&local_1c); iVar1 = __divsi3(local_1c.tv_nsec,1000000); if (__stack_chk_guard == local_14) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(iVar1 + local_1c.tv_sec * 1000); } ### FUNC Sleep @ 00026998 /* Sleep(int) */ void Sleep(int param_1) { usleep(param_1 * 1000); return; } ### FUNC GetLocalTime @ 000269a8 /* GetLocalTime(_SYSTEMTIME*) */ void GetLocalTime(_SYSTEMTIME *param_1) { tm *ptVar1; int iVar2; time_t tStack_18; int local_14; local_14 = __stack_chk_guard; time(&tStack_18); ptVar1 = localtime(&tStack_18); *(short *)param_1 = (short)ptVar1->tm_year + 0x76c; *(short *)(param_1 + 2) = (short)ptVar1->tm_mon + 1; *(short *)(param_1 + 4) = (short)ptVar1->tm_wday; *(short *)(param_1 + 6) = (short)ptVar1->tm_mday; *(short *)(param_1 + 8) = (short)ptVar1->tm_hour; *(short *)(param_1 + 10) = (short)ptVar1->tm_min; iVar2 = ptVar1->tm_sec; *(undefined2 *)(param_1 + 0xe) = 400; *(short *)(param_1 + 0xc) = (short)iVar2; if (__stack_chk_guard == local_14) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC CFunctions @ 00026a14 /* CFunctions::CFunctions() */ CFunctions * __thiscall CFunctions::CFunctions(CFunctions *this) { *(undefined ***)this = &PTR__CFunctions_00068c40; MutexLock::MutexLock((MutexLock *)(this + 0xb0)); CAccumulator::CAccumulator((CAccumulator *)(this + 0x3784)); CAccumulator::CAccumulator((CAccumulator *)(this + 0x37a4)); CSmoother::CSmoother((CSmoother *)(this + 0x37c4)); __aeabi_memclr4(this + 4,0xac); __aeabi_memclr4(this + 0xb4,0x18); __aeabi_memclr4(this + 0x2d1c,0xa68); __aeabi_memclr4(this + 0x37ec,0x1910); *(undefined4 *)(this + 0x5100) = 0xffff3cb0; *(undefined4 *)(this + 0x50fc) = 8; *(undefined4 *)(this + 0x5104) = 3; SetColorPalette(this,0); gLogFile = fopen("/sdcard/magnity/Cx/log/sdklog.txt","a+"); if (gLogFile != (FILE *)0x0) { mag::Logging::Setfp((__sFILE *)gLogFile); } return this; } ### FUNC MutexLock @ 00026b38 /* MutexLock::MutexLock() */ MutexLock * __thiscall MutexLock::MutexLock(MutexLock *this) { int iVar1; undefined4 *puVar2; pthread_mutexattr_t pStack_18; int local_14; local_14 = __stack_chk_guard; iVar1 = pthread_mutexattr_init(&pStack_18); if (iVar1 == 0) { iVar1 = pthread_mutexattr_settype(&pStack_18,1); if (iVar1 == 0) { iVar1 = pthread_mutex_init((pthread_mutex_t *)this,&pStack_18); if (iVar1 == 0) { iVar1 = pthread_mutexattr_destroy(&pStack_18); if (iVar1 == 0) { if (__stack_chk_guard == local_14) { return this; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "pthread_mutexattr_destroy failed\n"; } else { puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "pthread_mutex_init failed\n"; } } else { puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "pthread_mutexattr_settype failed\n"; } } else { puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "pthread_mutexattr_init failed\n"; } /* WARNING: Subroutine does not return */ FUN_000309e0(puVar2,&Error::typeinfo,0); } ### FUNC SetColorPalette @ 00026c70 /* CFunctions::SetColorPalette(ColorPalette) */ void __thiscall CFunctions::SetColorPalette(CFunctions *this,undefined4 param_2) { CFunctions CVar1; char cVar2; undefined4 *puVar3; uint uVar4; int iVar5; CFunctions CVar6; CFunctions *pCVar7; CFunctions *pCVar8; pthread_mutex_t *__mutex; int iVar9; uint uVar10; int iVar11; int iVar12; uint uVar13; bool bVar14; int local_40; int local_3c; *(undefined4 *)(this + 0x5108) = param_2; __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); pCVar7 = this + 0x20cc; iVar11 = 0xff; local_3c = -0xe0; pCVar8 = (CFunctions *)0xffffff20; switch(param_2) { case 0: pCVar8 = this + 0x20cc; iVar11 = 0; pCVar7 = (CFunctions *)0x100; do { CVar1 = SUB41(iVar11,0); pCVar8[1] = CVar1; pCVar8[2] = CVar1; *pCVar8 = CVar1; pCVar8[3] = (CFunctions)0x0; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 1; } while (iVar11 != 0x100); switchD_00026cd2::caseD_b(); default: pthread_mutex_unlock(__mutex); puVar3 = (undefined4 *)__errno(); *puVar3 = 0xe4ae0001; FUN_00027744(); pCVar8 = pCVar7; case 1: pCVar7 = this + 0x20cc; iVar11 = 0x100; do { pCVar7[3] = (CFunctions)0x0; iVar11 = iVar11 + -1; CVar1 = SUB41(iVar11,0); pCVar7[1] = CVar1; pCVar7[2] = CVar1; *pCVar7 = CVar1; pCVar7 = pCVar7 + 4; } while (iVar11 != 0); switchD_00026cd2::caseD_b(); case 2: pCVar8 = pCVar8 + 0x88; iVar11 = 0; do { pCVar7 = this + 0x20cc + (int)pCVar8; pCVar7[0x59] = (CFunctions)0x0; pCVar7[0x5a] = (CFunctions)0x0; CVar1 = (CFunctions)__udivsi3(iVar11,0x16); pCVar7[0x58] = CVar1; pCVar7[0x5b] = (CFunctions)0x0; iVar11 = iVar11 + 0x75; pCVar8 = pCVar8 + 4; } while (pCVar8 != (CFunctions *)0x0); pCVar8 = this + 0x2124; iVar11 = 0x47; iVar9 = 0; iVar5 = 0; do { pCVar8[1] = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; CVar1 = (CFunctions)__udivsi3(iVar5,0x47); pCVar8[2] = CVar1; local_40 = 0x47; cVar2 = __udivsi3(iVar9,0x47); *pCVar8 = (CFunctions)(cVar2 + 'u'); pCVar8 = pCVar8 + 4; iVar5 = iVar5 + 0xbc; iVar9 = iVar9 + 0x25; iVar11 = iVar11 + -1; } while (iVar11 != 0); iVar11 = -0x74; iVar12 = 0; iVar5 = 0; iVar9 = 0; do { CVar1 = (CFunctions)__udivsi3(iVar5,0x94); this[iVar11 + 0x22b5] = CVar1; this[iVar11 + 0x22b7] = (CFunctions)0x0; cVar2 = __udivsi3(iVar9); this[iVar11 + 0x22b6] = (CFunctions)(cVar2 + -0x44); cVar2 = __divsi3(iVar12,0x1d); this[iVar11 + 0x22b4] = (CFunctions)(cVar2 + -0x66); iVar5 = iVar5 + 0xff; iVar9 = iVar9 + 0x27; iVar12 = iVar12 + -0x3b; iVar11 = iVar11 + 4; } while (iVar11 != 0); iVar11 = -0x48; iVar12 = 0; iVar5 = 0x1ce3; iVar9 = 0; do { CVar1 = (CFunctions)__udivsi3(iVar5,0x94); this[iVar11 + 0x22fd] = CVar1; this[iVar11 + 0x22ff] = (CFunctions)0x0; cVar2 = __udivsi3(iVar9,0x1e); this[iVar11 + 0x22fe] = (CFunctions)(cVar2 + -0x1d); cVar2 = __divsi3(iVar12,0x12); this[iVar11 + 0x22fc] = (CFunctions)(cVar2 + '_'); iVar5 = iVar5 + 0xff; iVar9 = iVar9 + 0x1c; iVar12 = iVar12 + -0x50; iVar11 = iVar11 + 4; } while (iVar11 != 0); iVar11 = -0x30; iVar5 = 0x1f8; iVar9 = 0x2ed1; do { CVar1 = (CFunctions)__udivsi3(iVar9,0x94); this[iVar11 + 0x232d] = CVar1; this[iVar11 + 0x232c] = (CFunctions)0xf; this[iVar11 + 0x232f] = (CFunctions)0x0; cVar2 = __udivsi3(iVar5,0x1e); this[iVar11 + 0x232e] = (CFunctions)(cVar2 + -0x1d); iVar9 = iVar9 + 0xff; iVar5 = iVar5 + 0x1c; iVar11 = iVar11 + 4; } while (iVar11 != 0); pCVar8 = this + 0x232c; iVar11 = 0x3ac5; do { pCVar8[2] = (CFunctions)0xff; *pCVar8 = (CFunctions)0xf; pCVar8[3] = (CFunctions)0x0; CVar1 = (CFunctions)__udivsi3(iVar11,0x94); pCVar8[1] = CVar1; iVar11 = iVar11 + 0xff; pCVar8 = pCVar8 + 4; local_40 = local_40 + -1; } while (local_40 != 0); uVar4 = 0; iVar5 = -0x48; iVar11 = 0x817e; do { CVar1 = (CFunctions)__udivsi3(iVar11,0x94); this[iVar5 + 0x2491] = CVar1; this[iVar5 + 0x2492] = (CFunctions)0xff; this[iVar5 + 0x2493] = (CFunctions)0x0; this[iVar5 + 0x2490] = (CFunctions)((char)(uVar4 >> 5) + '\x0f'); uVar4 = uVar4 + 0xf0; iVar11 = iVar11 + 0xff; iVar5 = iVar5 + 4; } while (iVar5 != 0); iVar11 = -0x3c; uVar4 = 0xf0e0; do { this[iVar11 + 0x24cd] = (CFunctions)0xff; this[iVar11 + 0x24ce] = (CFunctions)0xff; this[iVar11 + 0x24cf] = (CFunctions)0x0; this[iVar11 + 0x24cc] = (CFunctions)((char)(uVar4 >> 5) + '\x0f'); uVar4 = uVar4 + 0xf0; iVar11 = iVar11 + 4; } while (iVar11 != 0); switchD_00026cd2::caseD_b(); return; case 3: pCVar8 = this + 0x20cc; iVar11 = 0x40; uVar4 = 0; uVar10 = 0; do { pCVar8[2] = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = SUB41(uVar10 >> 7,0); *pCVar8 = (CFunctions)((char)(uVar4 >> 6) + '2'); uVar4 = uVar4 + 0xcd; uVar10 = uVar10 + 0xff; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x21cc; iVar11 = 0x40; uVar4 = 0; iVar5 = 0; do { pCVar8[3] = (CFunctions)0x0; pCVar8[2] = SUB41(uVar4 >> 6,0); pCVar8[1] = SUB41(uVar4 + 0x3fc0 >> 7,0); *pCVar8 = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1); pCVar8 = pCVar8 + 4; uVar4 = uVar4 + 0xff; iVar5 = iVar5 + -0xff; iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x22cc; iVar11 = 0x40; iVar5 = 0; uVar4 = 0; do { pCVar8[2] = (CFunctions)0xff; pCVar8[3] = (CFunctions)0x0; *pCVar8 = SUB41(uVar4 >> 7,0); pCVar8[1] = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1); iVar5 = iVar5 + -0xff; uVar4 = uVar4 + 0xff; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); this = this + 0x23cc; iVar11 = 0x40; uVar4 = 0xbfc0; do { this[2] = (CFunctions)0xff; this[3] = (CFunctions)0x0; *this = SUB41(uVar4 >> 7,0); this[1] = SUB41(uVar4 + 0x40 >> 6,0); uVar4 = uVar4 + 0xff; this = this + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); switchD_00026cd2::caseD_b(); return; case 4: pCVar8 = this + 0x20cc; iVar11 = -0x32; do { pCVar8[2] = (CFunctions)0x32; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)((char)iVar11 + '2'); pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 1; } while (iVar11 != 0); pCVar8 = this + 0x2194; iVar5 = -0x96; iVar11 = 0; do { *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)((char)iVar5 + -0x38); cVar2 = __udivsi3(iVar11,0x96); pCVar8[2] = (CFunctions)(cVar2 + '2'); pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 0xcd; iVar5 = iVar5 + 1; } while (iVar5 != 0); CVar1 = (CFunctions)0xc8; do { this[local_3c + 0x24cd] = CVar1; this[local_3c + 0x24ce] = (CFunctions)0xff; this[local_3c + 0x24cc] = (CFunctions)0x0; this[local_3c + 0x24cf] = (CFunctions)0x0; local_3c = local_3c + 4; CVar1 = (CFunctions)((char)CVar1 + '\x01'); } while (local_3c != 0); switchD_00026cd2::caseD_b(); return; case 5: pCVar8 = this + 0x20cc; iVar11 = 0x40; uVar4 = 0; uVar10 = 0; uVar13 = 0; do { pCVar8[3] = (CFunctions)0x0; pCVar8[1] = SUB41(uVar10 >> 6,0); pCVar8[2] = SUB41(uVar13 >> 6,0); *pCVar8 = SUB41(uVar4 >> 6,0); uVar4 = uVar4 + 0x24; uVar10 = uVar10 + 0x16; pCVar8 = pCVar8 + 4; uVar13 = uVar13 + 0xcb; iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x21cc; iVar11 = 0x40; uVar4 = 0; uVar10 = 0; iVar5 = 0; do { pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)((char)(uVar10 >> 6) + '\x16'); pCVar8[2] = (CFunctions)((char)(uVar4 >> 6) + -0x35); *pCVar8 = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + '$'); pCVar8 = pCVar8 + 4; uVar4 = uVar4 + 0x34; uVar10 = uVar10 + 0x44; iVar5 = iVar5 + -0x24; iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x22cc; uVar4 = 0; iVar11 = 0x40; do { pCVar8[2] = (CFunctions)0xff; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)((char)(uVar4 >> 6) + 'Z'); uVar4 = uVar4 + 0x7c; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); this = this + 0x23cc; iVar11 = 0x40; uVar4 = 0; uVar10 = 0; do { this[2] = (CFunctions)0xff; this[3] = (CFunctions)0x0; *this = SUB41(uVar10 >> 6,0); this[1] = (CFunctions)((char)(uVar4 >> 6) + -0x2a); uVar4 = uVar4 + 0x29; uVar10 = uVar10 + 0xff; this = this + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); switchD_00026cd2::caseD_b(); return; case 6: pCVar8 = this + 0x20cc; iVar5 = 0; do { pCVar8[1] = SUB41(iVar11,0); *pCVar8 = SUB41(iVar11,0); pCVar8[3] = (CFunctions)0x0; cVar2 = __divsi3(iVar5,100); pCVar8[2] = (CFunctions)(cVar2 + -1); pCVar8 = pCVar8 + 4; iVar5 = iVar5 + -0xff; iVar11 = iVar11 + -1; } while (iVar11 != 0x9b); pCVar8 = this + 0x225c; iVar5 = 0x9b; iVar11 = 0; do { pCVar8[1] = SUB41(iVar5,0); *pCVar8 = SUB41(iVar5,0); pCVar8[3] = (CFunctions)0x0; CVar1 = (CFunctions)__udivsi3(iVar11,0x69); pCVar8[2] = CVar1; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 0xff; iVar5 = iVar5 + -1; } while (iVar5 != 0x32); this = this + 0x2400; iVar11 = 0x33; do { this[2] = (CFunctions)0xff; this[3] = (CFunctions)0x0; iVar11 = iVar11 + -1; this[1] = SUB41(iVar11,0); *this = SUB41(iVar11,0); this = this + 4; } while (iVar11 != 0); switchD_00026cd2::caseD_b(); return; case 7: pCVar8 = this + 0x20cc; iVar11 = 0x80; CVar1 = (CFunctions)0x0; do { pCVar8[1] = (CFunctions)0x0; pCVar8[2] = CVar1; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8 = pCVar8 + 4; CVar1 = (CFunctions)((char)CVar1 + '\x02'); iVar11 = iVar11 + -1; } while (iVar11 != 0); this = this + 0x22cc; iVar5 = 0x80; iVar11 = 0; do { this[2] = (CFunctions)0xff; this[3] = (CFunctions)0x0; CVar1 = (CFunctions)__udivsi3(iVar11,0x7f); this[1] = CVar1; *this = CVar1; iVar11 = iVar11 + 0xff; this = this + 4; iVar5 = iVar5 + -1; } while (iVar5 != 0); switchD_00026cd2::caseD_b(); return; case 8: iVar11 = -0x80; do { this[iVar11 + 0x214d] = (CFunctions)0x0; this[iVar11 + 0x214e] = (CFunctions)0x0; this[iVar11 + 0x214c] = (CFunctions)((char)iVar11 + -1); this[iVar11 + 0x214f] = (CFunctions)0x0; iVar11 = iVar11 + 4; } while (iVar11 != 0); pCVar8 = this + 0x214c; uVar4 = 0; iVar11 = 0x40; do { pCVar8[2] = (CFunctions)0x0; *pCVar8 = (CFunctions)0xff; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = SUB41(uVar4 >> 6,0); uVar4 = uVar4 + 0xff; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x224c; iVar5 = 0x40; uVar4 = 0; iVar11 = 0; do { pCVar8[1] = (CFunctions)0xff; pCVar8[3] = (CFunctions)0x0; pCVar8[2] = SUB41(uVar4 >> 6,0); *pCVar8 = (CFunctions)((char)(iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1a) >> 6) + -1); pCVar8 = pCVar8 + 4; uVar4 = uVar4 + 0xff; iVar11 = iVar11 + -0xff; iVar5 = iVar5 + -1; } while (iVar5 != 0); pCVar8 = this + 0x234c; iVar11 = 0x40; iVar5 = 0; do { pCVar8[2] = (CFunctions)0xff; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1); iVar5 = iVar5 + -0xff; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); iVar5 = -0x80; iVar11 = 0; do { this[iVar5 + 0x24cd] = (CFunctions)0x0; this[iVar5 + 0x24cc] = (CFunctions)0x0; this[iVar5 + 0x24cf] = (CFunctions)0x0; this[iVar5 + 0x24ce] = (CFunctions)((char)(iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1b) >> 5) + -1); iVar11 = iVar11 + -0x80; iVar5 = iVar5 + 4; } while (iVar5 != 0); switchD_00026cd2::caseD_b(); return; case 9: pCVar8 = this + 0x20cc; iVar5 = 0x99; iVar11 = 0; do { pCVar8[3] = (CFunctions)0x0; CVar1 = (CFunctions)__udivsi3(iVar11,200); pCVar8[1] = CVar1; pCVar8[2] = CVar1; *pCVar8 = CVar1; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 0xff; iVar5 = iVar5 + -1; } while (iVar5 != 0); iVar5 = -0xbc; iVar11 = 0x9867; do { this[iVar5 + 0x23ed] = (CFunctions)0xc3; CVar1 = (CFunctions)__udivsi3(iVar11,200); this[iVar5 + 0x23ee] = CVar1; this[iVar5 + 0x23ec] = (CFunctions)0xc3; this[iVar5 + 0x23ef] = (CFunctions)0x0; iVar11 = iVar11 + 0xff; iVar5 = iVar5 + 4; } while (iVar5 != 0); iVar11 = 0; do { this[local_3c + 0x24ce] = (CFunctions)0xff; this[local_3c + 0x24cf] = (CFunctions)0x0; cVar2 = __divsi3(iVar11,0x37); this[local_3c + 0x24cd] = (CFunctions)(cVar2 + -0x3d); this[local_3c + 0x24cc] = (CFunctions)(cVar2 + -0x3d); iVar11 = iVar11 + -0xc3; local_3c = local_3c + 4; } while (local_3c != 0); switchD_00026cd2::caseD_b(); return; case 10: pCVar8 = this + 0x20cc; iVar11 = 0; do { pCVar8[1] = (CFunctions)0x0; pCVar8[2] = SUB41(iVar11,0); *pCVar8 = SUB41(iVar11,0); pCVar8[3] = (CFunctions)0x0; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 7; } while (iVar11 != 0xfc); CVar1 = (CFunctions)0xfc; iVar11 = -0x94; uVar4 = 0; do { this[iVar11 + 0x21f1] = (CFunctions)0x0; this[iVar11 + 0x21f2] = CVar1; this[iVar11 + 0x21f3] = (CFunctions)0x0; this[iVar11 + 0x21f0] = (CFunctions)(-4 - (char)(uVar4 >> 2)); uVar4 = uVar4 + 7; CVar1 = (CFunctions)((char)CVar1 + -7); iVar11 = iVar11 + 4; } while (iVar11 != 0); pCVar8 = this + 0x21f0; CVar1 = (CFunctions)0x0; CVar6 = (CFunctions)0x0; uVar4 = 0xf5; do { CVar1 = (CFunctions)((char)CVar1 + '\a'); pCVar8[1] = CVar1; pCVar8[2] = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; *pCVar8 = (CFunctions)(-4 - (char)(uVar4 >> 2)); pCVar8 = pCVar8 + 4; bVar14 = uVar4 != 0; uVar4 = uVar4 - 7; } while (bVar14); pCVar8 = this + 0x2280; uVar4 = 0; iVar11 = 0xfc; do { pCVar8[2] = (CFunctions)0x0; *pCVar8 = SUB41(iVar11,0); pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)(-4 - (char)(uVar4 >> 1)); uVar4 = uVar4 + 7; pCVar8 = pCVar8 + 4; bVar14 = iVar11 != 0; iVar11 = iVar11 + -7; } while (bVar14); pCVar8 = this + 0x2314; CVar1 = (CFunctions)0x7; uVar4 = 0xf5; do { pCVar8[2] = CVar1; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)(-4 - (char)(uVar4 >> 1)); pCVar8 = pCVar8 + 4; CVar1 = (CFunctions)((char)CVar1 + '\a'); bVar14 = uVar4 != 0; uVar4 = uVar4 - 7; } while (bVar14); uVar4 = 0; iVar11 = -0x94; CVar1 = (CFunctions)0xfc; do { this[iVar11 + 0x2439] = CVar1; this[iVar11 + 0x2438] = (CFunctions)0x0; this[iVar11 + 0x243b] = (CFunctions)0x0; this[iVar11 + 0x243a] = (CFunctions)(-4 - (char)(uVar4 >> 2)); uVar4 = uVar4 + 7; CVar1 = (CFunctions)((char)CVar1 + -7); iVar11 = iVar11 + 4; } while (iVar11 != 0); this = this + 0x2438; uVar4 = 0xfc; do { this[1] = CVar6; *this = CVar6; this[3] = (CFunctions)0x0; this[2] = (CFunctions)(-4 - (char)(uVar4 >> 2)); this = this + 4; CVar6 = (CFunctions)((char)CVar6 + '\a'); bVar14 = uVar4 != 0; uVar4 = uVar4 - 7; } while (bVar14); switchD_00026cd2::caseD_b(); return; case 0xc: pCVar8 = this + 0x20cc; iVar11 = 0; do { pCVar8[1] = (CFunctions)0x0; pCVar8[2] = (CFunctions)0x0; *pCVar8 = SUB41(iVar11,0); pCVar8[3] = (CFunctions)0x0; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + 7; } while (iVar11 != 0xfc); iVar11 = -0x94; CVar1 = (CFunctions)0x0; do { this[iVar11 + 0x21f1] = CVar1; this[iVar11 + 0x21f2] = (CFunctions)0x0; this[iVar11 + 0x21f0] = (CFunctions)0xff; this[iVar11 + 0x21f3] = (CFunctions)0x0; CVar1 = (CFunctions)((char)CVar1 + '\a'); iVar11 = iVar11 + 4; } while (iVar11 != 0); pCVar8 = this + 0x21f0; iVar11 = 0; do { pCVar8[1] = (CFunctions)0xff; pCVar8[2] = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; *pCVar8 = (CFunctions)((char)iVar11 + -0xb); pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -7; } while (iVar11 != -0xfc); iVar11 = -0x94; CVar1 = (CFunctions)0x0; do { this[iVar11 + 0x2315] = (CFunctions)0xff; this[iVar11 + 0x2316] = CVar1; this[iVar11 + 0x2314] = (CFunctions)0x0; this[iVar11 + 0x2317] = (CFunctions)0x0; CVar1 = (CFunctions)((char)CVar1 + '\a'); iVar11 = iVar11 + 4; } while (iVar11 != 0); pCVar8 = this + 0x2314; iVar11 = 0; do { pCVar8[2] = (CFunctions)0xff; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8[1] = (CFunctions)((char)iVar11 + -0xb); pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -7; } while (iVar11 != -0xfc); CVar1 = (CFunctions)0x0; iVar11 = -0x94; do { this[iVar11 + 0x2439] = (CFunctions)0x0; this[iVar11 + 0x243a] = (CFunctions)0xff; this[iVar11 + 0x2438] = CVar1; this[iVar11 + 0x243b] = (CFunctions)0x0; CVar1 = (CFunctions)((char)CVar1 + '\a'); iVar11 = iVar11 + 4; } while (iVar11 != 0); CVar1 = (CFunctions)0x0; iVar11 = -0x94; do { this[iVar11 + 0x24cd] = CVar1; this[iVar11 + 0x24ce] = (CFunctions)0xff; this[iVar11 + 0x24cc] = (CFunctions)0xff; this[iVar11 + 0x24cf] = (CFunctions)0x0; CVar1 = (CFunctions)((char)CVar1 + '\a'); iVar11 = iVar11 + 4; } while (iVar11 != 0); switchD_00026cd2::caseD_b(); return; case 0xd: iVar11 = 0x40; iVar5 = 0; do { this[iVar5 + 0x20cc] = (CFunctions)0xff; this[iVar5 + 0x20cd] = SUB41(iVar5,0); this[iVar5 + 0x20ce] = (CFunctions)0x0; this[iVar5 + 0x20cf] = (CFunctions)0x0; iVar5 = iVar5 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x21cc; CVar1 = (CFunctions)0xfc; iVar11 = 0x40; do { pCVar8[1] = (CFunctions)0xff; pCVar8[2] = (CFunctions)0x0; *pCVar8 = CVar1; pCVar8[3] = (CFunctions)0x0; CVar1 = (CFunctions)((char)CVar1 + -4); pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); CVar1 = (CFunctions)0x0; pCVar8 = this + 0x22cc; iVar11 = 0x40; CVar6 = (CFunctions)0xfc; do { pCVar8[1] = (CFunctions)0xff; pCVar8[2] = CVar1; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; pCVar8 = pCVar8 + 4; CVar1 = (CFunctions)((char)CVar1 + '\x04'); iVar11 = iVar11 + -1; } while (iVar11 != 0); pCVar8 = this + 0x23cc; iVar11 = 0x40; do { pCVar8[1] = CVar6; pCVar8[2] = (CFunctions)0xff; *pCVar8 = (CFunctions)0x0; pCVar8[3] = (CFunctions)0x0; CVar6 = (CFunctions)((char)CVar6 + -4); pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); case 0xb: pCVar8 = this + 0x20cc; iVar11 = 0x100; do { CVar1 = *pCVar8; *pCVar8 = pCVar8[2]; pCVar8[2] = CVar1; pCVar8 = pCVar8 + 4; iVar11 = iVar11 + -1; } while (iVar11 != 0); __aeabi_memcpy(this + 0x24f4,pCVar7,0x400); __aeabi_memcpy(this + 0x291c,pCVar7,0x400); pthread_mutex_unlock(__mutex); return; } } ### FUNC caseD_b @ 0002770e void switchD_00026cd2::caseD_b(void) { undefined1 uVar1; undefined1 *puVar2; undefined4 in_stack_0000000c; pthread_mutex_t *in_stack_00000010; undefined4 in_stack_00000014; undefined4 in_stack_00000018; int in_stack_0000001c; int in_stack_00000040; int in_stack_00000044; puVar2 = (undefined1 *)(in_stack_00000044 + 0x20cc); do { uVar1 = *puVar2; *puVar2 = puVar2[2]; puVar2[2] = uVar1; puVar2 = puVar2 + 4; in_stack_00000040 = in_stack_00000040 + -1; } while (in_stack_00000040 != 0); __aeabi_memcpy(in_stack_00000014,in_stack_0000000c,in_stack_0000001c << 10); __aeabi_memcpy(in_stack_00000018,in_stack_0000000c,in_stack_0000001c << 10); pthread_mutex_unlock(in_stack_00000010); return; } ### FUNC FUN_00027744 @ 00027744 void FUN_00027744(void) { return; } ### FUNC FUN_0002776c @ 0002776c void FUN_0002776c(void) { FUN_000308d8(); /* WARNING: Subroutine does not return */ FUN_0003178c(); } ### FUNC ~CFunctions @ 00027778 /* CFunctions::~CFunctions() */ CFunctions * __thiscall CFunctions::~CFunctions(CFunctions *this) { *(undefined ***)this = &PTR__CFunctions_00068c40; ReleaseMemory(this); if (gLogFile != (FILE *)0x0) { fclose(gLogFile); } CSmoother::~CSmoother((CSmoother *)(this + 0x37c4)); CAccumulator::~CAccumulator((CAccumulator *)(this + 0x37a4)); CAccumulator::~CAccumulator((CAccumulator *)(this + 0x3784)); pthread_mutex_destroy((pthread_mutex_t *)(this + 0xb0)); return this; } ### FUNC ReleaseMemory @ 00027810 /* CFunctions::ReleaseMemory() */ void __thiscall CFunctions::ReleaseMemory(CFunctions *this) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); *(undefined4 *)(this + 0x3814) = 0; *(undefined4 *)(this + 0xa4) = 0; *(undefined4 *)(this + 0xa8) = 0; *(undefined4 *)(this + 0xac) = 0; *(undefined4 *)(this + 0x2d1c) = 0; *(undefined4 *)(this + 0x3128) = 0; if (*(void **)(this + 0xb4) != (void *)0x0) { operator_delete__(*(void **)(this + 0xb4)); *(undefined4 *)(this + 0xb4) = 0; } if (*(void **)(this + 0xc0) != (void *)0x0) { operator_delete__(*(void **)(this + 0xc0)); *(undefined4 *)(this + 0xc0) = 0; } if (*(void **)(this + 0xc4) != (void *)0x0) { operator_delete__(*(void **)(this + 0xc4)); *(undefined4 *)(this + 0xc4) = 0; } if (*(void **)(this + 200) != (void *)0x0) { operator_delete__(*(void **)(this + 200)); *(undefined4 *)(this + 200) = 0; } if (*(void **)(this + 0xb8) != (void *)0x0) { operator_delete__(*(void **)(this + 0xb8)); *(undefined4 *)(this + 0xb8) = 0; } if (*(void **)(this + 0xbc) != (void *)0x0) { operator_delete__(*(void **)(this + 0xbc)); *(undefined4 *)(this + 0xbc) = 0; } if (*(void **)(this + 0x2f74) != (void *)0x0) { operator_delete__(*(void **)(this + 0x2f74)); *(undefined4 *)(this + 0x2f74) = 0; } if (*(void **)(this + 0x2f78) != (void *)0x0) { operator_delete__(*(void **)(this + 0x2f78)); *(undefined4 *)(this + 0x2f78) = 0; } if (*(void **)(this + 0x2f7c) != (void *)0x0) { operator_delete__(*(void **)(this + 0x2f7c)); *(undefined4 *)(this + 0x2f7c) = 0; } __aeabi_memclr4(this + 0x2d1c,0x40c); CAccumulator::Reset((CAccumulator *)(this + 0x3784),0,0,0); CAccumulator::Reset((CAccumulator *)(this + 0x37a4),0,0,0); CSmoother::Reset((CSmoother *)(this + 0x37c4),0,0,0,0); __aeabi_memclr4(this + 0x3820,0x18d0); pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); return; } ### FUNC ~CFunctions @ 00027954 /* CFunctions::~CFunctions() */ void __thiscall CFunctions::~CFunctions(CFunctions *this) { ~CFunctions(this); operator_delete(this); return; } ### FUNC Reset @ 00027974 /* CFunctions::Reset(struct_IntrinsicPara const*) */ undefined4 __thiscall CFunctions::Reset(CFunctions *this,struct_IntrinsicPara *param_1) { pthread_mutex_t *__mutex; uint uVar1; uint uVar2; void *pvVar3; int iVar4; MStream *pMVar5; undefined4 *puVar6; Logging *this_00; CFunctions *pCVar7; uint uVar8; undefined4 uVar9; undefined4 uVar10; undefined4 uVar11; uint uVar12; undefined8 uVar13; Logging aLStack_3c [12]; Logging aLStack_30 [12]; Logging aLStack_24 [12]; int local_18; local_18 = __stack_chk_guard; ReleaseMemory(this); __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); *(undefined4 *)(this + 0x50fc) = 8; *(undefined4 *)(this + 0x5100) = 0xffff3cb0; *(undefined4 *)(this + 0x5104) = 3; pCVar7 = this + 0x37ec; uVar9 = *(undefined4 *)(param_1 + 4); uVar10 = *(undefined4 *)(param_1 + 8); *(undefined4 *)pCVar7 = *(undefined4 *)param_1; *(undefined4 *)(this + 0x37f0) = uVar9; *(undefined4 *)(this + 0x37f4) = uVar10; uVar9 = *(undefined4 *)(param_1 + 0x10); uVar10 = *(undefined4 *)(param_1 + 0x14); *(undefined4 *)(this + 0x37f8) = *(undefined4 *)(param_1 + 0xc); *(undefined4 *)(this + 0x37fc) = uVar9; *(undefined4 *)(this + 0x3800) = uVar10; uVar9 = *(undefined4 *)(param_1 + 0x1c); uVar10 = *(undefined4 *)(param_1 + 0x20); uVar11 = *(undefined4 *)(param_1 + 0x24); *(undefined4 *)(this + 0x3804) = *(undefined4 *)(param_1 + 0x18); *(undefined4 *)(this + 0x3808) = uVar9; *(undefined4 *)(this + 0x380c) = uVar10; *(undefined4 *)(this + 0x3810) = uVar11; uVar12 = *(uint *)(this + 0x3804); if ((((uVar12 - 4 < 0x3d) && ((uVar12 - 1 & uVar12) == 0)) && ((*(uint *)(this + 0x3808) - 1 & (*(uint *)(this + 0x3808) | 0xffffffc0)) == 0)) && ((*(int *)(this + 0x380c) - 1U < 2 && (*(int *)(this + 0x3810) != 0)))) { uVar1 = *(uint *)pCVar7; if ((3 < uVar1) && ((uVar1 & 3) == 0)) { if (*(int *)(this + 0x37f0) != 0) { if (3 < *(uint *)(this + 0x37fc)) { if (*(int *)(this + 0x3800) != 0) { uVar1 = *(int *)(this + 0x37f0) * uVar1; *(uint *)(this + 0x50f0) = uVar1; uVar8 = *(int *)(this + 0x3800) * *(uint *)(this + 0x37fc); *(uint *)(this + 0x50f8) = uVar8; *(int *)(this + 0x50f4) = *(int *)(this + 0x37f4) * *(int *)(this + 0x37f8); uVar2 = uVar1 * 2; if (uVar1 * 2 < uVar1) { uVar2 = 0xffffffff; } pvVar3 = operator_new__(uVar2); *(void **)(this + 0xb4) = pvVar3; pvVar3 = operator_new__(uVar2); *(void **)(this + 0xbc) = pvVar3; pvVar3 = operator_new__(uVar1); *(void **)(this + 0xc0) = pvVar3; uVar13 = __muldi3(uVar1,0,4,(int)uVar1 >> 0x1f); uVar2 = 0xffffffff; if ((int)((ulonglong)uVar13 >> 0x20) == 0) { uVar2 = (uint)uVar13; } pvVar3 = operator_new__(uVar2); *(void **)(this + 0xc4) = pvVar3; pvVar3 = operator_new__(uVar1); *(void **)(this + 0xb8) = pvVar3; pvVar3 = operator_new__(uVar8); *(void **)(this + 200) = pvVar3; uVar9 = 0; iVar4 = CAccumulator::Reset((CAccumulator *)(this + 0x3784),uVar1,uVar12,0); if (iVar4 == 0) { pMVar5 = (MStream *)mag::Logging::Logging(aLStack_30,4); MStream::operator<<(pMVar5,"Failed to create baseline accmulator"); this_00 = aLStack_30; } else { if ((*(uint *)(this + 0x380c) < 2) || (iVar4 = CSmoother::Reset((CSmoother *)(this + 0x37c4),*(uint *)(this + 0x50f0), *(uint *)(this + 0x380c) - 1,0,0), iVar4 != 0)) { __aeabi_memclr4(this + 0x24e0); *(undefined4 *)(this + 0x24cc) = 0x28; *(undefined4 *)(this + 0x24d0) = *(undefined4 *)pCVar7; *(undefined4 *)(this + 0x24d4) = *(undefined4 *)(this + 0x37f0); *(undefined4 *)(this + 0x24d8) = 0x80001; *(undefined4 *)(this + 0x24dc) = 0; __aeabi_memclr4(this + 0x2908,0x14); *(undefined4 *)(this + 0x28f4) = 0x28; *(undefined4 *)(this + 0x28f8) = *(undefined4 *)(this + 0x37fc); *(undefined4 *)(this + 0x28fc) = *(undefined4 *)(this + 0x3800); *(undefined4 *)(this + 0x2900) = 0x80001; *(undefined4 *)(this + 0x2904) = 0; CalTaoAtm((CFunctions *)0x2904,(struct_FixPara *)(this + 0x78)); *(undefined4 *)(this + 0xa4) = 1; pthread_mutex_unlock(__mutex); uVar9 = *(undefined4 *)(this + 0xa4); goto LAB_00027ba6; } pMVar5 = (MStream *)mag::Logging::Logging(aLStack_3c,4); MStream::operator<<(pMVar5,"Failed to create temperature smoother"); this_00 = aLStack_3c; } mag::Logging::~Logging(this_00); pthread_mutex_unlock(__mutex); puVar6 = (undefined4 *)__errno(); *puVar6 = 0xe4ae0003; goto LAB_00027ba6; } } } } } pMVar5 = (MStream *)mag::Logging::Logging(aLStack_24,4); MStream::operator<<(pMVar5,"Failed to configurate CFunctions due to parameter error"); mag::Logging::~Logging(aLStack_24); pthread_mutex_unlock(__mutex); puVar6 = (undefined4 *)__errno(); *puVar6 = 0xe4ae0001; uVar9 = 0; LAB_00027ba6: if (__stack_chk_guard == local_18) { return uVar9; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC CalTaoAtm @ 00027d20 /* CFunctions::CalTaoAtm(struct_FixPara*) */ undefined4 __thiscall CFunctions::CalTaoAtm(CFunctions *this,struct_FixPara *param_1) { int iVar1; undefined4 uVar2; undefined4 uVar3; undefined4 *puVar4; undefined4 uVar5; undefined4 uVar6; float __x; float __x_00; float __x_01; float __x_02; float __y; float __y_00; if (param_1 == (struct_FixPara *)0x0) { puVar4 = (undefined4 *)__errno(); *puVar4 = 0xe4ae0001; uVar6 = 0; } else { iVar1 = __aeabi_fcmple(*(undefined4 *)param_1,0); if (iVar1 == 0) { iVar1 = __aeabi_fcmple(*(undefined4 *)(param_1 + 0x10),0); if (iVar1 == 0) { uVar6 = *(undefined4 *)(param_1 + 0xc); iVar1 = __aeabi_fcmplt(uVar6); if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(uVar6,0x3f800000), iVar1 == 0)) { iVar1 = __fixsfsi(*(undefined4 *)(param_1 + 8)); if (0x22 < iVar1) { iVar1 = 0x23; } if (iVar1 < -0x18) { iVar1 = -0x19; } __x = (float)__mulsf3(uVar6,*(undefined4 *)(&UNK_00064928 + iVar1 * 4)); sqrtf(__x); uVar6 = __mulsf3(); uVar6 = __addsf3(uVar6,0x3d3851ec); uVar2 = __divsf3(0x3db851ec,*(undefined4 *)(param_1 + 0x10)); uVar5 = 0; iVar1 = __aeabi_fcmpgt(*(undefined4 *)(param_1 + 0x14),0); uVar3 = 0; if (iVar1 != 0) { powf(__x_00,__y); uVar3 = __mulsf3(); } iVar1 = __aeabi_fcmpgt(*(undefined4 *)(param_1 + 0x18),0); if (iVar1 != 0) { powf(__x_01,__y_00); uVar5 = __mulsf3(); } uVar3 = __addsf3(uVar3,uVar5); uVar6 = __addsf3(uVar6,uVar2); uVar6 = __addsf3(uVar6,uVar3); uVar6 = __mulsf3(*(undefined4 *)param_1,uVar6); uVar6 = __mulsf3(uVar6,0xba83126f); expf(__x_02); *(undefined4 *)(param_1 + 0x24) = uVar6; return uVar6; } } } uVar6 = 0x3f800000; *(undefined4 *)(param_1 + 0x24) = 0x3f800000; puVar4 = (undefined4 *)__errno(); *puVar4 = 0xe4ae0001; } return uVar6; } ### FUNC PushBaselineRaw @ 00027e68 /* CFunctions::PushBaselineRaw(unsigned short const*, int) */ int __thiscall CFunctions::PushBaselineRaw(CFunctions *this,ushort *param_1,int param_2) { int iVar1; pthread_mutex_t *__mutex; __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); if (*(int *)(this + 0xa4) == 0) { pthread_mutex_unlock(__mutex); iVar1 = 0; } else { if (param_2 != 0) { *(undefined4 *)(this + 0xa8) = 0; CAccumulator::Restart((CAccumulator *)(this + 0x3784)); CAccumulator::Restart((CAccumulator *)(this + 0x37a4)); } iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x3784),param_1); if (iVar1 != 0) { *(undefined4 *)(this + 0xa8) = 1; } pthread_mutex_unlock(__mutex); } return iVar1; } ### FUNC SelectCaliCurve @ 00027edc /* CFunctions::SelectCaliCurve() */ void __thiscall CFunctions::SelectCaliCurve(CFunctions *this) { CFunctions *pCVar1; FILE *__stream; size_t sVar2; size_t sVar3; int iVar4; int iVar5; uint uVar6; size_t __n; int iVar7; CFunctions *pCVar8; uint uVar9; CFunctions *local_58; int local_24; uint local_20; uint local_1c; *(undefined4 *)(this + 0x2d24) = 0; pCVar1 = this; uVar6 = 0; do { uVar9 = uVar6; pCVar8 = pCVar1; uVar6 = uVar9 + 1; if (*(int *)(this + 0x2e2c) - 2U <= uVar9) break; pCVar1 = pCVar8 + 4; } while (*(int *)(this + uVar6 * 4 + 0x2e38) < *(int *)(this + 0x38)); *(uint *)(this + 0x3108) = uVar9; local_1c = *(uint *)(this + 0x2e30); local_24 = *(int *)(this + 0x50f0); iVar5 = *(int *)(this + 0x2e28); __n = *(int *)(this + 0x2e34) + local_1c + local_24 * (iVar5 * 3 + -1) * 2; if (uVar9 <= uVar6) { iVar5 = 0; local_20 = uVar9; do { if (*(int *)(pCVar8 + 0x2f80) == 0) { iVar4 = access((char *)(this + 0x2d28),0); if (iVar4 != 0) { *(undefined4 *)(this + 0x2d1c) = 0; return; } __stream = fopen((char *)(this + 0x2d28),"rb"); fseek(__stream,*(long *)(pCVar8 + 0x2fd0),0); sVar2 = fread((void *)(*(int *)(this + 0x2f74) + *(int *)(pCVar8 + 0x3020)),1,__n,__stream); if ((*(int *)(pCVar8 + 0x2f28) != 0) && (uVar9 + iVar5 <= *(int *)(this + 0x2e2c) - 2U)) { fseek(__stream,*(long *)(pCVar8 + 0x3070),0); sVar3 = fread((void *)(*(int *)(this + 0x2f7c) + *(int *)(pCVar8 + 0x30bc)),4, *(int *)(pCVar8 + 0x2f28) * 10,__stream); if (sVar3 * 4 + *(int *)(pCVar8 + 0x2f28) * -0x28 != 0) { fclose(__stream); goto LAB_000280ec; } } fclose(__stream); if (sVar2 != __n) { LAB_000280ec: *(undefined4 *)(this + 0x2d1c) = 0; return; } *(undefined4 *)(pCVar8 + 0x2f80) = 1; local_20 = *(uint *)(this + 0x3108); } iVar5 = iVar5 + 1; pCVar8 = pCVar8 + 4; } while (uVar9 + iVar5 <= local_20 + 1); local_1c = *(uint *)(this + 0x2e30); iVar5 = *(int *)(this + 0x2e28); local_24 = *(int *)(this + 0x50f0); uVar9 = local_20; } local_58 = this + 0x2f7c; iVar4 = *(int *)(this + 0x2f74) + *(int *)(this + uVar9 * 4 + 0x3020); *(int *)(this + 0x310c) = iVar4; iVar7 = local_24 * (iVar5 + -1) * 2; *(uint *)(this + 0x3118) = iVar4 + iVar7 + (local_1c & 0xfffffffe); iVar5 = *(int *)(this + 0x2f74) + *(int *)(this + uVar9 * 4 + 0x3024); *(int *)(this + 0x3110) = iVar5; *(uint *)(this + 0x311c) = iVar5 + iVar7 + (local_1c & 0xfffffffe); *(int *)(this + 0x3124) = *(int *)local_58 + *(int *)(this + uVar9 * 4 + 0x30bc); return; } ### FUNC DoSomething @ 0002814c /* CFunctions::DoSomething(int, unsigned int) */ void __thiscall CFunctions::DoSomething(CFunctions *this,int param_1,uint param_2) { int iVar1; uint uVar2; int iVar3; uint uVar4; pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); if ((*(int *)(this + 0xa4) != 0) && (*(int *)(this + 0x2d1c) != 0)) { if (param_1 == 0) { SelectCaliCurve(this); if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d20) != 0)) { GenerateVolatileLens(this); } } else { if ((param_1 == 1) && (1 < param_2)) { DAT_0006b8f4 = 0; DAT_0006b8f8 = 0; DAT_0006b900 = *(int *)(this + 0x2e28) * *(int *)(this + 0x50f0) * 2; iVar3 = *(int *)(this + 0x50f0) * (*(int *)(this + 0x2e28) + -1); DAT_0006b8fc = iVar3; iVar1 = __udivsi3(param_2 + DAT_0006b900 + iVar3 + -2,param_2 - 1); DAT_0006b904 = iVar1 + 7U & 0xfffffff8; iVar1 = 0; } else { iVar1 = DAT_0006b8f4; iVar3 = DAT_0006b8fc; if (param_1 < 1) goto LAB_000282a8; } uVar2 = 0; if (iVar1 < iVar3) { uVar2 = iVar3 - iVar1; if ((int)DAT_0006b904 <= iVar3 - iVar1) { uVar2 = DAT_0006b904; } iVar1 = iVar1 * 2; InterpolateShort(this,(short *)(*(int *)(this + 0x310c) + iVar1), (short *)(*(int *)(this + 0x3110) + iVar1), (short *)(*(int *)(this + 0x3114) + iVar1),uVar2); DAT_0006b8f4 = DAT_0006b8f4 + uVar2; } if (((int)uVar2 < (int)DAT_0006b904) && (DAT_0006b8f8 < DAT_0006b900)) { uVar4 = DAT_0006b900 - DAT_0006b8f8; if ((int)(DAT_0006b904 - uVar2) <= DAT_0006b900 - DAT_0006b8f8) { uVar4 = DAT_0006b904 - uVar2; } iVar1 = DAT_0006b8f8 * 2; InterpolateUShort(this,(ushort *)(*(int *)(this + 0x3118) + iVar1), (ushort *)(*(int *)(this + 0x311c) + iVar1), (ushort *)(*(int *)(this + 0x3120) + iVar1),uVar4); DAT_0006b8f8 = DAT_0006b8f8 + uVar4; if (DAT_0006b8f8 == DAT_0006b900) { *(undefined4 *)(this + 0x2d24) = 1; } } } } LAB_000282a8: pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); return; } ### FUNC GenerateVolatileLens @ 00028314 /* CFunctions::GenerateVolatileLens() */ void __thiscall CFunctions::GenerateVolatileLens(CFunctions *this) { int iVar1; int iVar2; undefined4 uVar3; uint uVar4; int iVar5; int iVar6; int iVar7; CFunctions *pCVar8; undefined4 uVar9; int iVar10; int local_88; undefined4 local_78; int local_74; int local_70 [11]; int local_44 [11]; int local_18; local_18 = __stack_chk_guard; if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d20) != 0)) { iVar1 = (*(int *)(this + 0x2e38) + *(int *)(this + 0x2e3c)) / 2; uVar9 = *(undefined4 *)(this + 0x6c); iVar2 = __aeabi_fcmpeq(uVar9,0); if (iVar2 == 0) { local_88 = 0; iVar7 = *(int *)(this + 0x38); *(undefined4 *)(this + 0x316c) = 10; uVar3 = __floatsisf(iVar7 - iVar1); uVar9 = __mulsf3(uVar9,uVar3); uVar9 = __divsf3(uVar9,0x447a0000); uVar9 = __addsf3(uVar9,0x3f800000); local_78 = 0x3e4ccccd; iVar2 = __aeabi_fcmplt(); if (iVar2 == 0) { local_78 = uVar9; } uVar4 = *(uint *)(this + 0x5104); iVar5 = *(int *)(this + 0x5100); local_74 = 0xffff; iVar10 = 0; iVar2 = iVar10; do { local_44[iVar2] = iVar10; uVar9 = __floatsisf(iVar10 - iVar7); __mulsf3(local_78,uVar9); iVar6 = __fixsfsi(); iVar6 = (iVar1 - iVar5) + iVar6 >> (uVar4 & 0xff); if (iVar6 < 1) { iVar6 = local_88; } if (0xfffe < iVar6) { iVar6 = local_74; } local_70[iVar2] = iVar6; iVar10 = iVar10 + 10000; iVar2 = iVar2 + 1; } while (iVar2 != 0xb); pCVar8 = this + 0x3204; iVar7 = -0x28; iVar1 = local_44[0]; iVar2 = local_70[0]; do { iVar6 = *(int *)((int)local_44 + iVar7); *(int *)(this + iVar7 + 0x3198) = iVar6; iVar5 = *(int *)((int)&local_18 + iVar7); iVar10 = __udivsi3((iVar5 - iVar1) + ((uint)(iVar6 - iVar2) >> 1)); *(int *)pCVar8 = iVar10; *(int *)(pCVar8 + 4) = iVar1 - iVar10 * iVar2; pCVar8 = pCVar8 + 8; iVar7 = iVar7 + 4; iVar1 = iVar5; iVar2 = iVar6; } while (iVar7 != 0); } else { *(undefined4 *)(this + 0x316c) = 1; *(undefined4 *)(this + 0x3204) = *(undefined4 *)(this + 0x50fc); *(int *)(this + 0x3208) = (*(int *)(this + 0x5100) - iVar1) + *(int *)(this + 0x38); } } if (__stack_chk_guard != local_18) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return; } ### FUNC InterpolateShort @ 000284c0 /* CFunctions::InterpolateShort(short const*, short const*, short*, unsigned int) */ void __thiscall CFunctions::InterpolateShort (CFunctions *this,short *param_1,short *param_2,short *param_3,uint param_4) { bool bVar1; int iVar2; int iVar3; iVar2 = *(int *)(this + 0x38); if ((iVar2 < *(int *)(this + 0x2e38)) || (bVar1 = true, *(int *)(this + *(int *)(this + 0x2e2c) * 4 + 0x2e34) < iVar2)) { bVar1 = false; } iVar2 = __divsi3((iVar2 - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)) * 0x1000, *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e3c) - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)); if (iVar2 < -0x3ffe) { iVar2 = -0x3fff; } if (0x3ffe < iVar2) { iVar2 = 0x3fff; } if (bVar1) { if (param_4 != 0) { do { *param_3 = (short)((uint)(iVar2 * ((int)*param_2 - (int)*param_1)) >> 0xc) + *param_1; param_4 = param_4 - 1; param_3 = param_3 + 1; param_2 = param_2 + 1; param_1 = param_1 + 1; } while (param_4 != 0); } } else if (param_4 != 0) { do { iVar3 = (iVar2 * ((int)*param_2 - (int)*param_1) >> 0xc) + (int)*param_1; if (iVar3 < -0x7fff) { iVar3 = -0x8000; } if (0x7ffe < iVar3) { iVar3 = 0x7fff; } *param_3 = (short)iVar3; param_4 = param_4 - 1; param_3 = param_3 + 1; param_2 = param_2 + 1; param_1 = param_1 + 1; } while (param_4 != 0); } return; } ### FUNC InterpolateUShort @ 000285c4 /* CFunctions::InterpolateUShort(unsigned short const*, unsigned short const*, unsigned short*, unsigned int) */ void __thiscall CFunctions::InterpolateUShort (CFunctions *this,ushort *param_1,ushort *param_2,ushort *param_3,uint param_4) { bool bVar1; int iVar2; int iVar3; iVar2 = *(int *)(this + 0x38); if ((iVar2 < *(int *)(this + 0x2e38)) || (bVar1 = true, *(int *)(this + *(int *)(this + 0x2e2c) * 4 + 0x2e34) < iVar2)) { bVar1 = false; } iVar2 = __divsi3((iVar2 - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)) * 0x1000, *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e3c) - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)); if (iVar2 < -0x3ffe) { iVar2 = -0x3fff; } if (0x3ffe < iVar2) { iVar2 = 0x3fff; } if (bVar1) { for (; param_4 != 0; param_4 = param_4 - 1) { *param_3 = (short)(iVar2 * ((uint)*param_2 - (uint)*param_1) >> 0xc) + *param_1; param_3 = param_3 + 1; param_2 = param_2 + 1; param_1 = param_1 + 1; } } else if (param_4 != 0) { do { iVar3 = ((int)(iVar2 * ((uint)*param_2 - (uint)*param_1)) >> 0xc) + (uint)*param_1; if (iVar3 < 1) { iVar3 = 0; } if (0xfffe < iVar3) { iVar3 = 0xffff; } *param_3 = (ushort)iVar3; param_4 = param_4 - 1; param_3 = param_3 + 1; param_2 = param_2 + 1; param_1 = param_1 + 1; } while (param_4 != 0); } return; } ### FUNC Raw2Temperature @ 000286a4 /* CFunctions::Raw2Temperature(unsigned short const*) */ undefined4 __thiscall CFunctions::Raw2Temperature(CFunctions *this,ushort *param_1) { int iVar1; if (*(int *)(this + 0x3808) != 1) { iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x37a4),param_1); if (iVar1 == 0) { return 0; } param_1 = (ushort *)0x0; if (*(int *)(this + 0x37c0) != 0) { param_1 = *(ushort **)(this + 0x37ac); } } Calibration(this,param_1); return 1; } ### FUNC Calibration @ 000286e8 /* CFunctions::Calibration(unsigned short const*) */ void __thiscall CFunctions::Calibration(CFunctions *this,ushort *param_1) { if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d24) != 0)) { CalibrationMain_RTV(this,param_1); BlindCompensation(this,*(ushort **)(this + 0xb4)); return; } ConvertResponse2Temperature(this,param_1); return; } ### FUNC PushFrame @ 00028720 /* CFunctions::PushFrame(unsigned short const*, SrcDataType, int, int, int) */ undefined4 __thiscall CFunctions::PushFrame (CFunctions *this,ushort *param_1,int param_3,undefined4 param_4,int param_5,int param_6) { int iVar1; undefined4 uVar2; int iVar3; uint uVar4; pthread_mutex_t *__mutex; CFunctions *local_20; __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); iVar1 = GetTickCount(); if ((param_1 == (ushort *)0x0) || (*(int *)(this + 0xa4) == 0)) { LAB_0002880c: pthread_mutex_unlock(__mutex); return 0; } if (param_3 == 0) { if (*(int *)(this + 0xa8) == 0) goto LAB_0002880c; *(undefined4 *)(this + 0x3868) = 0; *(undefined4 *)(this + 0x3864) = 0; *(undefined4 *)(this + 0x386c) = 0; iVar3 = Raw2Temperature(this,param_1); if (iVar3 == 0) goto LAB_00028816; } else { *(undefined4 *)(this + 0x3868) = 0; *(undefined4 *)(this + 0x3864) = 0; *(undefined4 *)(this + 0x386c) = 0; if (param_3 != 1) { LAB_00028816: pthread_mutex_unlock(__mutex); return 0; } __aeabi_memcpy(*(undefined4 *)(this + 0xb4),param_1,*(int *)(this + 0x50f0) << 1); } local_20 = this + 0x3864; if (*(uint *)(this + 0x70) != 0) { Mirror(this,*(uint *)(this + 0x70)); } uVar2 = 0; if ((param_5 == 0) && (1 < *(uint *)(this + 0x380c))) { uVar4 = *(uint *)(this + 0x34) >> (*(uint *)(this + 0x5104) & 0xff); if (0xfffe < uVar4) { uVar4 = 0xffff; } CSmoother::PushFrameAve((CSmoother *)(this + 0x37c4),*(ushort **)(this + 0xb4),uVar4); uVar2 = 1; } *(undefined4 *)(this + 0x3860) = uVar2; if (param_6 == 0) goto switchD_000287fe_default; switch(*(undefined4 *)(this + 0x3814)) { case 1: FilterE2X(this); goto switchD_000287fe_default; case 2: break; case 3: FilterE2X(this); break; case 4: FilterE4X(this); break; default: goto switchD_000287fe_default; } FilterE4X(this); switchD_000287fe_default: TempRangeStat(this,*(ushort **)(this + 0xb4)); GrayEnlarge(this); if (((*(int *)local_20 != 0) && (*(int *)(this + 0x28) != 0)) && ((*(int *)(this + 0x24) == 0 || (*(int *)(this + 0xc) != 0)))) { uVar4 = *(int *)(this + 0x28) << 3; if (*(int *)(this + 0x58) == 0) { FilterDetailEnhancement(this,uVar4); } else { FilterDetailEnhancement_Simple(this,uVar4); } } iVar3 = GetTickCount(); *(int *)(this + 0x3870) = iVar3 - iVar1; CopyState(this); *(undefined4 *)(this + 0xac) = 1; pthread_mutex_unlock(__mutex); return 3; } ### FUNC Mirror @ 000288c4 /* WARNING: Restarted to delay deadcode elimination for space: stack */ /* CFunctions::Mirror(unsigned int) */ void __thiscall CFunctions::Mirror(CFunctions *this,uint param_1) { bool bVar1; int iVar2; int iVar3; int iVar4; int iVar5; uint uVar6; int iVar7; uint uVar8; int iVar9; int iVar10; int iVar11; int iVar12; uint uVar13; undefined1 auStack_818 [2052]; iVar2 = __stack_chk_guard; iVar9 = *(int *)(this + 0x37f0); iVar11 = *(int *)(this + 0x37ec); if ((*(int *)(this + 0x74) == 0xb4) || (*(int *)(this + 0x74) == 0)) { uVar8 = param_1 & 1; uVar6 = 2; } else { uVar6 = 1; uVar8 = param_1 >> 1 & 1; } if (((param_1 & uVar6) != 0) && (iVar7 = iVar9 / 2, 1 < iVar9)) { iVar10 = iVar11 * (iVar9 + -1) * 2; iVar3 = iVar11 * 2; iVar12 = 0; do { iVar4 = *(int *)(this + 0xb4); iVar5 = iVar4 + iVar12; __aeabi_memcpy(auStack_818,iVar5,iVar3); iVar4 = iVar4 + iVar10; __aeabi_memcpy(iVar5,iVar4,iVar3); __aeabi_memcpy(iVar4,auStack_818,iVar3); iVar12 = iVar12 + iVar3; iVar10 = iVar10 + iVar11 * -2; iVar7 = iVar7 + -1; } while (iVar7 != 0); } if ((uVar8 != 0) && (0 < iVar9)) { iVar3 = iVar11 * (iVar9 + -1); iVar7 = *(int *)(this + 0xb4) + iVar3 * 2; uVar6 = iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1e); iVar3 = *(int *)(this + 0xb4) + (iVar3 + (uVar6 & 0x7ffffffc)) * 2 + -4; do { if (6 < iVar11 + 3U) { iVar10 = 0; do { uVar13 = *(uint *)(iVar3 + iVar10 * -4); uVar8 = *(uint *)(iVar7 + iVar10 * 4); *(uint *)(iVar3 + iVar10 * -4) = uVar8 >> 0x10 | uVar8 << 0x10; *(uint *)(iVar7 + iVar10 * 4) = uVar13 >> 0x10 | uVar13 << 0x10; iVar10 = iVar10 + 1; } while ((int)uVar6 >> 2 != iVar10); } iVar7 = iVar7 + iVar11 * -2; iVar3 = iVar3 + iVar11 * -2; bVar1 = 1 < iVar9; iVar9 = iVar9 + -1; } while (bVar1); } if (__stack_chk_guard != iVar2) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return; } ### FUNC ConvertDeltamC2InnerTemp @ 00028a20 /* CFunctions::ConvertDeltamC2InnerTemp(unsigned int) const */ uint __thiscall CFunctions::ConvertDeltamC2InnerTemp(CFunctions *this,uint param_1) { uint uVar1; uVar1 = param_1 >> (*(uint *)(this + 0x5104) & 0xff); if (0xfffe < uVar1) { uVar1 = 0xffff; } return uVar1 & 0xffff; } ### FUNC FilterE2X @ 00028a3c /* CFunctions::FilterE2X() */ void __thiscall CFunctions::FilterE2X(CFunctions *this) { ushort uVar1; ushort *puVar2; uint uVar3; uint uVar4; uint uVar5; CFunctions *pCVar6; int iVar7; ushort *puVar8; uint uVar9; int iVar10; int iVar11; uint uVar12; uint *puVar13; uint *local_18; uVar5 = *(uint *)(this + 0x37ec); iVar10 = *(int *)(this + 0xb4) + uVar5 * *(int *)(this + 0x381c) * 2 + *(int *)(this + 0x3818) * 2 ; iVar11 = *(int *)(this + 0xbc); pCVar6 = this + 0x37ec; iVar7 = -1 - (*(uint *)(this + 0x37f0) >> 1); do { __aeabi_memcpy(iVar11,iVar10,uVar5 + 4 & 0xfffffffe); uVar5 = *(uint *)pCVar6; iVar10 = iVar10 + uVar5 * 2; iVar11 = iVar11 + (uVar5 & 0xfffffffe) + 4; iVar7 = iVar7 + 1; } while (iVar7 != 0); uVar3 = *(uint *)(this + 0x37f0) >> 1; if (uVar3 != 0) { puVar8 = *(ushort **)(this + 0xbc); local_18 = *(uint **)(this + 0xb4); while( true ) { uVar12 = uVar5 >> 1; if (uVar12 != 0) { iVar11 = -uVar12; puVar2 = puVar8 + uVar12; uVar5 = (uint)*puVar8; puVar13 = local_18; do { puVar8 = puVar8 + 1; uVar1 = *puVar8; *puVar13 = (uVar1 + uVar5) * 0x8000 & 0xffff0000 | uVar5; puVar13 = puVar13 + 1; iVar11 = iVar11 + 1; uVar5 = (uint)uVar1; } while (iVar11 != 0); local_18 = local_18 + uVar12; uVar5 = *(uint *)pCVar6; puVar8 = puVar2; } uVar5 = uVar5 >> 1; puVar2 = puVar8 + -uVar5; iVar11 = -uVar5; if (uVar5 != 0) { uVar12 = (uint)puVar8[2]; uVar9 = (uint)*puVar2; iVar7 = 0; do { uVar4 = uVar12 + uVar9; uVar9 = (uint)*(ushort *)((int)puVar8 + -iVar7 + uVar5 * -2 + 2); uVar12 = (uint)*(ushort *)((int)puVar8 + -iVar7 + 6); *(uint *)((int)local_18 + iVar7 * -2) = uVar4 >> 1 | (uVar4 + uVar9 + uVar12) * 0x4000 & 0xffff0000; iVar11 = iVar11 + 1; iVar7 = iVar7 + -2; } while (iVar11 != 0); local_18 = local_18 + uVar5; puVar2 = puVar8; } uVar3 = uVar3 - 1; if (uVar3 == 0) break; uVar5 = *(uint *)pCVar6; puVar8 = puVar2 + 2; } } return; } ### FUNC FilterE4X @ 00028ba0 /* CFunctions::FilterE4X() */ void __thiscall CFunctions::FilterE4X(CFunctions *this) { uint uVar1; uint uVar2; CFunctions *pCVar3; uint uVar4; int iVar5; uint uVar6; uint uVar7; uint uVar8; int iVar9; uint *puVar10; ushort *puVar11; uint uVar12; ushort *puVar13; ushort *puVar14; int local_58; int local_20; uint *local_18; uVar6 = *(uint *)(this + 0x37ec); iVar9 = *(int *)(this + 0xb4) + uVar6 * *(int *)(this + 0x381c) * 2 + *(int *)(this + 0x3818) * 2; iVar5 = *(int *)(this + 0xbc); pCVar3 = this + 0x37ec; uVar7 = ~(*(uint *)(this + 0x37f0) >> 2); local_58 = 0; do { __aeabi_memcpy(iVar5,iVar9,(uVar6 >> 1 & 0x7ffffffe) + 4); uVar6 = *(uint *)pCVar3; iVar9 = iVar9 + uVar6 * 2; iVar5 = iVar5 + (uVar6 >> 1 & 0x7ffffffe) + 4; uVar7 = uVar7 + 1; } while (uVar7 != 0); uVar7 = *(uint *)(this + 0x37f0) >> 2; if (uVar7 != 0) { puVar11 = *(ushort **)(this + 0xbc); local_18 = *(uint **)(this + 0xb4); while( true ) { uVar4 = uVar6 >> 2; if (uVar4 != 0) { iVar5 = -uVar4; uVar6 = (uint)*puVar11; puVar10 = local_18; puVar13 = puVar11; do { puVar13 = puVar13 + 1; uVar8 = (uint)*puVar13; *puVar10 = (uVar6 * 3 + uVar8) * 0x4000 & 0xffff0000 | uVar6; puVar10[1] = uVar8 + uVar6 >> 1 | (uVar8 * 3 + uVar6) * 0x4000 & 0xffff0000; puVar10 = puVar10 + 2; iVar5 = iVar5 + 1; uVar6 = uVar8; } while (iVar5 != 0); local_18 = local_18 + uVar4 * 2; puVar11 = puVar11 + uVar4; uVar6 = *(uint *)pCVar3; } uVar4 = uVar6 >> 2; puVar13 = puVar11 + -uVar4; local_20 = -uVar4; if (uVar4 != 0) { iVar5 = local_58; uVar6 = (uint)*puVar13; uVar8 = (uint)puVar11[2]; do { uVar12 = (uint)*(ushort *)((int)puVar11 + -iVar5 + 6); uVar1 = (uint)*(ushort *)((int)puVar11 + -iVar5 + uVar4 * -2 + 2); local_18[-iVar5] = uVar6 * 3 + uVar8 >> 2 | (uVar6 * 9 + uVar12 + (uVar1 + uVar8) * 3) * 0x1000 & 0xffff0000; local_18[1 - iVar5] = (uVar1 + uVar6) * 3 + uVar8 + uVar12 >> 3 | (uVar1 * 9 + uVar8 + (uVar12 + uVar6) * 3) * 0x1000 & 0xffff0000; local_20 = local_20 + 1; iVar5 = iVar5 + -2; uVar6 = uVar1; uVar8 = uVar12; } while (local_20 != 0); local_18 = local_18 + uVar4 * 2; uVar6 = *(uint *)pCVar3; puVar13 = puVar11; } uVar4 = uVar6 >> 2; puVar14 = puVar13 + -uVar4; iVar5 = -uVar4; if (uVar4 != 0) { iVar9 = 0; uVar6 = (uint)puVar13[2]; uVar8 = (uint)*puVar14; do { uVar1 = uVar6 + uVar8; uVar12 = (uint)*(ushort *)((int)puVar13 + -iVar9 + uVar4 * -2 + 2); uVar2 = (uint)*(ushort *)((int)puVar13 + -iVar9 + 6); local_18[-iVar9] = uVar1 >> 1 | (uVar1 * 3 + uVar12 + uVar2) * 0x2000 & 0xffff0000; local_18[1 - iVar9] = uVar12 + uVar8 + uVar6 + uVar2 >> 2 | (uVar1 + (uVar2 + uVar12) * 3) * 0x2000 & 0xffff0000; iVar5 = iVar5 + 1; iVar9 = iVar9 + -2; uVar6 = uVar2; uVar8 = uVar12; } while (iVar5 != 0); local_18 = local_18 + uVar4 * 2; uVar6 = *(uint *)pCVar3; puVar14 = puVar13; } uVar6 = uVar6 >> 2; puVar11 = puVar14 + -uVar6; local_20 = -uVar6; if (uVar6 != 0) { iVar5 = 0; uVar4 = (uint)*puVar11; uVar8 = (uint)puVar14[2]; do { uVar1 = (uint)*(ushort *)((int)puVar14 + -iVar5 + uVar6 * -2 + 2); uVar12 = (uint)*(ushort *)((int)puVar14 + -iVar5 + 6); local_18[-iVar5] = uVar8 * 3 + uVar4 >> 2 | (uVar8 * 9 + uVar1 + (uVar12 + uVar4) * 3) * 0x1000 & 0xffff0000; local_18[1 - iVar5] = ((uVar8 + uVar1) * 3 + uVar4 + uVar12 * 9) * 0x1000 & 0xffff0000 | uVar1 + uVar4 + (uVar12 + uVar8) * 3 >> 3; local_20 = local_20 + 1; iVar5 = iVar5 + -2; uVar4 = uVar1; uVar8 = uVar12; } while (local_20 != 0); local_18 = local_18 + uVar6 * 2; puVar11 = puVar14; } uVar7 = uVar7 - 1; if (uVar7 == 0) break; uVar6 = *(uint *)pCVar3; puVar11 = puVar11 + 2; } } return; } ### FUNC TempRangeStat @ 00028eec /* CFunctions::TempRangeStat(unsigned short const*) */ void __thiscall CFunctions::TempRangeStat(CFunctions *this,ushort *param_1) { int iVar1; uint uVar2; uint uVar3; uint uVar4; undefined4 uVar5; int iVar6; uint uVar7; uint uVar8; ushort *puVar9; bool bVar10; int local_34; uint local_28; uint local_24; int local_20; uint local_1c; int local_18; uVar4 = *(uint *)(this + 0x50f0); local_24 = (uint)*param_1; local_34 = 0; local_28 = local_24; if (uVar4 == 0) { iVar6 = 0; local_1c = 0; local_18 = 0; } else { uVar7 = 1; local_1c = 0; local_18 = 0; local_20 = 0; local_34 = 0; uVar8 = local_24; puVar9 = param_1 + 1; while( true ) { bVar10 = CARRY4(local_1c,uVar8); local_1c = local_1c + uVar8; local_18 = local_18 + (uint)bVar10; iVar6 = local_20; iVar1 = uVar7 - 1; uVar2 = local_28; uVar3 = uVar8; if ((uVar8 <= local_24) && (iVar6 = uVar7 - 1, iVar1 = local_34, uVar2 = uVar8, uVar3 = local_24, local_28 <= uVar8)) { iVar6 = local_20; uVar2 = local_28; } local_24 = uVar3; local_28 = uVar2; local_34 = iVar1; if (uVar4 <= uVar7) break; uVar7 = uVar7 + 1; uVar8 = (uint)*puVar9; puVar9 = puVar9 + 1; local_20 = iVar6; } } *(int *)(this + 0x3848) = local_34; *(int *)(this + 0x384c) = iVar6; *(uint *)(this + 0x383c) = local_28; *(uint *)(this + 0x3838) = local_24; uVar5 = __aeabi_ldivmod(local_1c,local_18,uVar4,0); *(undefined4 *)(this + 0x3840) = uVar5; return; } ### FUNC GrayEnlarge @ 00028fbc /* CFunctions::GrayEnlarge() */ void __thiscall CFunctions::GrayEnlarge(CFunctions *this) { int iVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; uVar4 = *(uint *)(this + 0x3838); uVar5 = *(uint *)(this + 0x383c); if (uVar5 == uVar4) { *(uint *)(this + 0x3854) = uVar5; *(uint *)(this + 0x3858) = uVar5; __aeabi_memset4(this + 0x4074,0x400,0x80); __aeabi_memset(*(undefined4 *)(this + 0xc0),*(undefined4 *)(this + 0x50f0),0x80); __aeabi_memclr4(this + 0x3874,0x400); *(undefined4 *)(this + 0x3a74) = *(undefined4 *)(this + 0x50f0); __aeabi_memset(*(undefined4 *)(this + 200),*(undefined4 *)(this + 0x50f8),0x80); *(undefined4 *)(this + 0x3864) = 1; return; } if (*(int *)(this + 0xc) == 0) { iVar1 = 0x3840; if (*(int *)(this + 0x5c) != 0) { SearchSeparateLine(this); iVar1 = 0x447c; uVar4 = *(uint *)(this + 0x3838); uVar5 = *(uint *)(this + 0x383c); } iVar1 = *(int *)(this + iVar1); uVar2 = CalContrastOffsetedAutoEnlargeRange(this); uVar3 = iVar1 - (uVar2 >> 1); if (uVar5 <= uVar3) { uVar3 = uVar5; } *(uint *)(this + 0x3858) = uVar3; uVar5 = (uVar2 >> 1) + iVar1; if (uVar5 <= uVar4) { uVar5 = uVar4; } *(uint *)(this + 0x3854) = uVar5; if ((int)uVar3 < 0) { *(undefined4 *)(this + 0x3858) = 0; } if (0xffff < (int)uVar5) { *(undefined4 *)(this + 0x3854) = 0xffff; } HistDeRedundance(this); if (*(int *)(this + 0x24) != 0) { IsothermalPalette(this); *(undefined4 *)(this + 0x4474) = 1; goto LAB_000290e4; } if (*(int *)(this + 0x5108) == 0xb) { DynamicRedPalette(this); goto LAB_000290e4; } } else { SubSectionEnlarge(this); } if (*(int *)(this + 0x4474) != 0) { __aeabi_memcpy(this + 0x24f4,this + 0x20cc,0x400); __aeabi_memcpy(this + 0x291c,this + 0x20cc,0x400); *(undefined4 *)(this + 0x4474) = 0; } LAB_000290e4: MapTemperature((int)this); return; } ### FUNC FilterDetailEnhancement_Simple @ 00029134 /* CFunctions::FilterDetailEnhancement_Simple(unsigned int) */ void __thiscall CFunctions::FilterDetailEnhancement_Simple(CFunctions *this,uint param_1) { uint uVar1; CFunctions *pCVar2; CFunctions *pCVar3; int iVar4; uint uVar5; byte *pbVar6; CFunctions *pCVar7; ushort *puVar8; int *piVar9; int iVar10; uint local_20; if (param_1 != 0) { uVar1 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff); if (0xfffe < uVar1) { uVar1 = 0xffff; } uVar1 = param_1 * uVar1 * 2 >> 8; pCVar2 = this + 0x37ec; pCVar3 = this + 0x37f0; pCVar7 = this + 0xc4; local_20 = 0; do { iVar4 = *(int *)pCVar2; if (iVar4 != 6) { iVar10 = 6 - iVar4; puVar8 = (ushort *)(*(int *)(this + 0xb4) + iVar4 * local_20 * 2); piVar9 = (int *)(*(int *)pCVar7 + iVar4 * (local_20 + 3) * 4 + 0xc); do { LocalMap7x7_Simple(this,piVar9,puVar8,uVar1); iVar10 = iVar10 + 1; puVar8 = puVar8 + 1; piVar9 = piVar9 + 1; } while (iVar10 != 0); } local_20 = local_20 + 2; iVar4 = *(int *)pCVar3; } while (local_20 <= iVar4 - 7U); iVar10 = 7; if (iVar4 != 7) { uVar5 = 1; do { iVar10 = *(int *)pCVar2; if (iVar10 != 6) { iVar4 = 6 - iVar10; puVar8 = (ushort *)(*(int *)(this + 0xb4) + iVar10 * uVar5 * 2); piVar9 = (int *)(*(int *)pCVar7 + iVar10 * (uVar5 + 3) * 4 + 0xc); do { LocalMap7x7_Simple(this,piVar9,puVar8,uVar1); iVar4 = iVar4 + 1; puVar8 = puVar8 + 1; piVar9 = piVar9 + 1; } while (iVar4 != 0); iVar4 = *(int *)pCVar3; } uVar5 = uVar5 + 2; } while (uVar5 <= iVar4 - 7U); iVar10 = iVar4; if (iVar4 - 3U < 4) { return; } } uVar1 = 3; do { iVar4 = *(int *)pCVar2; if (iVar4 != 6) { iVar10 = 6 - iVar4; piVar9 = (int *)(*(int *)pCVar7 + iVar4 * uVar1 * 4 + 0xc); pbVar6 = (byte *)(*(int *)(this + 0xc0) + iVar4 * uVar1 + 3); do { iVar4 = *piVar9; piVar9 = piVar9 + 1; iVar4 = ((int)(param_1 * iVar4 + ((uint)((int)(param_1 * iVar4) >> 0x1f) >> 0x11)) >> 0xf) + (uint)*pbVar6; if (iVar4 < 1) { iVar4 = 0; } if (0xfe < iVar4) { iVar4 = 0xff; } *pbVar6 = (byte)iVar4; iVar10 = iVar10 + 1; pbVar6 = pbVar6 + 1; } while (iVar10 != 0); iVar10 = *(int *)pCVar3; } uVar1 = uVar1 + 1; } while (uVar1 < iVar10 - 3U); } return; } ### FUNC FilterDetailEnhancement @ 000292a0 /* CFunctions::FilterDetailEnhancement(unsigned int) */ void __thiscall CFunctions::FilterDetailEnhancement(CFunctions *this,uint param_1) { uint uVar1; uint uVar2; CFunctions *pCVar3; uint uVar4; int iVar5; int *piVar6; int iVar7; uint uVar8; int iVar9; int iVar10; uint local_34; int local_30; uint local_24; int local_20; if (param_1 != 0) { __aeabi_memclr4(*(undefined4 *)(this + 0xc4),*(int *)(this + 0x50f0) << 2); uVar1 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff); if (0xfffe < uVar1) { uVar1 = 0xffff; } pCVar3 = this + 0x37ec; uVar4 = *(uint *)(this + 0x37f0); uVar8 = 6; if (uVar4 != 6) { iVar9 = 0; local_30 = 0; local_34 = 0; do { iVar5 = *(int *)pCVar3; if (iVar5 != 6) { iVar7 = iVar5 * iVar9; iVar10 = iVar5 * local_30; iVar5 = 6 - iVar5; do { LocalMap7x7(this,(int *)(*(int *)(this + 0xc4) + iVar10), (ushort *)(*(int *)(this + 0xb4) + iVar7),param_1 * uVar1 * 2 >> 8); iVar7 = iVar7 + 2; iVar10 = iVar10 + 4; iVar5 = iVar5 + 1; } while (iVar5 != 0); uVar4 = *(uint *)(this + 0x37f0); } iVar9 = iVar9 + 2; local_30 = local_30 + 4; local_34 = local_34 + 1; } while (local_34 < uVar4 - 6); uVar8 = uVar4; if (uVar4 == 0) { return; } } local_20 = *(int *)(this + 0xc0); piVar6 = *(int **)(this + 0xc4); uVar1 = 0; do { if (uVar1 < 6) { local_24 = (uVar1 >> 1) + 1; } else { local_24 = 4; if (uVar8 < uVar1 + 7) { local_24 = (1 - uVar1) + uVar8 >> 1; } } uVar4 = *(uint *)pCVar3; if (uVar4 != 0) { uVar8 = 0; iVar9 = 1; do { if (uVar8 < 6) { uVar2 = (uVar8 >> 1) + 1; } else { uVar2 = 4; if (uVar4 < uVar8 + 7) { uVar2 = uVar4 + iVar9 >> 1; } } iVar5 = 0x80000; if (local_24 * uVar2 != 0x10) { iVar5 = local_24 * uVar2 * 0x8000; } iVar7 = *piVar6; piVar6 = piVar6 + 1; iVar5 = __divsi3(param_1 * iVar7,iVar5); iVar5 = iVar5 + (uint)*(byte *)(local_20 + uVar8); if (iVar5 < 1) { iVar5 = 0; } if (0xfe < iVar5) { iVar5 = 0xff; } *(byte *)(local_20 + uVar8) = (byte)iVar5; iVar9 = iVar9 + -1; uVar8 = uVar8 + 1; uVar4 = *(uint *)pCVar3; } while (uVar8 < uVar4); local_20 = local_20 + uVar8; uVar8 = *(uint *)(this + 0x37f0); } uVar1 = uVar1 + 1; } while (uVar1 < uVar8); } return; } ### FUNC CopyState @ 00029418 /* CFunctions::CopyState() */ void __thiscall CFunctions::CopyState(CFunctions *this) { undefined4 uVar1; float extraout_s0; float extraout_s0_00; float extraout_s0_01; __aeabi_memcpy4(this + 0x4488,this + 0x3820,0xc68); *(uint *)(this + 0x44c4) = (uint)*(ushort *)(this + 0x385c) << (*(uint *)(this + 0x5104) & 0xff); *(uint *)(this + 0x44ac) = (uint)*(ushort *)(this + 0x3844) << (*(uint *)(this + 0x5104) & 0xff); uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3840), (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); *(undefined4 *)(this + 0x44a8) = uVar1; uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3854), (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); *(undefined4 *)(this + 0x44bc) = uVar1; uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3838),*(uint *)(this + 0x44b0)); *(undefined4 *)(this + 0x44a0) = uVar1; uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3858), (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); *(undefined4 *)(this + 0x44c0) = uVar1; uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x383c),*(uint *)(this + 0x44b4)); *(undefined4 *)(this + 0x44a4) = uVar1; if (*(int *)(this + 0x50) != 0) { uVar1 = CorrectTemperature((int)this,extraout_s0,*(uint *)(this + 0x44a8)); *(undefined4 *)(this + 0x44a8) = uVar1; uVar1 = CorrectTemperature((int)this,extraout_s0_00,*(uint *)(this + 0x44a4)); *(undefined4 *)(this + 0x44a4) = uVar1; uVar1 = CorrectTemperature((int)this,extraout_s0_01,*(uint *)(this + 0x44a0)); *(undefined4 *)(this + 0x44a0) = uVar1; } return; } ### FUNC ConvertDeltaInnerTemp2mC @ 0002954c /* CFunctions::ConvertDeltaInnerTemp2mC(unsigned short) const */ int __thiscall CFunctions::ConvertDeltaInnerTemp2mC(CFunctions *this,ushort param_1) { return (uint)param_1 << (*(uint *)(this + 0x5104) & 0xff); } ### FUNC ReviseTemperature @ 0002955c /* CFunctions::ReviseTemperature(unsigned short, unsigned int) */ int __thiscall CFunctions::ReviseTemperature(CFunctions *this,ushort param_1,uint param_2) { uint uVar1; int iVar2; int iVar3; uint uVar4; undefined4 uVar5; undefined4 uVar6; CFunctions *this_00; int iVar7; int iVar8; int iVar9; CFunctions *pCVar10; int iVar11; uint uVar12; int iVar13; int iVar14; uint uVar15; undefined4 uVar16; float __x; undefined8 uVar17; int local_28; uVar15 = (uint)param_1; if (*(int *)(this + 0x3128) == 0) { iVar7 = (uVar15 << (*(uint *)(this + 0x5104) & 0xff)) + *(int *)(this + 0x5100); } else { uVar1 = 0; if (*(uint *)(this + 0x68) < *(uint *)(this + 0x312c)) { uVar1 = *(uint *)(this + 0x68); } uVar16 = *(undefined4 *)(this + uVar1 * 0x21c + 0x3334); iVar2 = __aeabi_fcmpgt(uVar16,0x3c23d70a); iVar3 = __aeabi_fcmplt(uVar16,0x3f7d70a4); local_28 = 0x111; if (iVar2 != 0 && iVar3 != 0) { iVar8 = *(int *)(this + 0x5100); uVar4 = *(uint *)(this + 0x5104); iVar13 = (uVar15 << (uVar4 & 0xff)) + iVar8; iVar9 = iVar13 + 50000; iVar7 = 0; if (-0xe350 < iVar13) { iVar7 = 0x111; if (iVar13 < 0x217cb0) { iVar7 = (int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd; } } iVar14 = *(int *)(T2E + iVar7 * 4); iVar9 = (*(int *)(T2E + iVar7 * 4 + 4) - iVar14) * (iVar9 + iVar7 * -0x2000); iVar11 = *(int *)(this + 0x40); iVar13 = iVar11 + 50000; iVar7 = 0; if (-0xe350 < iVar11) { iVar7 = 0x111; if (iVar11 < 0x217cb0) { iVar7 = (int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd; } } iVar13 = (*(int *)(T2E + iVar7 * 4 + 4) - *(int *)(T2E + iVar7 * 4)) * (iVar13 + iVar7 * -0x2000); uVar5 = __floatsisf(((int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd) + *(int *)(T2E + iVar7 * 4)); uVar6 = __subsf3(0x3f800000,uVar16); uVar5 = __mulsf3(uVar6,uVar5); uVar6 = __floatsisf(((int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd) + iVar14); uVar5 = __subsf3(uVar6,uVar5); __divsf3(uVar5,uVar16); this_00 = (CFunctions *)__fixsfsi(); pCVar10 = (CFunctions *)T2E._0_4_; if ((int)T2E._0_4_ <= (int)this_00) { pCVar10 = this_00; } iVar7 = Energe2Temp(this_00,(int)pCVar10); uVar15 = iVar7 - iVar8 >> (uVar4 & 0xff); } uVar4 = 0; if (*(int *)(this + uVar1 * 0x21c + 0x316c) != 1) { uVar4 = 0; do { if ((int)uVar15 <= *(int *)(this + uVar4 * 4 + uVar1 * 0x21c + 0x3170)) break; uVar4 = uVar4 + 1; } while (uVar4 < *(int *)(this + uVar1 * 0x21c + 0x316c) - 1U); } iVar7 = uVar1 * 0x21c + 0x3204; uVar17 = __muldi3(*(int *)(this + uVar4 * 8 + iVar7),*(int *)(this + uVar4 * 8 + iVar7) >> 0x1f, uVar15,(int)uVar15 >> 0x1f); iVar8 = (int)((ulonglong)uVar17 >> 0x20); uVar12 = *(uint *)(this + uVar1 * 0x21c + 0x3160); uVar15 = iVar8 >> (uVar12 - 0x20 & 0xff); if ((int)(uVar12 - 0x20) < 0) { uVar15 = (uint)uVar17 >> (uVar12 & 0xff) | iVar8 << (0x20 - uVar12 & 0xff); } iVar7 = *(int *)(this + (uVar4 * 8 | 4) + iVar7) + uVar15; iVar8 = 0; if (iVar2 == 0 || iVar3 == 0) { iVar3 = *(int *)(this + 0x3c); iVar2 = 0; if (-0xe350 < iVar3) { iVar2 = 0x111; if (iVar3 < 0x217cb0) { iVar2 = (int)(iVar3 + 50000 + ((uint)(iVar3 + 50000 >> 0x1f) >> 0x13)) >> 0xd; } } iVar2 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * (((*(int *)(this + uVar1 * 0x21c + 0x3168) - *(int *)(this + uVar1 * 0x21c + 0x3164)) + *(int *)(this + 0x38)) - iVar3); iVar8 = (int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd; } iVar2 = __aeabi_fcmpeq(*(undefined4 *)(this + uVar1 * 0x21c + 0x3344)); if (iVar2 == 0) { uVar15 = *(uint *)(this + 0x37ec); iVar2 = __udivsi3(param_2,uVar15); iVar3 = iVar2 - (*(uint *)(this + 0x37f0) >> 1); iVar2 = (param_2 - uVar15 * iVar2) - (uVar15 >> 1); __x = (float)__floatsisf(iVar2 * iVar2 + iVar3 * iVar3); sqrtf(__x); uVar16 = __mulsf3(); iVar3 = iVar7 + 50000; iVar2 = 0; if (-0xe350 < iVar7) { iVar2 = 0x111; if (iVar7 < 0x217cb0) { iVar2 = (int)(iVar3 + ((uint)(iVar3 >> 0x1f) >> 0x13)) >> 0xd; } } iVar9 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * (iVar3 + iVar2 * -0x2000); iVar11 = *(int *)(this + 0x40); iVar13 = iVar11 + 50000; iVar3 = 0; if (-0xe350 < iVar11) { iVar3 = 0x111; if (iVar11 < 0x217cb0) { iVar3 = (int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd; } } iVar13 = (*(int *)(T2E + iVar3 * 4 + 4) - *(int *)(T2E + iVar3 * 4)) * (iVar13 + iVar3 * -0x2000); uVar5 = __floatsisf(((((int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd) + *(int *)(T2E + iVar2 * 4)) - *(int *)(T2E + iVar3 * 4)) - ((int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd)); __mulsf3(uVar16,uVar5); iVar2 = __fixsfsi(); iVar8 = iVar8 + iVar2; } iVar2 = 0; if ((-0xe350 < iVar7) && (iVar2 = local_28, iVar7 < 0x217cb0)) { iVar2 = (int)(iVar7 + 50000 + ((uint)(iVar7 + 50000 >> 0x1f) >> 0x13)) >> 0xd; } iVar7 = (*(int *)(E2TAccQ10 + iVar2 * 4) * -iVar8 >> 10) + iVar7; } return iVar7; } ### FUNC CorrectTemperature @ 000298f0 /* CFunctions::CorrectTemperature(int, float, unsigned int) const */ uint CFunctions::CorrectTemperature(int param_1,float param_2,uint param_3) { int iVar1; int iVar2; undefined4 uVar3; undefined4 uVar4; CFunctions *this; uint uVar5; undefined4 *puVar6; int iVar7; undefined4 in_r2; int iVar8; undefined4 uVar9; int local_20; uVar9 = *(undefined4 *)(param_1 + 0x9c); iVar1 = __aeabi_fcmple(uVar9,0); if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(), iVar1 == 0)) { local_20 = 0; iVar1 = __aeabi_fcmple(); if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(uVar9,0x3f800000), iVar1 == 0)) { iVar2 = param_3 + 50000; iVar1 = 0; if (-0xe350 < (int)param_3) { iVar1 = 0x111; if ((int)param_3 < 0x217cb0) { iVar1 = (int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd; } } iVar8 = *(int *)(T2E + iVar1 * 4); iVar1 = (*(int *)(T2E + iVar1 * 4 + 4) - iVar8) * (iVar2 + iVar1 * -0x2000); __mulsf3(*(undefined4 *)(param_1 + 0x80),0x447a0000); iVar2 = __fixsfsi(); iVar7 = iVar2 + 50000; if (-0xe350 < iVar2) { local_20 = 0x111; if (iVar2 < 0x217cb0) { local_20 = (int)(iVar7 + ((uint)(iVar7 >> 0x1f) >> 0x13)) >> 0xd; } } iVar2 = (*(int *)(T2E + local_20 * 4 + 4) - *(int *)(T2E + local_20 * 4)) * (iVar7 + local_20 * -0x2000); uVar3 = __floatsisf(((int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd) + *(int *)(T2E + local_20 * 4)); uVar9 = __mulsf3(uVar9,*(undefined4 *)(param_1 + 0xa0)); uVar9 = __mulsf3(uVar9,in_r2); uVar4 = __subsf3(0x3f800000,uVar9); uVar3 = __mulsf3(uVar4,uVar3); uVar4 = __floatsisf(((int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd) + iVar8); uVar3 = __subsf3(uVar4,uVar3); __divsf3(uVar3,uVar9); this = (CFunctions *)__fixsfsi(); uVar5 = Energe2Temp(this,(int)this); if (-0x42afe < (int)uVar5) { return uVar5; } return 0xfffbd502; } } puVar6 = (undefined4 *)__errno(); *puVar6 = 0xe4ae0001; return param_3; } ### FUNC length @ 00029a64 /* length(__sFILE*) */ long length(__sFILE *param_1) { long __off; long lVar1; __off = ftell((FILE *)param_1); fseek((FILE *)param_1,0,2); lVar1 = ftell((FILE *)param_1); fseek((FILE *)param_1,__off,0); return lVar1; } ### FUNC LoadCalibrationTable @ 00029a98 /* CFunctions::LoadCalibrationTable(char const*) */ void __thiscall CFunctions::LoadCalibrationTable(CFunctions *this,char *param_1) { pthread_mutex_t *__mutex; int iVar1; MStream *pMVar2; Logging *pLVar3; FILE *__stream; CFunctions *pCVar4; CFunctions *pCVar5; CFunctions *__ptr; CFunctions *__ptr_00; int iVar6; int iVar7; void *pvVar8; void *pvVar9; int iVar10; long lVar11; CFunctions *pCVar12; CFunctions *pCVar13; int iVar14; uint uVar15; size_t __n; uint uVar16; uint uVar17; undefined4 uVar18; CFunctions *pCVar19; int iVar20; CFunctions *pCVar21; undefined4 local_98; int local_94; CFunctions *local_88; int local_84; Logging aLStack_80 [12]; Logging aLStack_74 [12]; Logging aLStack_68 [12]; Logging aLStack_5c [12]; int local_50; Logging aLStack_4c [12]; Logging aLStack_40 [12]; Logging aLStack_34 [12]; undefined4 local_28; uint local_24; int local_20; int local_1c; int local_18; local_18 = __stack_chk_guard; __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); pCVar12 = this + 0x2d1c; if (*(void **)(this + 0x2f74) != (void *)0x0) { operator_delete__(*(void **)(this + 0x2f74)); *(undefined4 *)(this + 0x2f74) = 0; } if (*(void **)(this + 0x2f78) != (void *)0x0) { operator_delete__(*(void **)(this + 0x2f78)); *(undefined4 *)(this + 0x2f78) = 0; } if (*(void **)(this + 0x2f7c) != (void *)0x0) { operator_delete__(*(void **)(this + 0x2f7c)); *(undefined4 *)(this + 0x2f7c) = 0; } __aeabi_memclr4(pCVar12,0xa68); pCVar13 = this + 0x3128; if ((*(int *)(this + 0xa4) != 0) && (*param_1 != '\0')) { iVar1 = access(param_1,0); if (iVar1 == 0) { __stream = fopen(param_1,"rb"); if (__stream == (FILE *)0x0) { pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_4c,4); MStream::operator<<(pMVar2,"x3"); pLVar3 = aLStack_4c; } else { strncpy((char *)(this + 0x2d28),param_1,0x100); this[0x2e27] = (CFunctions)0x0; local_50 = 0; fread(&local_50,4,1,__stream); fread(&local_1c,4,1,__stream); fread(&local_20,4,1,__stream); pCVar4 = this + 0x2e2c; fread(pCVar4,4,1,__stream); pCVar5 = this + 0x2e28; fread(pCVar5,4,1,__stream); fread(&local_24,4,1,__stream); fread(&local_28,4,1,__stream); __ptr = this + 0x2e30; fread(__ptr,4,1,__stream); fread(this + 0x2e34,4,1,__stream); if ((((local_50 == 0x5aa50003) && (*(size_t *)pCVar4 - 2 < 0x12)) && (*(int *)pCVar5 != 0)) && ((local_24 != 0 && ((local_24 - 1 & local_24) == 0)))) { if ((local_1c == *(int *)(this + 0x37ec)) && (local_20 == *(int *)(this + 0x37f0))) { __ptr_00 = this + 0x2e38; fread(__ptr_00,4,*(size_t *)pCVar4,__stream); fread(this + 0x2e88,4,*(size_t *)pCVar4,__stream); fread(this + 0x2ed8,4,*(size_t *)pCVar4,__stream); fread(this + 0x2f28,4,*(int *)pCVar4 - 1,__stream); std::ostream::_M_put_nowiden((ostream *)std::cout,"LoadCalibrationTable"); std::ostream::_M_put_nowiden((ostream *)std::cout,":"); std::ostream::_M_put_nowiden((ostream *)std::cout,"read stage 2\n"); pCVar19 = this + 0x50f0; iVar1 = *(int *)pCVar4; uVar15 = 0; pCVar21 = __ptr_00; LAB_00029d24: if (uVar15 < iVar1 - 1U) { if (*(uint *)(pCVar21 + 0xf0) < *(uint *)pCVar19) goto code_r0x00029d32; goto LAB_00029d3c; } iVar7 = *(int *)(this + 0x2e34) + *(int *)__ptr + (*(int *)pCVar5 * 3 + -1) * *(int *)pCVar19 * 2; uVar15 = 0; iVar6 = 1; if (iVar1 != 1) { uVar16 = 0; uVar15 = 0; do { uVar15 = *(int *)(this + uVar16 * 4 + 0x2f28) * 0x28 + uVar15; uVar16 = uVar16 + 1; iVar6 = iVar1; } while (uVar16 < iVar1 - 1U); } iVar6 = uVar15 + iVar6 * (iVar7 + 0x10) + 0x20; iVar1 = length((__sFILE *)__stream); if (iVar1 < iVar6) { std::ostream::_M_put_nowiden ((ostream *)std::cout,"The calibration table length is not correct.\n"); fclose(__stream); pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_80,4); MStream::operator<<(pMVar2,"x7"); pLVar3 = aLStack_80; goto LAB_00029b50; } iVar1 = length((__sFILE *)__stream); pvVar8 = operator_new__(iVar7 * *(int *)pCVar4 + 3U & 0xfffffffc); *(void **)(this + 0x2f74) = pvVar8; pvVar8 = operator_new__(iVar7 + 3U & 0xfffffffc); *(void **)(this + 0x2f78) = pvVar8; if (uVar15 != 0) { pvVar9 = operator_new__((uVar15 | 4) - 1 & 0xfffffff8); *(void **)(this + 0x2f7c) = pvVar9; } *(void **)(this + 0x3114) = pvVar8; *(uint *)(this + 0x3120) = (int)pvVar8 + (*(uint *)__ptr & 0xfffffffe) + *(int *)pCVar19 * (*(int *)pCVar5 + -1) * 2; iVar10 = ftell(__stream); *(int *)(this + 0x2fd0) = iVar10; *(undefined4 *)(this + 0x3020) = 0; uVar16 = *(uint *)pCVar4; if (1 < uVar16) { pCVar5 = this + 0x2fd4; uVar17 = 1; iVar20 = iVar7; do { *(int *)(pCVar5 + 0x50) = iVar20; *(int *)pCVar5 = iVar10 + iVar20; iVar20 = iVar20 + iVar7; pCVar5 = pCVar5 + 4; uVar17 = uVar17 + 1; uVar16 = *(uint *)pCVar4; } while (uVar17 < uVar16); iVar10 = *(int *)(this + 0x2fd0); } *(undefined4 *)(this + 0x30bc) = 0; iVar10 = iVar10 + uVar16 * iVar7; *(int *)(this + 0x3070) = iVar10; if (1 < uVar16 - 1) { local_88 = this + 0x2f28; pCVar5 = this + 0x30c0; iVar20 = 0; uVar17 = 1; do { iVar14 = *(int *)local_88; local_88 = local_88 + 4; iVar10 = iVar14 * 0x28 + iVar10; *(int *)(pCVar5 + -0x4c) = iVar10; iVar20 = iVar14 * 0x28 + iVar20; *(int *)pCVar5 = iVar20; pCVar5 = pCVar5 + 4; uVar17 = uVar17 + 1; uVar16 = *(uint *)pCVar4; } while (uVar17 < uVar16 - 1); } if (iVar6 < iVar1) { fseek(__stream,uVar16 * iVar7 + uVar15,1); iVar1 = length((__sFILE *)__stream); lVar11 = ftell(__stream); *(undefined4 *)(this + 0x312c) = 0; pCVar4 = this + 0x312c; local_88 = (CFunctions *)(iVar1 - lVar11); if (0x43 < (int)local_88) { while( true ) { local_84 = 0; fread(&local_84,4,1,__stream); if (local_84 != 0x6bb60001) break; iVar1 = *(int *)pCVar4; fread(this + iVar1 * 0x21c + 0x3130,1,0x20,__stream); this[iVar1 * 0x21c + 0x314e] = (CFunctions)0x0; this[iVar1 * 0x21c + 0x314f] = (CFunctions)0x0; fread(this + iVar1 * 0x21c + 0x3150,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3154,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3158,4,1,__stream); fread(this + iVar1 * 0x21c + 0x315c,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3160,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3168,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3164,4,1,__stream); pCVar5 = this + iVar1 * 0x21c + 0x316c; fread(pCVar5,4,1,__stream); if (0xf < *(uint *)(this + iVar1 * 0x21c + 0x3160)) break; __n = *(uint *)pCVar5 - 1; if (0x18 < __n) break; if ((int)local_88 < 0x21c) { iVar6 = 1; if (1 < *(uint *)pCVar5) { fread(this + iVar1 * 0x21c + 0x3170,4,__n,__stream); iVar6 = *(int *)pCVar5; } fread(this + iVar1 * 0x21c + 0x3204,4,iVar6 << 1,__stream); uVar18 = 0x3f800000; *(undefined4 *)(this + iVar1 * 0x21c + 0x3334) = 0x3f800000; local_88 = (CFunctions *)((int)local_88 + *(int *)pCVar5 * -0xc + -0x40); } else { fread(this + iVar1 * 0x21c + 0x3170,4,0x19,__stream); fread(this + iVar1 * 0x21c + 0x31d4,4,2,__stream); fread(this + iVar1 * 0x21c + 0x31dc,4,10,__stream); fread(this + iVar1 * 0x21c + 0x3204,4,0x32,__stream); fread(this + iVar1 * 0x21c + 0x32cc,4,0x1a,__stream); fread(this + iVar1 * 0x21c + 0x3334,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3338,4,2,__stream); fread(this + iVar1 * 0x21c + 0x3340,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3344,4,1,__stream); fread(this + iVar1 * 0x21c + 0x3348,4,1,__stream); local_88 = (CFunctions *)((int)local_88 + -0x220); uVar18 = *(undefined4 *)(this + iVar1 * 0x21c + 0x3334); } iVar6 = __aeabi_fcmple(uVar18); if ((iVar6 != 0) || (iVar6 = __aeabi_fcmpgt(uVar18,0x3f800000), iVar6 != 0)) { *(undefined4 *)(this + iVar1 * 0x21c + 0x3334) = 0x3f800000; } uVar18 = *(undefined4 *)(this + iVar1 * 0x21c + 0x3344); iVar6 = __aeabi_fcmplt(uVar18,0xbba3d70a); if ((iVar6 != 0) || (iVar6 = __aeabi_fcmpgt(uVar18,0x3ba3d70a), iVar6 != 0)) { *(undefined4 *)(this + iVar1 * 0x21c + 0x3344) = 0; } *(int *)pCVar4 = *(int *)pCVar4 + 1; *(undefined4 *)pCVar13 = 1; std::ostream::_M_put_nowiden((ostream *)std::cout,"Found Lens: "); std::ostream::_M_put_nowiden ((ostream *)std::cout,(char *)(this + iVar1 * 0x21c + 0x3130)); std::ostream::put((ostream *)std::cout,'\n'); std::ostream::flush((ostream *)std::cout); if (((int)local_88 < 0x44) || (2 < *(uint *)pCVar4)) break; } } } else if (uVar16 == 2) { local_88 = *(CFunctions **)(this + 0x2e3c); local_94 = *(int *)__ptr_00; if ((int)local_88 - local_94 == 50000) goto LAB_0002a320; } else if (uVar16 == 1) { local_88 = *(CFunctions **)(this + 0x2e3c); local_94 = *(int *)__ptr_00; LAB_0002a320: *(undefined4 *)(this + 0x2d20) = 1; __aeabi_memclr4(pCVar13,0x65c); *(undefined4 *)pCVar13 = 1; *(undefined4 *)(this + 0x312c) = 1; __aeabi_memcpy(this + 0x3130,"Default Lens",0xd); *(undefined4 *)(this + 0x3150) = 0x3e99999a; *(undefined4 *)(this + 0x3154) = 0x3f800000; *(undefined4 *)(this + 0x3158) = 0x40000000; *(undefined4 *)(this + 0x315c) = 0x3fc00000; iVar1 = (local_94 + (int)local_88) / 2; *(int *)(this + 0x3164) = iVar1; *(int *)(this + 0x3168) = iVar1 + -500; *(undefined4 *)(this + 0x316c) = 1; *(undefined4 *)(this + 0x3334) = 0x3f800000; *(undefined4 *)(this + 0x3204) = *(undefined4 *)(this + 0x50fc); *(undefined4 *)(this + 0x3208) = *(undefined4 *)(this + 0x5100); *(char **)(this + 0x333c) = "NKSt6localeeqERKS_"; *(undefined4 *)(this + 0x3338) = 0; } *(uint *)(this + 0x50fc) = local_24; *(undefined4 *)(this + 0x5100) = local_28; uVar15 = 0; do { if (1 << (uVar15 & 0xff) == local_24) { *(uint *)(this + 0x5104) = uVar15; break; } uVar15 = uVar15 + 1; } while (uVar15 < 0x20); *(undefined4 *)pCVar12 = 1; fclose(__stream); pthread_mutex_unlock(__mutex); local_98 = *(undefined4 *)pCVar12; goto LAB_00029c82; } std::ostream::_M_put_nowiden ((ostream *)std::cout,"The calibration table size mismatch FPA.\n"); fclose(__stream); pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_68,4); MStream::operator<<(pMVar2,"x5"); pLVar3 = aLStack_68; } else { std::ostream::_M_put_nowiden ((ostream *)std::cout,"The calibration table data is not correct.\n"); fclose(__stream); pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_5c,4); MStream::operator<<(pMVar2,"x4"); pLVar3 = aLStack_5c; } } } else { pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_40,4); MStream::operator<<(pMVar2,"x2"); pLVar3 = aLStack_40; } local_98 = 0; mag::Logging::~Logging(pLVar3); goto LAB_00029c82; } pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_34,4); MStream::operator<<(pMVar2,"x1"); pLVar3 = aLStack_34; LAB_00029b50: mag::Logging::~Logging(pLVar3); local_98 = 0; LAB_00029c82: if (__stack_chk_guard == local_18) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(local_98); code_r0x00029d32: uVar15 = uVar15 + 1; iVar6 = *(int *)pCVar21; pCVar21 = pCVar21 + 4; if (*(int *)pCVar21 <= iVar6) goto LAB_00029d3c; goto LAB_00029d24; LAB_00029d3c: std::ostream::_M_put_nowiden((ostream *)std::cout,"The calibration table data is not correct.\n"); fclose(__stream); pthread_mutex_unlock(__mutex); pMVar2 = (MStream *)mag::Logging::Logging(aLStack_74,4); MStream::operator<<(pMVar2,"x6"); pLVar3 = aLStack_74; goto LAB_00029b50; } ### FUNC ConvertmC2InnerTemp @ 0002a4e8 /* CFunctions::ConvertmC2InnerTemp(int) const */ uint __thiscall CFunctions::ConvertmC2InnerTemp(CFunctions *this,int param_1) { uint uVar1; uVar1 = param_1 - *(int *)(this + 0x5100) >> (*(uint *)(this + 0x5104) & 0xff); if ((int)uVar1 < 1) { uVar1 = 0; } if (0xfffe < (int)uVar1) { uVar1 = 0xffff; } return uVar1 & 0xffff; } ### FUNC FindMaxTemperature @ 0002a514 /* CFunctions::FindMaxTemperature() */ void __thiscall CFunctions::FindMaxTemperature(CFunctions *this) { ushort uVar1; ushort uVar2; int iVar3; ushort *puVar4; iVar3 = *(int *)(this + 0x50f0); puVar4 = *(ushort **)(this + 0xb4); uVar2 = *puVar4; if ((iVar3 != 0) && (iVar3 != 1)) { iVar3 = 1 - iVar3; do { puVar4 = puVar4 + 1; uVar1 = *puVar4; if (*puVar4 <= uVar2) { uVar1 = uVar2; } uVar2 = uVar1; iVar3 = iVar3 + 1; } while (iVar3 != 0); } *(uint *)(this + 0x3838) = (uint)uVar2; return; } ### FUNC CalContrastOffsetedAutoEnlargeRange @ 0002a560 /* CFunctions::CalContrastOffsetedAutoEnlargeRange() */ int __thiscall CFunctions::CalContrastOffsetedAutoEnlargeRange(CFunctions *this) { int iVar1; undefined4 uVar2; int iVar3; int iVar4; uint uVar5; undefined4 uVar6; iVar3 = *(int *)(this + 0x30); iVar1 = iVar3; if (99 < iVar3) { iVar1 = 100; } iVar4 = iVar3; if (iVar3 < -99) { iVar4 = -100; } if (iVar3 < 0) { iVar1 = iVar4; } uVar5 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff); if (0xfffe < uVar5) { uVar5 = 0xffff; } iVar1 = __divsi3(uVar5 * iVar1,(iVar3 >> 0x1f & 0xffffff9cU) + 0x96); iVar1 = uVar5 - iVar1; if (*(int *)(this + 0x2d1c) != 0) { uVar6 = *(undefined4 *)(this + 0x6c); iVar3 = __aeabi_fcmpgt(uVar6,0); if (iVar3 != 0) { if (*(int *)(this + 0x2e2c) == 2) { iVar3 = *(int *)(this + 0x2e38); iVar4 = *(int *)(this + 0x2e3c); if (iVar4 - iVar3 != 50000) goto LAB_0002a610; } else { if (*(int *)(this + 0x2e2c) != 1) goto LAB_0002a610; iVar3 = *(int *)(this + 0x2e38); iVar4 = *(int *)(this + 0x2e3c); } uVar2 = __floatsisf(iVar1 * (*(int *)(this + 0x38) - (iVar3 + iVar4) / 2)); uVar6 = __mulsf3(uVar6,uVar2); __divsf3(uVar6,0x447a0000); iVar3 = __fixsfsi(); iVar1 = iVar1 + iVar3; } } LAB_0002a610: if (iVar1 < 0x81) { iVar1 = 0x80; } return iVar1; } ### FUNC SubSectionEnlarge @ 0002a640 /* CFunctions::SubSectionEnlarge() */ void __thiscall CFunctions::SubSectionEnlarge(CFunctions *this) { int iVar1; int iVar2; int iVar3; uint uVar4; uint uVar5; uint uVar6; int iVar7; CFunctions CVar8; int iVar9; uint uVar10; bool bVar11; int local_30; int local_28; int local_1c; if ((*(uint *)(this + 0x18) < *(uint *)(this + 0x1c)) && (*(int *)(this + 0x10) < *(int *)(this + 0x14))) { iVar2 = SearchInnerTemp(this,*(int *)(this + 0x10)); iVar3 = SearchInnerTemp(this,*(int *)(this + 0x14)); iVar7 = iVar3; if (iVar3 <= *(int *)(this + 0x3838)) { iVar7 = *(int *)(this + 0x3838); } *(int *)(this + 0x3854) = iVar7; iVar9 = iVar2; if (*(int *)(this + 0x383c) <= iVar2) { iVar9 = *(int *)(this + 0x383c); } *(int *)(this + 0x3858) = iVar9; uVar10 = iVar7 - iVar9; uVar4 = (iVar2 - iVar9) * 0x3ff; uVar5 = __udivsi3(uVar4,uVar10); uVar6 = __udivsi3((iVar3 - iVar9) * 0x3ff,uVar10); iVar7 = *(int *)(this + 0x18); iVar2 = *(int *)(this + 0x1c); iVar3 = iVar2 * 4; iVar9 = 0; local_1c = 0; if (uVar10 <= uVar4) { local_1c = __udivsi3(iVar7 << 0x18,uVar5); } local_28 = 0; if (uVar5 < uVar6) { local_28 = __udivsi3((iVar3 + iVar7 * -4) * 0x400000,uVar6 - uVar5); } local_30 = 0; if (uVar6 < 0x3ff) { local_30 = __udivsi3((iVar2 * -4 + 0x3ff) * 0x400000,0x3ff - uVar6); } uVar4 = 0; do { if (uVar5 < uVar4) { uVar10 = uVar5; iVar2 = local_28; iVar1 = iVar7 * 4; if (uVar6 <= uVar4) { uVar10 = uVar6; iVar2 = local_30; iVar1 = iVar3; } CVar8 = SUB41(((uVar4 - uVar10) * iVar2 >> 0x16) + iVar1 >> 2,0); } else { CVar8 = SUB41((uint)iVar9 >> 0x18,0); } this[uVar4 + 0x4074] = CVar8; iVar9 = iVar9 + local_1c; bVar11 = uVar4 != 0x3ff; uVar4 = uVar4 + 1; } while (bVar11); } return; } ### FUNC SearchSeparateLine @ 0002a768 /* WARNING: Restarted to delay deadcode elimination for space: stack */ /* CFunctions::SearchSeparateLine() */ void __thiscall CFunctions::SearchSeparateLine(CFunctions *this) { int iVar1; int iVar2; undefined4 uVar3; undefined4 uVar4; undefined4 uVar5; undefined4 uVar6; int iVar7; undefined4 uVar8; int iVar9; ushort *puVar10; uint uVar11; int *piVar12; uint uVar13; uint uVar14; uint uVar15; ushort *puVar16; uint uVar17; bool bVar18; int local_2030; uint local_202c; int *local_2028; int aiStack_2018 [1024]; int local_1018 [1025]; iVar1 = __stack_chk_guard; uVar15 = *(uint *)(this + 0x37f0); uVar17 = 0; uVar13 = 0; uVar14 = uVar13; if (uVar15 != 0) { puVar16 = *(ushort **)(this + 0xb4); uVar13 = *(uint *)(this + 0x37ec); uVar14 = 0; local_2030 = 0; do { iVar2 = local_2030; if (uVar13 >> 2 != 0) { iVar2 = 0; iVar9 = -(uVar13 >> 2); puVar10 = puVar16; do { iVar2 = iVar2 + (uint)*puVar10 + (uint)puVar10[1] + (uint)puVar10[2] + (uint)puVar10[3]; puVar10 = puVar10 + 4; iVar9 = iVar9 + 1; } while (iVar9 != 0); puVar16 = puVar16 + (uVar13 & 0xfffffffc); } iVar2 = __udivsi3(iVar2,uVar13); local_1018[uVar14] = iVar2; uVar14 = uVar14 + 1; } while (uVar14 < uVar15); uVar17 = uVar15 * 7 >> 3; uVar13 = 0; for (uVar11 = uVar15 >> 2; uVar14 = uVar13, uVar11 != 0; uVar11 = uVar11 - 1) { uVar13 = uVar15 >> 2; } } for (; uVar13 < uVar15; uVar13 = uVar13 + 1) { } if (uVar17 < uVar14) { LAB_0002aa1c: *(uint *)(this + 0x4478) = uVar15 - 1; } else { local_2028 = aiStack_2018 + uVar14; uVar13 = uVar15 - 1; local_202c = uVar13 - uVar14; uVar8 = __floatunsisf(uVar15); iVar2 = 0; do { uVar3 = __floatunsisf(uVar14 + iVar2 + 1); uVar4 = __divsf3(uVar3,uVar8); uVar5 = __floatunsisf(); uVar3 = __divsf3(uVar5,uVar3); uVar5 = __floatunsisf(); uVar6 = __floatunsisf(local_202c); uVar5 = __divsf3(uVar5,uVar6); uVar6 = __subsf3(0x3f800000,uVar4); uVar4 = __mulsf3(uVar4,uVar6); uVar3 = __subsf3(uVar3,uVar5); uVar4 = __mulsf3(uVar4,uVar3); iVar9 = __mulsf3(uVar3,uVar4); *local_2028 = iVar9; local_2028 = local_2028 + 1; iVar2 = iVar2 + 1; local_202c = local_202c + -1; } while (uVar14 + ~uVar17 + iVar2 != 0); if (uVar17 < uVar14) goto LAB_0002aa1c; local_202c = uVar14; if (uVar14 != uVar17) { iVar2 = aiStack_2018[uVar14]; iVar9 = __unordsf2(iVar2,iVar2); bVar18 = iVar9 != 0; piVar12 = local_1018 + (uVar14 - 0x3ff); uVar11 = uVar14; local_2028 = (int *)iVar2; do { if (!bVar18) { local_2028 = (int *)iVar2; } iVar2 = *piVar12; piVar12 = piVar12 + 1; iVar9 = __aeabi_fcmple(local_2028,iVar2); iVar7 = __aeabi_fcmple(local_2028,iVar2); uVar11 = uVar11 + 1; if (iVar7 != 0) { local_202c = uVar11; } bVar18 = iVar9 == 0; } while (uVar17 != uVar11); } if ((local_202c == uVar14) || (local_202c == uVar17)) goto LAB_0002aa1c; uVar17 = 0; iVar2 = 0; do { iVar2 = local_1018[uVar17] + iVar2; uVar17 = uVar17 + 1; } while (uVar17 <= local_202c); uVar17 = local_202c + 1; iVar9 = 0; if (uVar17 < uVar15) { iVar9 = 0; do { iVar9 = local_1018[uVar17] + iVar9; uVar17 = uVar17 + 1; } while (uVar17 < uVar15); } iVar2 = __udivsi3(iVar2); iVar9 = __udivsi3(iVar9,uVar15 + (local_202c ^ 0xffffffff)); uVar17 = iVar2 - iVar9 >> 0x1f; if ((iVar9 <= iVar2) && (iVar9 + iVar2 <= (int)(((iVar2 - iVar9) + uVar17 ^ uVar17) * 0x80))) { *(int *)(this + 0x4480) = local_1018[local_202c]; uVar17 = *(uint *)(this + 0x4478); if ((uVar14 < uVar17) && (uVar17 <= uVar13)) { uVar15 = uVar15 >> 7; if (uVar15 < 2) { uVar15 = 1; } uVar13 = uVar15 + uVar17; if (local_202c <= uVar15 + uVar17) { uVar13 = local_202c; } local_202c = uVar17 - uVar15; if (uVar17 - uVar15 <= uVar13) { local_202c = uVar13; } } uVar13 = 0; iVar2 = 0; do { iVar2 = local_1018[uVar13] + iVar2; uVar13 = uVar13 + 1; } while (uVar13 <= local_202c); *(uint *)(this + 0x4478) = local_202c; uVar8 = __udivsi3(iVar2,local_202c + 1); goto LAB_0002aa34; } *(uint *)(this + 0x4478) = uVar13; } *(undefined4 *)(this + 0x4480) = 0; uVar8 = *(undefined4 *)(this + 0x3840); LAB_0002aa34: *(undefined4 *)(this + 0x447c) = uVar8; if (__stack_chk_guard == iVar1) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC HistDeRedundance @ 0002aaa0 /* WARNING: Restarted to delay deadcode elimination for space: stack */ /* CFunctions::HistDeRedundance() */ void __thiscall CFunctions::HistDeRedundance(CFunctions *this) { int iVar1; CFunctions *pCVar2; int iVar3; int iVar4; CFunctions *pCVar5; int iVar6; ushort *puVar7; uint *puVar8; uint uVar9; int iVar10; uint uVar11; int iVar12; int iVar13; uint uVar14; uint uVar15; uint uVar16; uint uVar17; bool bVar18; uint local_1034; uint local_1024; uint local_1018 [1025]; iVar1 = __stack_chk_guard; uVar15 = *(uint *)(this + 0x50f0); pCVar2 = this + 0xcc; iVar6 = *(int *)(this + 0x5c); if ((iVar6 != 0) && (*(int *)(this + 0xc) == 0)) { uVar15 = *(int *)(this + 0x37ec) * (*(int *)(this + 0x4478) + 1); } iVar3 = *(int *)(this + 0x3854); iVar13 = *(int *)(this + 0x3858); __aeabi_memclr4(pCVar2,0x1000); iVar4 = __udivsi3(0xffc00000); local_1024 = uVar15 >> 0xc; if (local_1024 < 2) { local_1024 = 1; } if (uVar15 != 0) { puVar7 = *(ushort **)(this + 0xb4); do { uVar11 = iVar4 * ((uint)*puVar7 - iVar13) >> 0x14 & 0xffc; *(int *)(this + uVar11 + 0xcc) = *(int *)(this + uVar11 + 0xcc) + 1; uVar15 = uVar15 - 1; puVar7 = puVar7 + 1; } while (uVar15 != 0); } if (((iVar6 != 0) && (*(int *)(this + 0xc) == 0)) && (*(uint *)(this + 0x4478) < *(int *)(this + 0x37f0) - 1U)) { iVar12 = *(int *)(this + 0x447c) * 0x1f; iVar10 = *(int *)(this + 0x4480); iVar4 = iVar12 + iVar10 * -0x20; if (iVar4 == 0 || iVar4 < 0 != SBORROW4(iVar12,iVar10 * 0x20)) { iVar3 = *(int *)(this + 0x447c) * 0x21; if (iVar3 + iVar10 * -0x20 < 0 == SBORROW4(iVar3,iVar10 * 0x20)) goto LAB_0002abbe; iVar3 = 0x1000; } else { uVar15 = (iVar10 - iVar13) * 0x3ff; uVar11 = __udivsi3(uVar15,iVar3 - iVar13); if (uVar15 < (uint)(iVar3 - iVar13)) goto LAB_0002abbe; if (uVar11 < 2) { uVar11 = 1; } iVar3 = uVar11 << 2; } __aeabi_memclr4(pCVar2,iVar3); } LAB_0002abbe: pCVar5 = this + 0x447c; if (iVar6 == 0) { pCVar5 = this + 0x3840; } iVar6 = *(int *)(this + 0x3858); uVar14 = (*(int *)pCVar5 - iVar6) * 0x3ff; uVar16 = *(int *)(this + 0x3854) - iVar6; uVar11 = __udivsi3(uVar14,uVar16); uVar15 = uVar11; if (*(int *)(this + 0x60) != 0) { iVar6 = 0; iVar3 = 0; if (uVar16 <= uVar14) { uVar14 = 0; iVar3 = 0; iVar6 = 0; do { iVar3 = *(int *)(pCVar2 + uVar14 * 4) + iVar3; iVar6 = uVar14 * *(int *)(pCVar2 + uVar14 * 4) + iVar6; uVar14 = uVar14 + 1; } while (uVar14 < uVar11); } if ((int)(uVar11 + 1) < 0x400) { iVar10 = 0; iVar13 = 0; iVar4 = uVar11 + 1; do { iVar10 = *(int *)(this + iVar4 * 4 + 0xcc) + iVar10; iVar13 = iVar4 * *(int *)(this + iVar4 * 4 + 0xcc) + iVar13; bVar18 = iVar4 != 0x3ff; iVar4 = iVar4 + 1; } while (bVar18); if ((iVar3 != 0) && (iVar10 != 0)) { iVar6 = __udivsi3(iVar6); iVar3 = __udivsi3(iVar13,iVar10); uVar15 = (uint)(iVar3 + iVar6) >> 1; if (uVar15 <= uVar11) { uVar15 = uVar11; } } } } iVar6 = *(int *)(this + 0x2c); if (99 < iVar6) { iVar6 = 100; } if (iVar6 < -99) { iVar6 = -100; } iVar4 = 0; iVar3 = *(int *)pCVar2; do { iVar13 = iVar4 * -4; *(uint *)(this + iVar4 * -4 + 0xcc) = (uint)(*(int *)(this + iVar13 + 0xd0) + iVar3) >> 1; iVar4 = iVar4 + -1; iVar3 = *(int *)(this + iVar13 + 0xd0); } while (iVar4 != -0x3ff); *(undefined4 *)(this + 0x10c8) = *(undefined4 *)(this + 0x10c4); iVar6 = __divsi3(iVar6 * 0x1bf); local_1034 = 1; iVar3 = __udivsi3(0x10000,local_1024); if (-1 < (int)uVar15) { iVar4 = 0; uVar14 = 0; uVar11 = uVar15; do { uVar16 = *(int *)(this + uVar11 * 4 + 0xcc) + uVar14; uVar14 = uVar16; if (local_1024 <= uVar16) { uVar14 = 0; } iVar4 = iVar4 + (uVar16 < local_1024 ^ 1); *(uint *)(this + uVar11 * 4 + 0x10cc) = iVar4 * 0x100 + (uVar14 * iVar3 >> 8); bVar18 = 0 < (int)uVar11; uVar11 = uVar11 - 1; } while (bVar18); } iVar4 = 0x400; if ((int)(uVar15 + 1) < 0x400) { uVar14 = 0; iVar13 = 0; uVar11 = uVar15; do { uVar14 = *(int *)(this + uVar11 * 4 + 0xd0) + uVar14; if (uVar14 < local_1024 << 3) { iVar13 = iVar13 + (uVar14 < local_1024 ^ 1); if (local_1024 <= uVar14) { uVar14 = 0; } } else { iVar13 = iVar13 + 2; uVar14 = 0; } *(uint *)(this + uVar11 * 4 + 0x10d0) = (uVar14 * iVar3 >> 8) + iVar13 * 0x100; uVar11 = uVar11 + 1; } while ((int)uVar11 < 0x3ff); } uVar14 = CalContrastOffsetedAutoEnlargeRange(this); uVar16 = (*(int *)(this + 0x3854) - *(int *)(this + 0x3858)) * 0x10; uVar11 = __udivsi3(uVar16,uVar14); if (0x1ff < uVar11) { uVar11 = 0x200; } if (uVar14 <= uVar16) { local_1034 = uVar11; } puVar8 = local_1018; uVar11 = local_1034 * 0x1800; do { uVar14 = uVar11 >> 0xd; if (uVar14 == 0) { uVar14 = 1; } *puVar8 = uVar14; puVar8 = puVar8 + 1; iVar4 = iVar4 + -1; uVar11 = uVar11 + local_1034 * 4; } while (iVar4 != 0); if (*(int *)(this + 0x10cc) != 0) { iVar3 = __udivsi3((iVar6 + 0x1c0) * 0x40000); uVar16 = (iVar6 + 0x1c0) * 0x10; uVar11 = uVar15; uVar14 = uVar16; if (-1 < (int)uVar15) { do { uVar9 = uVar16 - ((uint)(iVar3 * *(int *)(this + uVar11 * 4 + 0x10cc)) >> 0xe); uVar17 = uVar14 - local_1018[uVar11]; if (uVar14 - uVar9 <= local_1018[uVar11]) { uVar17 = uVar9; } this[uVar11 + 0x4074] = SUB41(uVar17 >> 6,0); bVar18 = 0 < (int)uVar11; uVar11 = uVar11 - 1; uVar14 = uVar17; } while (bVar18); } } if (*(int *)(this + 0x20c8) != 0) { iVar3 = __udivsi3((0x240 - iVar6) * 0x40000); uVar14 = iVar6 * 0x10 + 0x1bf0; uVar11 = uVar14; if ((int)(uVar15 + 1) < 0x400) { do { uVar17 = ((uint)(iVar3 * *(int *)(this + uVar15 * 4 + 0x10d0)) >> 0xe) + uVar14; uVar16 = local_1018[uVar15 + 1] + uVar11; if (uVar17 - uVar11 <= local_1018[uVar15 + 1]) { uVar16 = uVar17; } this[uVar15 + 0x4075] = SUB41(uVar16 >> 6,0); uVar15 = uVar15 + 1; uVar11 = uVar16; } while ((int)uVar15 < 0x3ff); } } if (__stack_chk_guard != iVar1) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return; } ### FUNC IsothermalPalette @ 0002af54 /* CFunctions::IsothermalPalette() */ void __thiscall CFunctions::IsothermalPalette(CFunctions *this) { uint uVar1; uint uVar2; uint uVar3; int iVar4; CFunctions *pCVar5; uint uVar6; uint uVar7; uVar1 = *(uint *)(this + 0x3858); uVar6 = *(uint *)(this + 0x3854); uVar2 = SearchInnerTemp(this,*(int *)(this + 0x14)); uVar3 = SearchInnerTemp(this,*(int *)(this + 0x10)); uVar7 = 0x100; if ((uVar2 <= uVar6) && (uVar7 = 0xffffffff, uVar1 <= uVar2)) { iVar4 = __udivsi3((uVar2 - uVar1) * 0x3ff,uVar6 - uVar1); uVar7 = (uint)(byte)this[iVar4 + 0x4074]; } uVar2 = 0x100; if ((uVar3 <= uVar6) && (uVar2 = 0xffffffff, uVar1 <= uVar3)) { iVar4 = __udivsi3((uVar3 - uVar1) * 0x3ff,uVar6 - uVar1); uVar2 = (uint)(byte)this[iVar4 + 0x4074]; } __aeabi_memcpy(this + 0x24f4,this + 0x20cc); if (0xfe < (int)uVar7) { uVar7 = 0xff; } if ((int)uVar2 < 1) { uVar2 = 0; } if ((int)uVar2 <= (int)uVar7) { pCVar5 = this + uVar2 * 4 + 0x24f7; iVar4 = uVar2 - 1; do { pCVar5[-3] = (CFunctions)0x0; pCVar5[-2] = (CFunctions)0xff; pCVar5[-1] = (CFunctions)0x0; *pCVar5 = (CFunctions)0x0; pCVar5 = pCVar5 + 4; iVar4 = iVar4 + 1; } while (iVar4 < (int)uVar7); } __aeabi_memcpy(this + 0x291c,this + 0x24f4,0x400); return; } ### FUNC DynamicRedPalette @ 0002b060 /* CFunctions::DynamicRedPalette() */ void __thiscall CFunctions::DynamicRedPalette(CFunctions *this) { bool bVar1; CFunctions CVar2; char cVar3; undefined4 uVar4; uint uVar5; int iVar6; uint uVar7; uint uVar8; int iVar9; uint uVar10; CFunctions *pCVar11; int iVar12; uint local_38; uVar10 = *(uint *)(this + 0x50f0); uVar4 = __floatunsisf(uVar10); __mulsf3(uVar4,0x3cf5c28f); uVar5 = __fixsfsi(); uVar8 = 0; iVar6 = 0x432; do { uVar8 = *(int *)(this + iVar6 * 4) + uVar8; iVar9 = iVar6; if (uVar10 >> 4 <= uVar8) break; iVar9 = iVar6 + -1; iVar12 = iVar6 + -0x33; iVar6 = iVar9; } while (1 < iVar12); iVar6 = __udivsi3((1000U >> (*(uint *)(this + 0x5104) & 0xff) & 0xffff) * 0x3ff, *(int *)(this + 0x3854) - *(int *)(this + 0x3858)); iVar6 = iVar6 + iVar9 + -0x33; uVar8 = 0; iVar9 = 0x432; do { uVar8 = *(int *)(this + iVar9 * 4) + uVar8; uVar10 = 0x100; if (uVar5 <= uVar8) { if (iVar6 <= iVar9 + -0x33) { iVar6 = iVar9 + -0x33; } break; } iVar12 = iVar9 + -0x33; iVar9 = iVar9 + -1; } while (1 < iVar12); if (iVar6 < 0x400) { uVar10 = (uint)(byte)this[iVar6 + 0x4074]; uVar7 = 0x100 - uVar10; local_38 = uVar7 >> 1; uVar8 = local_38 + uVar10; uVar5 = 0; if (uVar10 == 0) goto LAB_0002b148; } else { uVar7 = 0; local_38 = 0; uVar8 = uVar10; } iVar6 = 0; do { iVar9 = iVar6 * 4; CVar2 = SUB41(iVar6,0); this[iVar9 + 0x24f4] = CVar2; this[iVar9 + 0x24f5] = CVar2; this[iVar9 + 0x24f6] = CVar2; this[iVar9 + 0x24f7] = (CFunctions)0x0; iVar6 = iVar6 + 1; uVar5 = uVar10; } while (iVar6 < (int)uVar10); LAB_0002b148: pCVar11 = this + 0x24f4; CVar2 = SUB41(uVar5,0); if (1 < (int)uVar7) { iVar6 = 0; uVar10 = uVar5; do { cVar3 = __divsi3(iVar6,local_38); iVar9 = uVar10 * 4; pCVar11[iVar9] = (CFunctions)(cVar3 + (char)CVar2); pCVar11[iVar9 + 1] = CVar2; pCVar11[iVar9 + 2] = CVar2; pCVar11[iVar9 + 3] = (CFunctions)0x0; iVar6 = iVar6 + (0xff - uVar5); uVar10 = uVar10 + 1; } while ((int)uVar10 < (int)uVar8); } if ((int)uVar8 < 0x100) { iVar6 = 0; uVar10 = uVar8; do { iVar9 = uVar10 * 4; pCVar11[iVar9] = (CFunctions)0xff; cVar3 = __divsi3(iVar6,0x100 - uVar8); pCVar11[iVar9 + 1] = (CFunctions)(cVar3 + (char)CVar2); pCVar11[iVar9 + 2] = (CFunctions)(cVar3 + (char)CVar2); pCVar11[iVar9 + 3] = (CFunctions)0x0; iVar6 = iVar6 - uVar5; bVar1 = (int)uVar10 < 0xff; uVar10 = uVar10 + 1; } while (bVar1); } __aeabi_memcpy(this + 0x291c,pCVar11,0x400); return; } ### FUNC MapTemperature @ 0002b204 /* CFunctions::MapTemperature(int) */ void CFunctions::MapTemperature(int param_1) { int iVar1; int iVar2; int iVar3; int iVar4; uint uVar5; uint uVar6; int iVar7; undefined1 *puVar8; ushort *puVar9; int local_24; puVar9 = *(ushort **)(param_1 + 0xb4); puVar8 = *(undefined1 **)(param_1 + 0xc0); iVar1 = *(int *)(param_1 + 0x3858); iVar2 = *(int *)(param_1 + 0x3854); __aeabi_memclr4(param_1 + 0x3874,0x400); iVar3 = __udivsi3(0xffc00000,iVar2 - iVar1); for (iVar2 = *(int *)(param_1 + 0x50f0); iVar2 != 0; iVar2 = iVar2 + -1) { uVar6 = iVar3 * ((uint)*puVar9 - iVar1) >> 0x16; *puVar8 = *(undefined1 *)(param_1 + 0x3820 + uVar6 + 0x854); iVar4 = param_1 + 0x3820 + (uVar6 & 0x3fc); *(int *)(iVar4 + 0x54) = *(int *)(iVar4 + 0x54) + 1; puVar8 = puVar8 + 1; puVar9 = puVar9 + 1; } *(undefined4 *)(param_1 + 0x3864) = 1; iVar1 = *(int *)(param_1 + 200); iVar2 = *(int *)(param_1 + 0x37fc); if (*(int *)(param_1 + 100) == 0) { iVar4 = *(uint *)(param_1 + 0x3800) - 1; iVar3 = 0; if (1 < *(uint *)(param_1 + 0x3800)) { iVar3 = __udivsi3(0xff0000,iVar4); } if (-1 < iVar4) { uVar6 = iVar3 * iVar4; iVar1 = iVar1 + iVar2 * iVar4; do { __aeabi_memset(iVar1,iVar2,uVar6 >> 0x10 & 0xff); iVar1 = iVar1 - iVar2; uVar6 = uVar6 - iVar3; iVar4 = iVar4 + -1; } while (-1 < iVar4); } } else { iVar3 = *(int *)(param_1 + 0x3858); local_24 = 0; if ((*(int *)(param_1 + 0x383c) != iVar3) && (iVar4 = *(int *)(param_1 + 0x3854), iVar4 != iVar3)) { local_24 = __divsi3((*(int *)(param_1 + 0x383c) - iVar3) * 0x3ff,iVar4 - iVar3); } iVar4 = 0x3ff; if (*(int *)(param_1 + 0x3838) != iVar3) { iVar7 = *(int *)(param_1 + 0x3854); iVar4 = 0x3ff; if (iVar7 != iVar3) { iVar4 = __divsi3((*(int *)(param_1 + 0x3838) - iVar3) * 0x3ff,iVar7 - iVar3); } } uVar6 = *(uint *)(param_1 + 0x3800); if (uVar6 < 2) { iVar3 = 0; } else { iVar3 = __udivsi3((iVar4 - local_24) * 0x10000,uVar6 - 1); } iVar4 = uVar6 - 1; if (-1 < iVar4) { uVar6 = iVar4 * iVar3; iVar1 = iVar1 + iVar4 * iVar2; do { uVar5 = (uVar6 >> 0x10) + local_24; if (0x3fe < uVar5) { uVar5 = 0x3ff; } __aeabi_memset(iVar1,iVar2,*(undefined1 *)(param_1 + uVar5 + 0x4074)); iVar1 = iVar1 - iVar2; uVar6 = uVar6 - iVar3; iVar4 = iVar4 + -1; } while (-1 < iVar4); } } return; } ### FUNC SearchInnerTemp @ 0002b3e0 /* CFunctions::SearchInnerTemp(int) */ uint __thiscall CFunctions::SearchInnerTemp(CFunctions *this,int param_1) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; uint uVar6; float extraout_s0; uint local_18; uVar3 = *(uint *)(this + 0x50f0); uVar4 = *(uint *)(this + 0x37ec); uVar5 = 0xffff; local_18 = 0; uVar6 = 0x7fff; do { uVar2 = ReviseTemperature(this,(ushort)uVar6,(uVar4 >> 1) + (uVar3 >> 1)); if ((*(int *)(this + 0x4c) != 0) || (*(int *)(this + 0x50) != 0)) { uVar2 = CorrectTemperature((int)this,extraout_s0,uVar2); } uVar1 = uVar6; if ((int)uVar2 <= param_1) { uVar1 = uVar5; local_18 = uVar6; } uVar5 = uVar1; uVar6 = local_18 + uVar5 >> 1; } while (local_18 + 1 < uVar5); return uVar6; } ### FUNC GetOriginalBMPDataPointer @ 0002b46c /* CFunctions::GetOriginalBMPDataPointer() */ undefined4 __thiscall CFunctions::GetOriginalBMPDataPointer(CFunctions *this) { undefined4 uVar1; uVar1 = 0; if ((*(int *)(this + 0xa4) != 0) && (*(int *)(this + 0xac) != 0)) { if (*(int *)(this + 0x3864) == 0) { MapTemperature((int)this); } uVar1 = *(undefined4 *)(this + 0xc0); } return uVar1; } ### FUNC SaveBMP @ 0002b49c /* CFunctions::SaveBMP(CacheData, char const*) */ undefined4 __thiscall CFunctions::SaveBMP(CFunctions *this,int param_2,char *param_3) { undefined4 *puVar1; uint uVar2; int iVar3; void *pvVar4; char *pcVar5; pthread_mutex_t *__mutex; undefined4 uVar6; ushort local_44; ushort local_42; ushort local_3e; ushort local_3c; ushort local_3a; ushort local_38; undefined2 local_34; undefined2 local_32; undefined2 local_2e; undefined2 local_2c; undefined2 local_2a; undefined2 local_28; MStream aMStack_24 [12]; int local_18; local_18 = __stack_chk_guard; MStream::MStream(aMStack_24,0x100); __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); if ((*(int *)(this + 0xa4) == 0) || (*(int *)(this + 0xac) == 0)) { pthread_mutex_unlock(__mutex); uVar6 = 0xe4ae0006; LAB_0002b4f8: puVar1 = (undefined4 *)__errno(); *puVar1 = uVar6; } else { if (param_2 == 0) { uVar2 = *(uint *)(this + 0x50f0); iVar3 = GetOriginalBMPDataPointer(this); if (iVar3 != 0) { pvVar4 = operator_new__(uVar2); __aeabi_memcpy(pvVar4,iVar3,uVar2); pthread_mutex_unlock(__mutex); if (param_3 == (char *)0x0) { GetLocalTime((_SYSTEMTIME *)&local_44); MStream::Fmt((char *)aMStack_24,"%d-%d-%d %d-%d-%d.bmp",(uint)local_44,(uint)local_42, (uint)local_3e,(uint)local_3c,(uint)local_3a,(uint)local_38); } else { MStream::operator<<(aMStack_24,param_3); } local_28 = 0; local_34 = 0x4d42; local_2e = 0; local_2c = 0; local_2a = 0x436; local_32 = (undefined2)(uVar2 + 0x436); *(short *)(((uint)&local_34 | 2) + 2) = (short)(uVar2 + 0x436 >> 0x10); pcVar5 = (char *)MStream::Get(aMStack_24); OFStream::OFStream((OFStream *)&local_44,pcVar5,false); OFStream::Write((OFStream *)&local_44,&local_34,0xe,1); OFStream::Write((OFStream *)&local_44,this + 0x24cc,0x428,1); uVar6 = 1; OFStream::Write((OFStream *)&local_44,pvVar4,uVar2,1); IFStream::~IFStream((IFStream *)&local_44); operator_delete__(pvVar4); goto LAB_0002b500; } pthread_mutex_unlock(__mutex); uVar6 = 0xe4ae0003; goto LAB_0002b4f8; } pthread_mutex_unlock(__mutex); puVar1 = (undefined4 *)__errno(); *puVar1 = 0xe4ae0001; } uVar6 = 0; LAB_0002b500: MStream::~MStream(aMStack_24); if (__stack_chk_guard == local_18) { return uVar6; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC SaveRaw @ 0002b668 /* CFunctions::SaveRaw(CacheData, char const*) */ undefined4 __thiscall CFunctions::SaveRaw(CFunctions *this,int param_2,char *param_3) { uint uVar1; void *pvVar2; undefined4 *puVar3; char *pcVar4; int iVar5; undefined4 uVar6; pthread_mutex_t *__mutex; undefined4 local_4c; ushort local_48; ushort local_46; ushort local_42; ushort local_40; ushort local_3e; ushort local_3c; undefined4 local_38; undefined4 local_34; undefined4 local_2c; undefined4 local_28; MStream aMStack_24 [12]; int local_18; local_18 = __stack_chk_guard; MStream::MStream(aMStack_24,0x100); local_34 = 0; local_4c = 0; local_38 = 0; __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); if ((*(int *)(this + 0xa4) == 0) || (*(int *)(this + 0xac) == 0)) { pthread_mutex_unlock(__mutex); uVar6 = 0xe4ae0006; } else { if (param_2 != 4) { pthread_mutex_unlock(__mutex); puVar3 = (undefined4 *)__errno(); *puVar3 = 0xe4ae0001; goto LAB_0002b7b2; } local_28 = *(undefined4 *)(this + 0x37ec); local_2c = *(undefined4 *)(this + 0x37f0); local_34 = *(undefined4 *)(this + 0x40); local_38 = *(undefined4 *)(this + 0x44); iVar5 = *(int *)(this + 0xb4); uVar1 = *(int *)(this + 0x50f0) << 1; if (iVar5 != 0) { pvVar2 = operator_new__(uVar1); __aeabi_memcpy(pvVar2,iVar5,uVar1); pthread_mutex_unlock(__mutex); if (param_3 == (char *)0x0) { GetLocalTime((_SYSTEMTIME *)&local_48); MStream::Fmt((char *)aMStack_24,"%d-%02d-%02d %02d-%02d-%02d.raw",(uint)local_48, (uint)local_46,(uint)local_42,(uint)local_40,(uint)local_3e,(uint)local_3c); } else { MStream::operator<<(aMStack_24,param_3); } pcVar4 = (char *)MStream::Get(aMStack_24); OFStream::OFStream((OFStream *)&local_48,pcVar4,false); OFStream::Write((OFStream *)&local_48,&local_28,4,1); OFStream::Write((OFStream *)&local_48,&local_2c,4,1); OFStream::Write((OFStream *)&local_48,&local_38,4,1); OFStream::Write((OFStream *)&local_48,(void *)((uint)&local_38 | 4),4,1); OFStream::Write((OFStream *)&local_48,pvVar2,uVar1,1); IFStream::~IFStream((IFStream *)&local_48); operator_delete__(pvVar2); local_4c = 1; goto LAB_0002b7b2; } pthread_mutex_unlock(__mutex); uVar6 = 0xe4ae0003; } puVar3 = (undefined4 *)__errno(); *puVar3 = uVar6; LAB_0002b7b2: MStream::~MStream(aMStack_24); if (__stack_chk_guard == local_18) { return local_4c; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC GetRectTemperatureInfo @ 0002b848 /* CFunctions::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*, int) */ undefined4 __thiscall CFunctions::GetRectTemperatureInfo (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5, int param_6) { uint uVar1; ushort uVar2; undefined4 *puVar3; ushort *puVar4; int iVar5; uint uVar6; uint uVar7; uint uVar8; uint uVar9; undefined4 uVar10; uint uVar11; uint uVar12; bool bVar13; float extraout_s0; float extraout_s0_00; float extraout_s0_01; undefined8 uVar14; int local_30; uint local_2c; uint local_28; int local_24; uint local_20; uint local_1c; uint local_18; if (param_6 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if (((((param_3 < param_1) || (*(int *)(this + 0xac) == 0)) || (param_4 < param_2)) || ((uVar7 = *(uint *)(this + 0x37ec), uVar7 <= param_3 || (param_5 == (int *)0x0)))) || (*(uint *)(this + 0x37f0) <= param_4)) { uVar10 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar10 = 0xe4ae0001; } puVar3 = (undefined4 *)__errno(); *puVar3 = uVar10; local_2c = 0; if (param_6 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } } else { if (((param_2 == 0 && param_1 == 0) && (uVar7 - 1 == param_3)) && (*(uint *)(this + 0x37f0) - 1 == param_4)) { uVar14 = __muldi3(*(undefined4 *)(this + 0x50f0),0,*(int *)(this + 0x3840), *(int *)(this + 0x3840) >> 0x1f); local_18 = *(uint *)(this + 0x3848); local_1c = *(uint *)(this + 0x384c); uVar2 = (ushort)*(undefined4 *)(this + 0x3838); uVar8 = *(uint *)(this + 0x383c); } else { local_30 = uVar7 * param_2; uVar9 = 0; uVar8 = 0xffffffff; local_24 = 0; local_28 = 0; local_2c = 0; local_20 = 0; uVar6 = param_2; do { puVar4 = (ushort *)(*(int *)(this + 0xb4) + uVar7 * uVar6 * 2 + param_1 * 2); uVar11 = param_1; do { local_18 = local_30 + uVar11; uVar12 = (uint)*puVar4; local_1c = local_18; if (uVar8 <= uVar12) { local_1c = local_2c; } if (uVar12 <= uVar9) { local_18 = local_28; } bVar13 = CARRY4(local_20,uVar12); local_20 = local_20 + uVar12; local_24 = local_24 + (uint)bVar13; uVar14 = CONCAT44(local_24,local_20); uVar1 = uVar12; if (uVar8 <= uVar12) { uVar1 = uVar8; } uVar8 = uVar1; if (uVar12 <= uVar9) { uVar12 = uVar9; } uVar9 = uVar12; uVar2 = (ushort)uVar9; uVar11 = uVar11 + 1; puVar4 = puVar4 + 1; local_28 = local_18; local_2c = local_1c; } while (uVar11 <= param_3); local_30 = local_30 + uVar7; uVar6 = uVar6 + 1; } while (uVar6 <= param_4); } local_24 = (int)((ulonglong)uVar14 >> 0x20); local_20 = (uint)uVar14; iVar5 = ReviseTemperature(this,(ushort)uVar8,local_1c); *param_5 = iVar5; iVar5 = ReviseTemperature(this,uVar2,local_18); param_5[1] = iVar5; local_2c = 1; uVar2 = __aeabi_ldivmod(local_20,local_24,((1 - param_1) + param_3) * ((1 - param_2) + param_4), 0); iVar5 = ReviseTemperature(this,uVar2, (uVar7 * (param_4 + param_2) >> 1) + (param_3 + param_1 >> 1)); param_5[2] = iVar5; param_5[3] = local_1c; param_5[4] = local_18; if (*(int *)(this + 0x50) != 0) { iVar5 = CorrectTemperature((int)this,extraout_s0,*param_5); *param_5 = iVar5; iVar5 = CorrectTemperature((int)this,extraout_s0_00,param_5[1]); param_5[1] = iVar5; iVar5 = CorrectTemperature((int)this,extraout_s0_01,param_5[2]); param_5[2] = iVar5; } if (param_6 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } } return local_2c; } ### FUNC GetEllipseTemperatureInfo @ 0002ba84 /* CFunctions::GetEllipseTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*, int) */ undefined4 __thiscall CFunctions::GetEllipseTemperatureInfo (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5, int param_6) { ushort uVar1; undefined4 uVar2; undefined4 uVar3; int iVar4; int iVar5; undefined4 *puVar6; int iVar7; int iVar8; int iVar9; uint uVar10; uint uVar11; int iVar12; CFunctions *pCVar13; int iVar14; uint uVar15; uint uVar16; uint uVar17; uint uVar18; uint uVar19; uint uVar20; bool bVar21; float __x; float __x_00; float __x_01; float __x_02; float __x_03; float __x_04; float __x_05; float __x_06; float extraout_s0; float extraout_s0_00; float extraout_s0_01; int local_78; uint local_60; uint local_5c; uint local_58; uint local_4c; uint local_44; int local_40; ushort *local_3c; uint local_34; ushort *local_2c; uint local_28; int local_24; uint local_20; uint local_1c; uint local_18; if (param_6 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if ((((param_3 <= param_1) || (*(int *)(this + 0xac) == 0)) || (pCVar13 = this + 0x37ec, param_4 <= param_2)) || (((*(uint *)(this + 0x37ec) <= param_3 || (param_5 == (int *)0x0)) || (*(uint *)(this + 0x37f0) <= param_4)))) { uVar2 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar2 = 0xe4ae0001; } puVar6 = (undefined4 *)__errno(); *puVar6 = uVar2; uVar2 = 0; goto joined_r0x0002bf22; } uVar18 = param_4 - param_2; uVar16 = param_3 - param_1; local_1c = 0xffffffff; if (uVar16 < uVar18) { uVar2 = __floatunsisf(); uVar3 = __floatsisf(uVar18 * uVar18 - uVar16 * uVar16); sqrtf(__x); __subsf3(uVar2,uVar3); iVar4 = __fixsfsi(); sqrtf(__x_00); __addsf3(); iVar5 = __fixsfsi(); if (param_2 <= param_4) { local_18 = 0; local_5c = 0; local_58 = 0; local_20 = 0; local_34 = 0; local_24 = 0; local_1c = 0xffffffff; local_4c = param_2; do { if (param_1 <= param_3) { local_2c = (ushort *) (*(int *)(this + 0xb4) + local_4c * *(int *)pCVar13 * 2 + param_1 * 2); iVar7 = local_4c - iVar5 / 2; iVar8 = local_4c - iVar4 / 2; local_3c = (ushort *)0x0; iVar12 = param_3 - param_1; iVar14 = param_1 - param_3; uVar16 = param_1; local_28 = param_1 << 1; do { local_40 = iVar12; if (-1 < iVar14) { local_40 = iVar14; } if ((int)local_3c < local_40) { uVar2 = __floatunsisf(iVar14 * iVar14 + iVar8 * iVar8 * 4); sqrtf(__x_03); uVar3 = __floatunsisf(iVar14 * iVar14 + iVar7 * iVar7 * 4); sqrtf(__x_04); __addsf3(uVar2,uVar3); iVar9 = __fixsfsi(); if (iVar9 <= (int)(uVar18 * 2)) goto LAB_0002bcb6; if (param_3 + param_1 <= local_28) break; } else { local_40 = (int)local_3c; LAB_0002bcb6: uVar10 = (uint)*local_2c; bVar21 = CARRY4(local_20,uVar10); local_20 = local_20 + uVar10; local_24 = local_24 + (uint)bVar21; local_18 = local_18 + 1; if (local_34 < uVar10) { local_58 = uVar16 + local_4c * *(int *)pCVar13; local_34 = uVar10; } if (uVar10 < local_1c) { local_5c = uVar16 + local_4c * *(int *)pCVar13; local_1c = uVar10; } local_3c = (ushort *)local_40; } local_2c = local_2c + 1; local_28 = local_28 + 2; iVar12 = iVar12 + -2; iVar14 = iVar14 + 2; uVar16 = uVar16 + 1; } while (uVar16 <= param_3); } local_4c = local_4c + 1; } while (local_4c <= param_4); goto LAB_0002be94; } LAB_0002bbd0: local_24 = 0; local_58 = 0; local_5c = 0; local_18 = 0; local_20 = 0; local_34._0_2_ = 0; uVar1 = 0xffff; } else { local_34 = 0; uVar2 = __floatunsisf(); uVar3 = __floatsisf(uVar16 * uVar16 - uVar18 * uVar18); sqrtf(__x_01); __subsf3(uVar2,uVar3); iVar4 = __fixsfsi(); sqrtf(__x_02); __addsf3(); iVar5 = __fixsfsi(); if (param_4 < param_2) goto LAB_0002bbd0; local_18 = 0; local_5c = 0; local_20 = 0; local_24 = 0; uVar18 = param_2; local_58 = local_18; do { iVar12 = uVar18 * 2 - (param_4 + param_2); iVar12 = iVar12 * iVar12; if (param_1 <= param_3) { local_3c = (ushort *)(*(int *)(this + 0xb4) + uVar18 * *(int *)pCVar13 * 2 + param_1 * 2); local_44 = 0; uVar10 = uVar16; uVar15 = param_1; uVar17 = param_1 << 1; uVar20 = param_1 - param_3; local_2c = (ushort *)(param_1 * 4 + (iVar4 / 2) * -4); local_28 = param_1 * 4 + (iVar5 / 2) * -4; do { uVar11 = uVar10; if (-1 < (int)uVar20) { uVar11 = uVar20; } uVar19 = local_44; if ((int)local_44 < (int)uVar11) { uVar2 = __floatunsisf((int)local_2c * (uVar15 - iVar4 / 2) + iVar12); sqrtf(__x_05); uVar3 = __floatunsisf(local_28 * (uVar15 - iVar5 / 2) + iVar12); sqrtf(__x_06); __addsf3(uVar2,uVar3); iVar14 = __fixsfsi(); uVar19 = uVar11; if (iVar14 <= (int)(uVar16 * 2)) goto LAB_0002be10; if (param_3 + param_1 <= uVar17) break; } else { LAB_0002be10: uVar11 = (uint)*local_3c; bVar21 = CARRY4(local_20,uVar11); local_20 = local_20 + uVar11; local_24 = local_24 + (uint)bVar21; local_18 = local_18 + 1; if (local_34 < uVar11) { local_58 = uVar15 + uVar18 * *(int *)pCVar13; local_34 = uVar11; } local_44 = uVar19; if (uVar11 < local_1c) { local_5c = uVar15 + uVar18 * *(int *)pCVar13; local_1c = uVar11; } } local_3c = local_3c + 1; uVar17 = uVar17 + 2; uVar10 = uVar10 - 2; uVar20 = uVar20 + 2; local_28 = local_28 + 4; local_2c = (ushort *)((int)local_2c + 4); uVar15 = uVar15 + 1; } while (uVar15 <= param_3); } uVar18 = uVar18 + 1; } while (uVar18 <= param_4); LAB_0002be94: uVar1 = (ushort)local_1c; } local_60 = param_3 + param_1; local_78 = param_4 + param_2; iVar4 = *(int *)pCVar13; iVar5 = ReviseTemperature(this,uVar1,local_5c); *param_5 = iVar5; iVar5 = ReviseTemperature(this,(ushort)local_34,local_58); param_5[1] = iVar5; uVar1 = __aeabi_ldivmod(local_20,local_24,local_18,0); iVar4 = ReviseTemperature(this,uVar1,((uint)(local_78 * iVar4) >> 1) + (local_60 >> 1)); param_5[2] = iVar4; param_5[3] = local_5c; param_5[4] = local_58; if (*(int *)(this + 0x50) != 0) { iVar4 = CorrectTemperature((int)this,extraout_s0,*param_5); *param_5 = iVar4; iVar4 = CorrectTemperature((int)this,extraout_s0_00,param_5[1]); param_5[1] = iVar4; iVar4 = CorrectTemperature((int)this,extraout_s0_01,param_5[2]); param_5[2] = iVar4; } uVar2 = 1; joined_r0x0002bf22: if (param_6 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return uVar2; } ### FUNC GetLineTemperatureInfo @ 0002bf34 /* CFunctions::GetLineTemperatureInfo(unsigned short*, unsigned int, int*, unsigned int, unsigned int, int, int) */ uint __thiscall CFunctions::GetLineTemperatureInfo (CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5, int param_6,int param_7) { ushort uVar1; uint uVar2; undefined4 *puVar3; int iVar4; uint uVar5; uint uVar6; uint uVar7; ushort *puVar8; uint uVar9; ushort *puVar10; uint uVar11; undefined4 uVar12; uint uVar13; float extraout_s0; float extraout_s0_00; float extraout_s0_01; CFunctions *local_38; int local_20; uint local_1c; int local_18; if (param_7 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if (*(int *)(this + 0xac) != 0) { local_1c = 0xffffffff; if (param_6 == 0) { uVar6 = *(uint *)(this + 0x37ec); if (((param_4 < uVar6) && (param_5 < *(uint *)(this + 0x37f0))) && ((1 < param_2 && ((param_1 != (ushort *)0x0 && (param_3 != (int *)0x0)))))) { uVar13 = *(int *)(this + 0x37f0) - param_5; if (param_2 >> 1 <= *(int *)(this + 0x37f0) - param_5) { uVar13 = param_2 >> 1; } uVar5 = uVar13 + param_5; if (param_5 < uVar5) { puVar8 = (ushort *)(*(int *)(this + 0xb4) + (param_4 + uVar6 * param_5) * 2); puVar10 = param_1; do { *puVar10 = *puVar8; puVar8 = puVar8 + uVar6; puVar10 = puVar10 + 1; param_5 = param_5 + 1; } while (param_5 < uVar5); } LAB_0002c048: local_38 = this + 0x37ec; uVar6 = 0; if (uVar13 == 0) { uVar5 = 0xffffffff; local_20 = 0; uVar7 = uVar6; } else { local_20 = 0; uVar6 = 0; uVar2 = uVar13; uVar9 = 0; do { uVar11 = (uint)*param_1; uVar7 = uVar2; if (uVar11 <= uVar6) { uVar7 = uVar9; } uVar5 = uVar11; if (local_1c <= uVar11) { uVar5 = local_1c; } uVar9 = uVar11; if (uVar11 <= uVar6) { uVar9 = uVar6; } uVar6 = uVar9; local_20 = local_20 + uVar11; uVar2 = uVar2 - 1; param_1 = param_1 + 1; uVar9 = uVar7; local_1c = uVar5; } while (uVar2 != 0); } if (param_6 == 0) { local_18 = *(uint *)local_38 * (uVar13 - uVar7) + (*(uint *)local_38 >> 1); uVar7 = *(uint *)(this + 0x50f0) >> 1; } else { local_18 = (uVar13 - uVar7) + (*(uint *)(this + 0x50f0) >> 1); uVar7 = *(uint *)local_38 * param_4; param_4 = *(uint *)local_38 >> 1; } uVar7 = uVar7 + param_4; iVar4 = ReviseTemperature(this,(ushort)uVar5,uVar7); *param_3 = iVar4; iVar4 = ReviseTemperature(this,(ushort)uVar6,uVar7); param_3[1] = iVar4; uVar1 = __udivsi3(local_20,uVar13); iVar4 = ReviseTemperature(this,uVar1,uVar7); param_3[2] = iVar4; param_3[3] = uVar5; param_3[4] = uVar6; param_3[5] = local_18; if (*(int *)(this + 0x50) != 0) { iVar4 = CorrectTemperature((int)this,extraout_s0,*param_3); *param_3 = iVar4; iVar4 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); param_3[1] = iVar4; iVar4 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); param_3[2] = iVar4; } goto joined_r0x0002c184; } } else if ((((param_4 < *(uint *)(this + 0x37f0)) && (1 < param_2)) && (param_1 != (ushort *)0x0)) && ((param_3 != (int *)0x0 && (param_5 < *(uint *)(this + 0x37ec))))) { uVar13 = *(int *)(this + 0x37ec) - param_5; if (param_2 >> 1 <= *(int *)(this + 0x37ec) - param_5) { uVar13 = param_2 >> 1; } __aeabi_memcpy(param_1,*(int *)(this + 0xb4) + param_4 * *(uint *)(this + 0x37ec) * 2 + param_5 * 2,uVar13 << 1); goto LAB_0002c048; } } uVar12 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar12 = 0xe4ae0001; } puVar3 = (undefined4 *)__errno(); *puVar3 = uVar12; uVar13 = 0; joined_r0x0002c184: if (param_7 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return uVar13; } ### FUNC GetLineTemperatureInfo2 @ 0002c1a0 /* CFunctions::GetLineTemperatureInfo2(unsigned short*, unsigned int, int*, unsigned int, unsigned int, unsigned int, unsigned int, int) */ uint __thiscall CFunctions::GetLineTemperatureInfo2 (CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5, uint param_6,uint param_7,int param_8) { uint uVar1; uint uVar2; uint uVar3; ushort uVar4; int iVar5; int iVar6; undefined4 *puVar7; int iVar8; int iVar9; uint uVar10; uint uVar11; uint uVar12; uint uVar13; uint uVar14; uint uVar15; undefined4 uVar16; ushort *puVar17; int iVar18; uint uVar19; float extraout_s0; float extraout_s0_00; float extraout_s0_01; uint local_18; if (param_8 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if ((((*(int *)(this + 0xac) == 0) || (uVar13 = *(uint *)(this + 0x37ec), uVar13 <= param_4)) || (uVar13 <= param_6)) || ((*(uint *)(this + 0x37f0) <= param_5 || (*(uint *)(this + 0x37f0) <= param_7)))) { LAB_0002c316: uVar16 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar16 = 0xe4ae0001; } puVar7 = (undefined4 *)__errno(); *puVar7 = uVar16; uVar19 = 0; } else { if (param_4 == param_6) { if (((param_2 < 2) || (param_1 == (ushort *)0x0)) || ((param_3 == (int *)0x0 || (param_5 == param_7)))) goto LAB_0002c316; } else if (((param_2 < 2) || (param_1 == (ushort *)0x0)) || (param_3 == (int *)0x0)) goto LAB_0002c316; iVar5 = param_5 - param_7; uVar14 = iVar5 + (iVar5 >> 0x1f) ^ iVar5 >> 0x1f; iVar9 = param_4 - param_6; uVar15 = iVar9 + (iVar9 >> 0x1f) ^ iVar9 >> 0x1f; if ((int)uVar15 < (int)uVar14) { iVar9 = iVar5; } uVar10 = iVar9 + (iVar9 >> 0x1f) ^ iVar9 >> 0x1f; uVar19 = uVar10 + 1; uVar11 = param_2 >> 1; if ((int)uVar11 <= (int)uVar19) { uVar19 = uVar11; } uVar12 = param_4; uVar1 = param_5; uVar2 = param_6; uVar3 = param_7; if (param_4 <= param_6) { uVar12 = param_6; uVar1 = param_7; uVar2 = param_4; uVar3 = param_5; } if ((int)uVar15 < (int)uVar14) { if ((int)uVar3 < (int)uVar1) { uVar14 = (uVar3 + uVar19) - 1; if ((int)uVar1 <= (int)uVar14) { uVar14 = uVar1; } if ((int)uVar3 <= (int)uVar14) { local_18 = -param_6 - 1; if (-param_6 - 1 <= -param_4 - 1) { local_18 = -param_4 - 1; } local_18 = (uVar3 * uVar13 + -1) - local_18; iVar9 = *(int *)(this + 0xb4); iVar5 = uVar3 - 1; iVar18 = 0; puVar17 = param_1; do { iVar6 = __divsi3(iVar18,uVar1 - uVar3); *puVar17 = *(ushort *)(iVar9 + (local_18 + iVar6) * 2); local_18 = local_18 + uVar13; iVar18 = iVar18 + (uVar12 - uVar2); puVar17 = puVar17 + 1; iVar5 = iVar5 + 1; } while (iVar5 < (int)uVar14); } } else { uVar14 = (uVar3 - uVar19) + 1; if ((int)uVar14 <= (int)uVar1) { uVar14 = uVar1; } if ((int)uVar14 <= (int)uVar3) { uVar15 = -param_6 - 1; if (-param_6 - 1 <= -param_4 - 1) { uVar15 = -param_4 - 1; } iVar18 = (uVar3 * uVar13 + -1) - uVar15; iVar9 = *(int *)(this + 0xb4); iVar6 = uVar3 + 1; iVar5 = 0; puVar17 = param_1; do { iVar8 = __divsi3(iVar5,uVar1 - uVar3); *puVar17 = *(ushort *)(iVar9 + (iVar18 + iVar8) * 2); iVar18 = iVar18 - uVar13; iVar5 = iVar5 + ((-1 - uVar12) - uVar15); puVar17 = puVar17 + 1; iVar6 = iVar6 + -1; } while ((int)uVar14 < iVar6); } } } else { uVar14 = (uVar2 + uVar19) - 1; if ((int)uVar12 <= (int)uVar14) { uVar14 = uVar12; } if ((int)uVar2 <= (int)uVar14) { uVar15 = -param_6 - 1; if (-param_6 - 1 <= -param_4 - 1) { uVar15 = -param_4 - 1; } iVar5 = -2 - uVar15; iVar9 = *(int *)(this + 0xb4); iVar18 = 0; puVar17 = param_1; do { iVar6 = __divsi3(iVar18,uVar12 - uVar2); *puVar17 = *(ushort *)(iVar9 + (iVar5 + uVar13 * (iVar6 + uVar3)) * 2 + 2); iVar18 = iVar18 + (uVar1 - uVar3); puVar17 = puVar17 + 1; iVar5 = iVar5 + 1; } while (iVar5 < (int)uVar14); } } uVar4 = 0; if (uVar19 == 0) { local_18 = 0xffff; iVar9 = 0; } else { iVar9 = -2 - uVar10; iVar5 = -1 - uVar11; if ((int)(-1 - uVar11) <= iVar9) { iVar5 = iVar9; } iVar5 = iVar5 + 1; iVar9 = 0; uVar14 = 0; local_18 = 0xffffffff; do { uVar10 = (uint)*param_1; uVar15 = uVar10; if (local_18 <= uVar10) { uVar15 = local_18; } local_18 = uVar15; uVar15 = uVar10; if (uVar10 <= uVar14) { uVar15 = uVar14; } uVar14 = uVar15; uVar4 = (ushort)uVar14; iVar9 = iVar9 + uVar10; iVar5 = iVar5 + 1; param_1 = param_1 + 1; } while (iVar5 != 0); } uVar13 = (uVar13 * (param_7 + param_5) >> 1) + (param_6 + param_4 >> 1); iVar5 = ReviseTemperature(this,(ushort)local_18,uVar13); *param_3 = iVar5; iVar5 = ReviseTemperature(this,uVar4,uVar13); param_3[1] = iVar5; uVar4 = __udivsi3(iVar9,uVar19); iVar9 = ReviseTemperature(this,uVar4,uVar13); param_3[2] = iVar9; if (*(int *)(this + 0x50) != 0) { iVar9 = CorrectTemperature((int)this,extraout_s0,*param_3); *param_3 = iVar9; iVar9 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); param_3[1] = iVar9; iVar9 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); param_3[2] = iVar9; } } if (param_8 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return uVar19; } ### FUNC GetLineTemperatureInfo3 @ 0002c510 /* CFunctions::GetLineTemperatureInfo3(int*, unsigned int, int*, unsigned int, unsigned int, unsigned int, unsigned int, int) */ uint __thiscall CFunctions::GetLineTemperatureInfo3 (CFunctions *this,int *param_1,uint param_2,int *param_3,uint param_4,uint param_5, uint param_6,uint param_7,int param_8) { uint uVar1; ushort uVar2; uint uVar3; int iVar4; undefined4 *puVar5; int iVar6; uint uVar7; int iVar8; CFunctions *pCVar9; int iVar10; uint uVar11; uint *puVar12; uint uVar13; uint uVar14; int iVar15; uint uVar16; uint uVar17; undefined4 uVar18; uint uVar19; uint uVar20; float extraout_s0; float extraout_s0_00; float extraout_s0_01; float extraout_s0_02; if (param_8 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if (*(int *)(this + 0xac) != 0) { uVar3 = *(uint *)(this + 0x37ec); pCVar9 = this + 0x37ec; if ((((param_4 < uVar3) && (param_6 < uVar3)) && (param_5 < *(uint *)(this + 0x37f0))) && (param_7 < *(uint *)(this + 0x37f0))) { if (param_4 == param_6) { if (((3 < param_2) && (param_1 != (int *)0x0)) && ((param_3 != (int *)0x0 && (param_5 != param_7)))) { LAB_0002c59e: iVar10 = param_5 - param_7; uVar14 = iVar10 + (iVar10 >> 0x1f) ^ iVar10 >> 0x1f; iVar15 = param_4 - param_6; uVar7 = iVar15 + (iVar15 >> 0x1f) ^ iVar15 >> 0x1f; if ((int)uVar7 < (int)uVar14) { iVar15 = iVar10; } uVar16 = iVar15 + (iVar15 >> 0x1f) ^ iVar15 >> 0x1f; uVar11 = param_2 >> 2; uVar17 = uVar16 + 1; if ((int)uVar11 <= (int)(uVar16 + 1)) { uVar17 = uVar11; } uVar20 = param_4; uVar13 = param_6; uVar19 = param_7; uVar1 = param_5; if (param_4 <= param_6) { uVar20 = param_6; uVar13 = param_4; uVar19 = param_5; uVar1 = param_7; } if ((int)uVar7 < (int)uVar14) { if ((int)uVar19 < (int)uVar1) { uVar7 = (uVar19 + uVar17) - 1; if ((int)uVar1 <= (int)uVar7) { uVar7 = uVar1; } if ((int)uVar19 <= (int)uVar7) { iVar10 = *(int *)(this + 0xb4); *param_1 = (uint)*(ushort *)(iVar10 + (uVar13 + uVar19 * uVar3) * 2); iVar8 = uVar1 - uVar19; iVar15 = uVar20 - uVar13; puVar12 = (uint *)param_1; while ((int)uVar19 < (int)uVar7) { puVar12 = puVar12 + 1; iVar4 = __divsi3(iVar15,iVar8); uVar19 = uVar19 + 1; *puVar12 = (uint)*(ushort *) (iVar10 + (iVar4 + uVar13 + uVar19 * *(int *)pCVar9) * 2); iVar15 = iVar15 + (uVar20 - uVar13); } } } else { uVar7 = (uVar19 - uVar17) + 1; if ((int)uVar7 <= (int)uVar1) { uVar7 = uVar1; } if ((int)uVar7 <= (int)uVar19) { iVar10 = *(int *)(this + 0xb4); *param_1 = (uint)*(ushort *)(iVar10 + (uVar13 + uVar19 * uVar3) * 2); iVar15 = uVar1 - uVar19; if ((int)uVar7 < (int)uVar19) { uVar3 = -param_6 - 1; if (-param_6 - 1 <= -param_4 - 1) { uVar3 = -param_4 - 1; } iVar4 = (-1 - uVar20) - uVar3; iVar8 = iVar4; puVar12 = (uint *)param_1; do { puVar12 = puVar12 + 1; iVar6 = __divsi3(iVar8,iVar15); uVar19 = uVar19 - 1; *puVar12 = (uint)*(ushort *) (iVar10 + (iVar6 + uVar13 + uVar19 * *(int *)pCVar9) * 2); iVar8 = iVar8 + iVar4; } while ((int)uVar7 < (int)uVar19); } } } } else { uVar7 = (uVar13 + uVar17) - 1; if ((int)uVar20 <= (int)uVar7) { uVar7 = uVar20; } if ((int)uVar13 <= (int)uVar7) { iVar10 = *(int *)(this + 0xb4); *param_1 = (uint)*(ushort *)(iVar10 + (uVar19 * uVar3 + uVar13) * 2); iVar8 = uVar20 - uVar13; iVar15 = uVar1 - uVar19; puVar12 = (uint *)param_1; while ((int)uVar13 < (int)uVar7) { uVar13 = uVar13 + 1; puVar12 = puVar12 + 1; iVar4 = __divsi3(iVar15,iVar8); iVar15 = iVar15 + (uVar1 - uVar19); *puVar12 = (uint)*(ushort *) (iVar10 + (uVar13 + (iVar4 + uVar19) * *(int *)pCVar9) * 2); } } } uVar3 = 0xffff; if (uVar17 == 0) { uVar14 = 0; uVar7 = uVar14; } else { iVar15 = -1 - uVar11; if ((int)(-1 - uVar11) <= (int)(-2 - uVar16)) { iVar15 = -2 - uVar16; } iVar15 = iVar15 + 1; uVar7 = 0; uVar14 = 0; puVar12 = (uint *)param_1; uVar13 = 0xffffffff; do { uVar19 = *puVar12; puVar12 = puVar12 + 1; uVar3 = uVar19; if (uVar13 <= uVar19) { uVar3 = uVar13; } uVar13 = uVar19; if (uVar19 <= uVar14) { uVar13 = uVar14; } uVar14 = uVar13; uVar7 = uVar19 + uVar7; iVar15 = iVar15 + 1; uVar13 = uVar3; } while (iVar15 != 0); } uVar13 = ((param_7 + param_5) * *(int *)pCVar9 >> 1) + (param_6 + param_4 >> 1); iVar15 = ReviseTemperature(this,(ushort)uVar3,uVar13); *param_3 = iVar15; iVar15 = ReviseTemperature(this,(ushort)uVar14,uVar13); param_3[1] = iVar15; uVar2 = __udivsi3(uVar7,uVar17); iVar15 = ReviseTemperature(this,uVar2,uVar13); param_3[2] = iVar15; if (*(int *)(this + 0x50) != 0) { iVar15 = CorrectTemperature((int)this,extraout_s0,*param_3); *param_3 = iVar15; iVar15 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); param_3[1] = iVar15; iVar15 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); param_3[2] = iVar15; } if (uVar17 != 0) { iVar15 = -1 - uVar11; if ((int)(-1 - uVar11) <= (int)(-2 - uVar16)) { iVar15 = -2 - uVar16; } iVar15 = iVar15 + 1; do { uVar3 = ReviseTemperature(this,(ushort)*param_1,uVar13); *param_1 = uVar3; if (*(int *)(this + 0x50) != 0) { uVar3 = CorrectTemperature((int)this,extraout_s0_02,uVar3); *param_1 = uVar3; } iVar15 = iVar15 + 1; param_1 = (int *)((uint *)param_1 + 1); } while (iVar15 != 0); } if (param_8 == 0) { return uVar17; } pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); return uVar17; } } else if (((3 < param_2) && (param_1 != (int *)0x0)) && (param_3 != (int *)0x0)) goto LAB_0002c59e; } } uVar18 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar18 = 0xe4ae0001; } puVar5 = (undefined4 *)__errno(); *puVar5 = uVar18; if (param_8 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return 0; } ### FUNC GetRgnTemperatureInfo @ 0002c8e4 /* CFunctions::GetRgnTemperatureInfo(unsigned int const*, unsigned int, int*, int) */ undefined4 __thiscall CFunctions::GetRgnTemperatureInfo (CFunctions *this,uint *param_1,uint param_2,int *param_3,int param_4) { ushort uVar1; uint uVar2; int iVar3; undefined4 *puVar4; uint uVar5; uint uVar6; uint uVar7; undefined4 uVar8; uint uVar9; bool bVar10; float extraout_s0; float extraout_s0_00; float extraout_s0_01; uint local_2c; uint local_28; uint *local_24; int local_20; uint local_1c; uint local_18; if (param_4 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if ((((param_2 == 0) || (param_1 == (uint *)0x0)) || (param_3 == (int *)0x0)) || (*(int *)(this + 0xac) == 0)) { uVar8 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar8 = 0xe4ae0001; } puVar4 = (undefined4 *)__errno(); *puVar4 = uVar8; uVar8 = 0; } else { local_20 = 0; local_2c = 0; local_18 = 0; local_1c = 0; uVar5 = 0; uVar6 = 0xffffffff; local_28 = param_2; local_24 = param_1; do { uVar9 = *local_24; local_24 = local_24 + 1; uVar7 = (uint)*(ushort *)(*(int *)(this + 0xb4) + uVar9 * 2); uVar2 = uVar9; if (uVar6 <= uVar7) { uVar2 = local_18; } local_18 = uVar2; if (uVar7 <= uVar5) { uVar9 = local_2c; } bVar10 = CARRY4(local_1c,uVar7); local_1c = local_1c + uVar7; local_20 = local_20 + (uint)bVar10; uVar2 = uVar7; if (uVar6 <= uVar7) { uVar2 = uVar6; } if (uVar7 <= uVar5) { uVar7 = uVar5; } uVar5 = uVar7; local_28 = local_28 - 1; uVar6 = uVar2; local_2c = uVar9; } while (local_28 != 0); iVar3 = ReviseTemperature(this,(ushort)uVar2,local_18); *param_3 = iVar3; iVar3 = ReviseTemperature(this,(ushort)uVar5,uVar9); param_3[1] = iVar3; uVar1 = __aeabi_ldivmod(local_1c,local_20,param_2,0); iVar3 = ReviseTemperature(this,uVar1, (*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1)); param_3[2] = iVar3; param_3[3] = local_18; param_3[4] = uVar9; if (*(int *)(this + 0x50) != 0) { iVar3 = CorrectTemperature((int)this,extraout_s0,*param_3); *param_3 = iVar3; iVar3 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]); param_3[1] = iVar3; iVar3 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]); param_3[2] = iVar3; } uVar8 = 1; } if (param_4 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return uVar8; } ### FUNC GetTemperature @ 0002ca50 /* CFunctions::GetTemperature(unsigned int, unsigned int, int) */ uint __thiscall CFunctions::GetTemperature(CFunctions *this,uint param_1,uint param_2,int param_3) { bool bVar1; ushort uVar2; int iVar3; int iVar4; int iVar5; int iVar6; undefined4 *puVar7; int iVar8; int iVar9; int iVar10; int iVar11; undefined4 uVar12; int iVar13; uint uVar14; float extraout_s0; if (param_3 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if ((*(int *)(this + 0xac) == 0) || (*(uint *)(this + 0x50f0) <= param_1)) { uVar12 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar12 = 0xe4ae0001; } puVar7 = (undefined4 *)__errno(); *puVar7 = uVar12; uVar14 = 0x80000001; } else { iVar10 = 3; if (param_2 - 1 < 5) { iVar10 = *(int *)(&DAT_0002cb84 + (param_2 - 1) * 4); } uVar14 = *(uint *)(this + 0x37ec); iVar3 = __udivsi3(param_1,uVar14); iVar4 = param_1 - iVar3 * uVar14; iVar9 = iVar4 + iVar10; iVar4 = iVar4 - iVar10; iVar8 = 0; iVar5 = 0; if (iVar4 <= iVar9) { iVar6 = iVar10 * ~uVar14 * 2 + param_1 * 2; iVar5 = 0; iVar8 = 0; do { if (((-1 < iVar4) && (iVar4 < (int)uVar14)) && (iVar11 = iVar3 - iVar10, iVar13 = iVar6, iVar3 - iVar10 <= iVar3 + iVar10)) { do { if ((-1 < iVar11) && (iVar11 < *(int *)(this + 0x37f0))) { iVar5 = iVar5 + (uint)*(ushort *)(*(int *)(this + 0xb4) + iVar13); iVar8 = iVar8 + 1; } bVar1 = iVar11 < iVar3 + iVar10; iVar11 = iVar11 + 1; iVar13 = iVar13 + uVar14 * 2; } while (bVar1); } iVar6 = iVar6 + 2; bVar1 = iVar4 < iVar9; iVar4 = iVar4 + 1; } while (bVar1); } uVar2 = __udivsi3(iVar5,iVar8); uVar14 = ReviseTemperature(this,uVar2,param_1); if (*(int *)(this + 0x50) != 0) { uVar14 = CorrectTemperature((int)this,extraout_s0,uVar14); } } if (param_3 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return uVar14; } ### FUNC Temp2Energe @ 0002cbac /* CFunctions::Temp2Energe(int) const */ int __thiscall CFunctions::Temp2Energe(CFunctions *this,int param_1) { int iVar1; int iVar2; iVar1 = param_1 + 50000; iVar2 = 0; if (-0xe350 < param_1) { iVar2 = 0x111; if (param_1 < 0x217cb0) { iVar2 = (int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd; } } iVar1 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * (iVar1 + iVar2 * -0x2000); return ((int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd) + *(int *)(T2E + iVar2 * 4); } ### FUNC dTemp2dEnerge @ 0002cc04 /* CFunctions::dTemp2dEnerge(int, int) const */ int __thiscall CFunctions::dTemp2dEnerge(CFunctions *this,int param_1,int param_2) { int iVar1; iVar1 = 0; if (-0xe350 < param_1) { iVar1 = 0x111; if (param_1 < 0x217cb0) { iVar1 = (int)(param_1 + 50000 + ((uint)(param_1 + 50000 >> 0x1f) >> 0x13)) >> 0xd; } } iVar1 = (*(int *)(T2E + iVar1 * 4 + 4) - *(int *)(T2E + iVar1 * 4)) * param_2; return (int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd; } ### FUNC dEnerge2dTemp @ 0002cc54 /* CFunctions::dEnerge2dTemp(int, int) const */ int __thiscall CFunctions::dEnerge2dTemp(CFunctions *this,int param_1,int param_2) { int iVar1; iVar1 = 0; if (-0xe350 < param_1) { iVar1 = 0x111; if (param_1 < 0x217cb0) { iVar1 = (int)(param_1 + 50000 + ((uint)(param_1 + 50000 >> 0x1f) >> 0x13)) >> 0xd; } } return *(int *)(E2TAccQ10 + iVar1 * 4) * param_2 >> 10; } ### FUNC Energe2Temp @ 0002cc98 /* CFunctions::Energe2Temp(int) const */ int __thiscall CFunctions::Energe2Temp(CFunctions *this,int param_1) { uint uVar1; uint uVar2; uint uVar3; uVar2 = 0x112; uVar1 = 0; do { uVar3 = uVar1 + uVar2 >> 1; if (*(int *)(T2E + uVar3 * 4) <= param_1) { uVar1 = uVar3; uVar3 = uVar2; } uVar2 = uVar3; } while (uVar1 + 1 < uVar2); return uVar1 * 0x2000 + (*(int *)(E2TAccQ10 + uVar1 * 4) * (param_1 - *(int *)(T2E + uVar1 * 4)) >> 10) + -50000; } ### FUNC ConvertInnerTemp2mC @ 0002ccfc /* CFunctions::ConvertInnerTemp2mC(unsigned short) const */ int __thiscall CFunctions::ConvertInnerTemp2mC(CFunctions *this,ushort param_1) { return ((uint)param_1 << (*(uint *)(this + 0x5104) & 0xff)) + *(int *)(this + 0x5100); } ### FUNC CalibrationMain_RTV @ 0002cd10 /* CFunctions::CalibrationMain_RTV(unsigned short const*) */ void __thiscall CFunctions::CalibrationMain_RTV(CFunctions *this,ushort *param_1) { int iVar1; int iVar2; undefined2 *puVar3; uint uVar4; int iVar5; short *psVar6; int iVar7; int iVar8; ushort *puVar9; int iVar10; short *local_18; local_18 = *(short **)(this + 0x3114); puVar9 = (ushort *)0x0; if (*(int *)(this + 0x37a0) != 0) { puVar9 = *(ushort **)(this + 0x378c); } iVar7 = *(int *)(this + 0x50f0); iVar1 = iVar7 * 2; iVar2 = *(int *)(this + 0x2e28); if (iVar7 != 0) { iVar10 = *(int *)(this + 0x3120); puVar3 = *(undefined2 **)(this + 0xb4); do { iVar8 = (int)((uint)*param_1 - (uint)*puVar9) >> 1; puVar9 = puVar9 + 1; param_1 = param_1 + 1; uVar4 = 0; if (iVar2 != 1) { uVar4 = 0; psVar6 = local_18; do { if (iVar8 <= *psVar6) break; psVar6 = psVar6 + 1; uVar4 = uVar4 + 1; } while (uVar4 < iVar2 - 1U); } iVar5 = iVar1 * uVar4 * 2; iVar8 = ((int)(iVar8 * (uint)*(ushort *)(iVar10 + iVar5)) >> 0xc) + (uint)*(ushort *)(iVar10 + iVar5 + 2); if (iVar8 < 1) { iVar8 = 0; } if (0xfffe < iVar8) { iVar8 = 0xffff; } *puVar3 = (short)iVar8; local_18 = local_18 + iVar2 + -1; iVar7 = iVar7 + -1; puVar3 = puVar3 + 1; iVar10 = iVar10 + 4; } while (iVar7 != 0); } return; } ### FUNC BlindCompensation @ 0002cde8 /* CFunctions::BlindCompensation(unsigned short*) */ void __thiscall CFunctions::BlindCompensation(CFunctions *this,ushort *param_1) { ushort uVar1; int iVar2; uint uVar3; undefined4 uVar4; uint uVar5; int *piVar6; uVar3 = *(uint *)(this + *(int *)(this + 0x3108) * 4 + 0x2f28); if (uVar3 != 0) { piVar6 = (int *)(*(int *)(this + 0x3124) + 0x14); uVar5 = 0; do { switch(piVar6[-4]) { case 3: iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]]; uVar4 = 3; goto LAB_0002cebc; case 4: uVar1 = (ushort)((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] >> 2); break; case 5: iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] + (uint)param_1[piVar6[1]]; uVar4 = 5; goto LAB_0002cebc; case 6: iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]]; uVar4 = 6; LAB_0002cebc: uVar1 = __udivsi3(iVar2,uVar4); break; case 7: uVar1 = __divsi3((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]] + (uint)param_1[piVar6[3]],7); break; case 8: uVar1 = (ushort)((int)((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]] + (uint)param_1[piVar6[3]] + (uint)param_1[piVar6[4]]) >> 3); break; default: goto switchD_0002ce1a_default; } param_1[piVar6[-5]] = uVar1; piVar6 = piVar6 + 10; uVar5 = uVar5 + 1; } while (uVar5 < uVar3); } switchD_0002ce1a_default: return; } ### FUNC ConvertResponse2Temperature @ 0002cf80 /* CFunctions::ConvertResponse2Temperature(unsigned short const*) */ void __thiscall CFunctions::ConvertResponse2Temperature(CFunctions *this,ushort *param_1) { undefined2 *puVar1; ushort *puVar2; int iVar3; int iVar4; int iVar5; puVar2 = (ushort *)0x0; if (*(int *)(this + 0x37a0) != 0) { puVar2 = *(ushort **)(this + 0x378c); } iVar3 = 50000 - *(int *)(this + 0x5100) >> (*(uint *)(this + 0x5104) & 0xff); if (iVar3 < 1) { iVar3 = 0; } if (0xfffe < iVar3) { iVar3 = 0xffff; } iVar4 = *(int *)(this + 0x50f0); if (iVar4 != 0) { puVar1 = *(undefined2 **)(this + 0xb4); do { iVar5 = ((uint)*param_1 - (uint)*puVar2) * 3 + iVar3; if (iVar5 < 1) { iVar5 = 0; } if (0xfffe < iVar5) { iVar5 = 0xffff; } *puVar1 = (short)iVar5; iVar4 = iVar4 + -1; puVar1 = puVar1 + 1; puVar2 = puVar2 + 1; param_1 = param_1 + 1; } while (iVar4 != 0); } return; } ### FUNC GetTemperaturemC @ 0002d00c /* CFunctions::GetTemperaturemC(int*, unsigned int, int, int) */ undefined4 __thiscall CFunctions::GetTemperaturemC(CFunctions *this,int *param_1,uint param_2,int param_3,int param_4) { uint uVar1; undefined4 *puVar2; uint uVar3; uint uVar4; undefined4 uVar5; ushort *puVar6; float extraout_s0; if (param_4 != 0) { pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); } if ((param_1 == (int *)0x0) || (*(int *)(this + 0xac) == 0)) { uVar5 = 0xe4ae0005; if (*(int *)(this + 0xac) != 0) { uVar5 = 0xe4ae0001; } puVar2 = (undefined4 *)__errno(); *puVar2 = uVar5; uVar5 = 0; } else { uVar3 = *(uint *)(this + 0x50f0); if (param_2 >> 2 <= *(uint *)(this + 0x50f0)) { uVar3 = param_2 >> 2; } if (uVar3 != 0) { puVar6 = *(ushort **)(this + 0xb4); uVar4 = 0; do { uVar1 = ReviseTemperature(this,*puVar6,uVar4); puVar6 = puVar6 + 1; if (param_3 != 0) { uVar1 = CorrectTemperature((int)this,extraout_s0,uVar1); } param_1[uVar4] = uVar1; uVar4 = uVar4 + 1; } while (uVar4 < uVar3); } uVar5 = 1; } if (param_4 != 0) { pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); } return uVar5; } ### FUNC GetCenterTemperatureSharpness @ 0002d0c0 /* CFunctions::GetCenterTemperatureSharpness(unsigned int, unsigned int) */ uint __thiscall CFunctions::GetCenterTemperatureSharpness(CFunctions *this,uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; uint uVar6; int iVar7; int iVar8; uint uVar9; int iVar10; uint uVar11; int iVar12; uint uVar13; int iVar14; pthread_mutex_t *__mutex; uint uVar15; int iVar16; uint uVar17; int iVar18; int local_1c; uVar6 = 0x10; if ((0xf < param_1) && (uVar6 = *(uint *)(this + 0x37ec) >> 1, param_1 <= *(uint *)(this + 0x37ec) >> 1)) { uVar6 = param_1; } uVar1 = *(uint *)(this + 0x37f0); uVar15 = 9; if ((8 < param_2) && (uVar15 = uVar1 >> 1, param_2 <= uVar1 >> 1)) { uVar15 = param_2; } iVar8 = *(int *)(this + 0x37ec); __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); uVar9 = uVar1 + uVar15 >> 1; uVar5 = iVar8 + uVar6 >> 1; uVar6 = iVar8 - uVar6 >> 1; if ((*(int *)(this + 0xac) == 0) || (uVar15 = uVar1 - uVar15 >> 1, uVar9 <= uVar15)) { pthread_mutex_unlock(__mutex); uVar1 = 0; } else { iVar10 = *(int *)(this + 0xb4); iVar12 = *(int *)(this + 0x37ec); iVar8 = uVar6 * 2 + iVar12 * (uVar15 * 2 + 2); iVar7 = uVar6 * 2 + iVar12 * (uVar15 - 1) * 2; uVar1 = 0; local_1c = 0; do { iVar4 = uVar6 - uVar5; iVar14 = iVar10; if (uVar5 != uVar6) { do { uVar13 = (uint)*(ushort *)(iVar14 + -2 + iVar7); uVar2 = (uint)*(ushort *)(iVar14 + iVar7 + 2); iVar16 = uVar13 - uVar2; uVar17 = iVar16 >> 0x1f; uVar11 = (uint)*(ushort *)(iVar14 + -2 + iVar8); iVar18 = uVar13 - uVar11; uVar3 = iVar18 >> 0x1f; local_1c = ((iVar18 + uVar3 ^ uVar3) + (iVar16 + uVar17 ^ uVar17) >> 1) + local_1c; uVar1 = (uVar2 + uVar13 + uVar11 + (uint)*(ushort *)(iVar14 + iVar8 + 2) >> 2) + uVar1; iVar4 = iVar4 + 1; iVar14 = iVar14 + 2; } while (iVar4 != 0); } iVar10 = iVar10 + iVar12 * 2; uVar15 = uVar15 + 1; } while (uVar15 != uVar9); pthread_mutex_unlock(__mutex); if (uVar1 >> 0x10 != 0) { uVar1 = __udivsi3(local_1c); } } return uVar1; } ### FUNC CalcSD @ 0002d210 /* CFunctions::CalcSD(int, int) */ undefined4 __thiscall CFunctions::CalcSD(CFunctions *this,int param_1,int param_2) { longlong lVar1; pthread_mutex_t *__mutex; int iVar2; ushort *puVar3; undefined4 uVar4; int iVar5; int iVar6; uint uVar7; uint uVar8; uint uVar9; int iVar10; uint uVar11; uint uVar12; uint uVar13; bool bVar14; longlong lVar15; undefined8 uVar16; undefined8 uVar17; undefined4 in_stack_ffffffb0; uint local_2c; uVar11 = 0x10; if ((0xf < param_1) && (uVar11 = *(uint *)(this + 0x37ec), (uint)param_1 <= *(uint *)(this + 0x37ec))) { uVar11 = param_1; } iVar5 = *(int *)(this + 0x37ec); uVar9 = *(uint *)(this + 0x37f0); __mutex = (pthread_mutex_t *)(this + 0xb0); pthread_mutex_lock(__mutex); uVar7 = uVar9; if ((uint)param_2 <= uVar9) { uVar7 = param_2; } uVar12 = 9; if (8 < param_2) { uVar12 = uVar7; } uVar8 = uVar9 + uVar12 >> 1; uVar9 = uVar9 - uVar12 >> 1; uVar7 = iVar5 + uVar11 >> 1; uVar11 = iVar5 - uVar11 >> 1; if (*(int *)(this + 0xac) == 0) { pthread_mutex_unlock(__mutex); uVar4 = 0; } else { uVar12 = 0; iVar5 = 0; lVar1 = 0; if (uVar9 < uVar8) { iVar6 = *(int *)(this + 0xb4); iVar2 = *(int *)(this + 0x37ec); lVar1 = 0; uVar12 = 0; iVar5 = 0; local_2c = uVar9; do { if (uVar11 < uVar7) { puVar3 = (ushort *)(iVar6 + iVar2 * local_2c * 2 + uVar11 * 2); iVar10 = uVar7 - uVar11; do { uVar13 = (uint)*puVar3; lVar15 = __muldi3(uVar13,0,uVar13,0); lVar1 = lVar15 + lVar1; bVar14 = CARRY4(uVar12,uVar13); uVar12 = uVar12 + uVar13; iVar5 = iVar5 + (uint)bVar14; iVar10 = iVar10 + -1; puVar3 = puVar3 + 1; } while (iVar10 != 0); } local_2c = local_2c + 1; } while (local_2c != uVar8); } pthread_mutex_unlock(__mutex); iVar2 = (uVar8 - uVar9) * (uVar7 - uVar11); uVar16 = __floatdidf(uVar12,iVar5); uVar4 = (undefined4)((ulonglong)uVar16 >> 0x20); uVar16 = __muldf3((int)uVar16,uVar4,(int)uVar16,uVar4); uVar17 = __floatunsidf(iVar2); uVar16 = __divdf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, (int)((ulonglong)uVar17 >> 0x20)); uVar17 = __floatdidf((int)lVar1,(int)((ulonglong)lVar1 >> 0x20)); uVar16 = __subdf3((int)uVar17,(int)((ulonglong)uVar17 >> 0x20),(int)uVar16, (int)((ulonglong)uVar16 >> 0x20)); uVar17 = __floatunsidf(iVar2 + -1); __divdf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, (int)((ulonglong)uVar17 >> 0x20)); sqrt((double)CONCAT44(__mutex,in_stack_ffffffb0)); uVar4 = __fixdfsi(); } return uVar4; } ### FUNC LocalMap7x7 @ 0002d390 /* CFunctions::LocalMap7x7(int*, unsigned short const*, unsigned int) */ void __thiscall CFunctions::LocalMap7x7(CFunctions *this,int *param_1,ushort *param_2,uint param_3) { int iVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; uint uVar6; uint uVar7; uint uVar8; uint uVar9; uint uVar10; int iVar11; int local_20; uint local_1c; ushort *local_18; uVar5 = (uint)param_2[1]; uVar8 = (uint)*param_2; local_1c = 0; local_20 = -3; uVar2 = uVar8; uVar4 = uVar8; local_18 = param_2; while( true ) { uVar7 = uVar2; if (uVar4 <= uVar2) { uVar7 = uVar4; } if (uVar2 <= uVar5) { uVar4 = uVar7; } uVar10 = (uint)local_18[2]; uVar7 = uVar10; if (uVar4 <= uVar10) { uVar7 = uVar4; } uVar3 = uVar2; if (uVar2 <= uVar5) { uVar3 = uVar5; } if (uVar10 <= uVar3) { uVar4 = uVar7; } uVar7 = (uint)local_18[4]; uVar5 = uVar7; if (uVar4 <= uVar7) { uVar5 = uVar4; } uVar6 = uVar10; if (uVar10 <= uVar3) { uVar6 = uVar3; } if (uVar7 <= uVar6) { uVar4 = uVar5; } uVar3 = (uint)local_18[6]; uVar5 = uVar3; if (uVar4 <= uVar3) { uVar5 = uVar4; } uVar9 = uVar7; if (uVar7 <= uVar6) { uVar9 = uVar6; } if (uVar3 <= uVar9) { uVar4 = uVar5; } local_18 = local_18 + *(int *)(this + 0x37ec) * 2; uVar5 = uVar3; if (uVar3 <= uVar9) { uVar5 = uVar9; } local_1c = local_1c + uVar2 + uVar10 + uVar7 + uVar3; if (local_20 == 0) break; local_20 = local_20 + 1; uVar2 = (uint)*local_18; } iVar11 = -3; if (param_3 <= (uVar5 - uVar4) * 0x20) { local_1c = local_1c >> 4; uVar2 = uVar5 - local_1c; if (uVar5 - local_1c <= param_3) { uVar2 = param_3; } uVar5 = local_1c - uVar4; if (local_1c - uVar4 <= uVar2) { uVar5 = uVar2; } iVar1 = __udivsi3(0x8000,uVar5); while( true ) { *param_1 = iVar1 * (uVar8 - local_1c) + *param_1; param_1[2] = iVar1 * (param_2[2] - local_1c) + param_1[2]; param_1[4] = iVar1 * (param_2[4] - local_1c) + param_1[4]; param_1[6] = iVar1 * (param_2[6] - local_1c) + param_1[6]; param_2 = param_2 + *(int *)(this + 0x37ec) * 2; if (iVar11 == 0) break; param_1 = param_1 + *(int *)(this + 0x37ec) * 2; iVar11 = iVar11 + 1; uVar8 = (uint)*param_2; } } return; } ### FUNC LocalMap7x7_Simple @ 0002d4e8 /* CFunctions::LocalMap7x7_Simple(int*, unsigned short const*, unsigned int) */ void __thiscall CFunctions::LocalMap7x7_Simple(CFunctions *this,int *param_1,ushort *param_2,uint param_3) { int iVar1; uint uVar2; uint uVar3; ushort *puVar4; uint uVar5; int iVar6; uint uVar7; uint uVar8; uint uVar9; uint uVar10; uint uVar11; uint uVar12; int local_20; iVar1 = *(int *)(this + 0x37ec); local_20 = -3; uVar11 = (uint)param_2[1]; uVar2 = (uint)*param_2; uVar8 = 0; puVar4 = param_2; uVar10 = uVar2; while( true ) { uVar12 = uVar2; if (uVar10 <= uVar2) { uVar12 = uVar10; } if (uVar2 <= uVar11) { uVar10 = uVar12; } uVar9 = (uint)puVar4[2]; uVar12 = uVar9; if (uVar10 <= uVar9) { uVar12 = uVar10; } uVar3 = uVar2; if (uVar2 <= uVar11) { uVar3 = uVar11; } if (uVar9 <= uVar3) { uVar10 = uVar12; } uVar12 = (uint)puVar4[4]; uVar11 = uVar12; if (uVar10 <= uVar12) { uVar11 = uVar10; } uVar7 = uVar9; if (uVar9 <= uVar3) { uVar7 = uVar3; } if (uVar12 <= uVar7) { uVar10 = uVar11; } uVar3 = (uint)puVar4[6]; uVar11 = uVar3; if (uVar10 <= uVar3) { uVar11 = uVar10; } uVar5 = uVar12; if (uVar12 <= uVar7) { uVar5 = uVar7; } if (uVar3 <= uVar5) { uVar10 = uVar11; } puVar4 = puVar4 + iVar1 * 2; uVar11 = uVar3; if (uVar3 <= uVar5) { uVar11 = uVar5; } uVar8 = uVar8 + uVar2 + uVar9 + uVar12 + uVar3; if (local_20 == 0) break; local_20 = local_20 + 1; uVar2 = (uint)*puVar4; } iVar6 = 0; if (param_3 <= (uVar11 - uVar10) * 0x20) { uVar8 = uVar8 >> 4; uVar2 = uVar11 - uVar8; if (uVar11 - uVar8 <= param_3) { uVar2 = param_3; } uVar11 = uVar8 - uVar10; if (uVar8 - uVar10 <= uVar2) { uVar11 = uVar2; } iVar6 = __udivsi3(0x8000,uVar11); iVar6 = iVar6 * (param_2[iVar1 * 3 + 3] - uVar8); } *param_1 = iVar6; return; } ### FUNC SetEX @ 0002d5fc /* CFunctions::SetEX(EX, int, int) */ void __thiscall CFunctions::SetEX(CFunctions *this,uint param_2,int param_3,int param_4) { uint uVar1; uint uVar2; uint uVar3; pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0)); if (param_2 - 1 < 4) { *(uint *)(this + 0x3814) = param_2; uVar2 = *(uint *)(this + 0x37f0); uVar1 = (uVar2 - (uVar2 >> (param_2 & 0xff))) - 1; uVar2 = param_4 - (uVar2 >> (param_2 + 1 & 0xff)); if ((int)uVar2 < 1) { uVar2 = 0; } if (uVar2 <= uVar1) { uVar1 = uVar2; } uVar3 = *(uint *)(this + 0x37ec); uVar2 = (uVar3 - (uVar3 >> (param_2 & 0xff))) - 2; uVar3 = param_3 - (uVar3 >> (param_2 + 1 & 0xff)); if ((int)uVar3 < 1) { uVar3 = 0; } if (uVar3 <= uVar2) { uVar2 = uVar3; } uVar2 = uVar2 & 0xfffffffe; } else { uVar2 = 0; *(undefined4 *)(this + 0x3814) = 0; uVar1 = 0; } *(uint *)(this + 0x381c) = uVar1; *(uint *)(this + 0x3818) = uVar2; pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0)); return; } ### FUNC GetEX @ 0002d698 /* CFunctions::GetEX() */ undefined4 __thiscall CFunctions::GetEX(CFunctions *this) { return *(undefined4 *)(this + 0x3814); } ### FUNC _M_put_nowiden @ 0002d6a4 /* std::ostream::_M_put_nowiden(char const*) */ void __thiscall std::ostream::_M_put_nowiden(ostream *this,char *param_1) { size_t sVar1; int iVar2; int iVar3; int *piVar4; size_t sVar5; uint uVar6; ostream *local_20; undefined1 local_1c; int local_18; local_18 = __stack_chk_guard; local_20 = this; local_1c = priv::__init_bostr>(this); if (!(bool)local_1c) goto LAB_0002d7b4; sVar1 = strlen(param_1); iVar2 = *(int *)(*(int *)this + -0xc); if (((int)sVar1 < *(int *)(this + iVar2 + 0x1c)) && (iVar3 = *(int *)(this + iVar2 + 0x1c) - sVar1, iVar3 != 0)) { piVar4 = *(int **)(this + iVar2 + 0x48); if ((*(uint *)(this + iVar2 + 4) & 7) == 1) { sVar5 = (**(code **)(*piVar4 + 0x2c))(piVar4,param_1,sVar1); if (sVar5 == sVar1) { iVar2 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x30)) (*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48), this[*(int *)(*(int *)this + -0xc) + 0x44],iVar3); *(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0; if (iVar2 == iVar3) goto LAB_0002d7b4; goto LAB_0002d792; } } else { iVar2 = (**(code **)(*piVar4 + 0x30)) (piVar4,this[iVar2 + 0x44],iVar3,*(code **)(*piVar4 + 0x30),iVar3,1,1); if (iVar2 == iVar3) { sVar5 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x2c)) (*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48),param_1,sVar1); goto LAB_0002d746; } } *(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0; } else { sVar5 = (**(code **)(**(int **)(this + iVar2 + 0x48) + 0x2c)) (*(int **)(this + iVar2 + 0x48),param_1,sVar1); LAB_0002d746: *(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0; if (sVar5 == sVar1) goto LAB_0002d7b4; } LAB_0002d792: iVar2 = *(int *)(*(int *)this + -0xc); uVar6 = *(uint *)(this + iVar2 + 8) | (uint)(*(int *)(this + iVar2 + 0x48) == 0) | 4; *(uint *)(this + iVar2 + 8) = uVar6; if ((uVar6 & *(uint *)(this + iVar2 + 0x14)) != 0) { /* WARNING: Subroutine does not return */ ios_base::_M_throw_failure(); } LAB_0002d7b4: sentry::~sentry((sentry *)&local_20); if (__stack_chk_guard == local_18) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC ~sentry @ 0002d824 /* std::ostream::sentry::~sentry() */ sentry * __thiscall std::ostream::sentry::~sentry(sentry *this) { int iVar1; if (((int)((uint)*(byte *)((int)*(int **)this + *(int *)(**(int **)this + -0xc) + 5) << 0x1a) < 0) && (iVar1 = FUN_00030e64(), iVar1 == 0)) { flush(*(ostream **)this); } return this; } ### FUNC __init_bostr> @ 0002d84e /* bool std::priv::__init_bostr >(std::ostream&) */ bool std::priv::__init_bostr>(ostream *param_1) { bool bVar1; int iVar2; iVar2 = *(int *)(*(int *)param_1 + -0xc); bVar1 = false; if (*(int *)(param_1 + iVar2 + 8) == 0) { if (*(int *)(param_1 + iVar2 + 0x48) == 0) { *(undefined4 *)(param_1 + iVar2 + 8) = 1; if (((byte)param_1[iVar2 + 0x14] & 1) != 0) { /* WARNING: Subroutine does not return */ ios_base::_M_throw_failure(); } iVar2 = *(int *)(*(int *)param_1 + -0xc); } if (*(ostream **)(param_1 + iVar2 + 0x4c) != (ostream *)0x0) { ostream::flush(*(ostream **)(param_1 + iVar2 + 0x4c)); iVar2 = *(int *)(*(int *)param_1 + -0xc); } bVar1 = true; if (*(int *)(param_1 + iVar2 + 8) != 0) { bVar1 = false; } } return bVar1; } ### FUNC flush @ 0002d8a0 /* std::ostream::flush() */ ostream * __thiscall std::ostream::flush(ostream *this) { int iVar1; uint uVar2; if ((*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) != (int *)0x0) && (iVar1 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x14))(), iVar1 == -1)) { iVar1 = *(int *)(*(int *)this + -0xc); uVar2 = *(uint *)(this + iVar1 + 8); *(uint *)(this + iVar1 + 8) = uVar2 | 1; if ((*(uint *)(this + iVar1 + 0x14) & (uVar2 | 1)) != 0) { /* WARNING: Subroutine does not return */ ios_base::_M_throw_failure(); } } return this; } ### FUNC put @ 0002d8dc /* std::ostream::put(char) */ ostream * __thiscall std::ostream::put(ostream *this,char param_1) { int *piVar1; int iVar2; char *pcVar3; uint uVar4; ostream *local_20; undefined1 local_1c; int local_18; local_18 = __stack_chk_guard; local_20 = this; local_1c = priv::__init_bostr>(this); if ((bool)local_1c) { piVar1 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48); pcVar3 = (char *)piVar1[5]; if (pcVar3 < (char *)piVar1[6]) { piVar1[5] = (int)(pcVar3 + 1); *pcVar3 = param_1; goto LAB_0002d93e; } iVar2 = (**(code **)(*piVar1 + 0x34))(piVar1,(int)param_1); if (iVar2 != -1) goto LAB_0002d93e; } iVar2 = *(int *)(*(int *)this + -0xc); uVar4 = *(uint *)(this + iVar2 + 8); *(uint *)(this + iVar2 + 8) = uVar4 | 1; if ((*(uint *)(this + iVar2 + 0x14) & (uVar4 | 1)) != 0) { /* WARNING: Subroutine does not return */ ios_base::_M_throw_failure(); } LAB_0002d93e: sentry::~sentry((sentry *)&local_20); if (__stack_chk_guard == local_18) { return this; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC wait @ 0002d9a4 /* Condition::wait() */ void __thiscall Condition::wait(Condition *this) { pthread_mutex_lock((pthread_mutex_t *)this); while (this[8] == (Condition)0x0) { pthread_cond_wait((pthread_cond_t *)(this + 4),(pthread_mutex_t *)this); } this[8] = (Condition)0x0; pthread_mutex_unlock((pthread_mutex_t *)this); return; } ### FUNC waitForMsecs @ 0002d9e0 /* Condition::waitForMsecs(int) */ undefined4 __thiscall Condition::waitForMsecs(Condition *this,int param_1) { int extraout_r1; int iVar1; undefined4 uVar2; undefined8 uVar3; undefined4 local_2c; timespec local_28; timeval local_20; int local_18; local_18 = __stack_chk_guard; local_2c = 0; gettimeofday(&local_20,(__timezone_ptr_t)0x0); uVar3 = __aeabi_idivmod(param_1,1000); iVar1 = local_20.tv_sec + (int)uVar3; local_28.tv_nsec = local_20.tv_usec * 1000 + (int)((ulonglong)uVar3 >> 0x20) * 1000000; local_28.tv_sec = iVar1; if (1000000000 < local_28.tv_nsec) { __aeabi_uidivmod(local_28.tv_nsec,1000000000); local_28.tv_sec = iVar1 + 1; local_28.tv_nsec = extraout_r1; } pthread_mutex_lock((pthread_mutex_t *)this); do { if (this[8] != (Condition)0x0) { this[8] = (Condition)0x0; uVar2 = local_2c; break; } iVar1 = pthread_cond_timedwait((pthread_cond_t *)(this + 4),(pthread_mutex_t *)this,&local_28); uVar2 = 1; } while (iVar1 != 0x6e); pthread_mutex_unlock((pthread_mutex_t *)this); if (__stack_chk_guard != local_18) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return uVar2; } ### FUNC MStream @ 0002da98 /* MStream::MStream(unsigned int) */ MStream * __thiscall MStream::MStream(MStream *this,uint param_1) { void *pvVar1; undefined4 *puVar2; *(uint *)this = param_1; *(undefined4 *)(this + 4) = 0; *(undefined4 *)(this + 8) = 0; if (param_1 != 0) { pvVar1 = operator_new__(param_1); *(void **)(this + 4) = pvVar1; *(void **)(this + 8) = pvVar1; return this; } puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "ParamError: Invalid array size.[MStream::MStream]"; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar2,&Error::typeinfo,0); } ### FUNC MStream @ 0002db08 /* MStream::MStream(char const*, unsigned int) */ MStream * __thiscall MStream::MStream(MStream *this,char *param_1,uint param_2) { size_t sVar1; uint uVar2; void *pvVar3; if (param_2 == 0) { sVar1 = strlen(param_1); param_2 = sVar1 + 1; } uVar2 = param_2 + 1; *(uint *)this = uVar2; pvVar3 = operator_new__(uVar2); *(void **)(this + 4) = pvVar3; __aeabi_memcpy(pvVar3,param_1,param_2); *(undefined1 *)((int)pvVar3 + param_2) = 0; *(uint *)(this + 8) = (int)pvVar3 + uVar2; return this; } ### FUNC MStream @ 0002db48 /* MStream::MStream(std::string const&) */ MStream * __thiscall MStream::MStream(MStream *this,string *param_1) { uint uVar1; void *pvVar2; int iVar3; int iVar4; iVar3 = *(int *)(param_1 + 0x14); iVar4 = *(int *)(param_1 + 0x10) - iVar3; uVar1 = iVar4 + 1; *(uint *)this = uVar1; pvVar2 = operator_new__(uVar1); *(void **)(this + 4) = pvVar2; __aeabi_memcpy(pvVar2,iVar3,iVar4); *(undefined1 *)((int)pvVar2 + iVar4) = 0; *(uint *)(this + 8) = (int)pvVar2 + uVar1; return this; } ### FUNC MStream @ 0002db7e /* MStream::MStream(MStream const&) */ void __thiscall MStream::MStream(MStream *this,MStream *param_1) { *(undefined4 *)this = *(undefined4 *)param_1; *(undefined4 *)(this + 4) = *(undefined4 *)(param_1 + 4); *(undefined4 *)(this + 8) = *(undefined4 *)(param_1 + 8); return; } ### FUNC operator= @ 0002db8c /* MStream::TEMPNAMEPLACEHOLDERVALUE(MStream const&) */ void __thiscall MStream::operator=(MStream *this,MStream *param_1) { void *pvVar1; *(undefined4 *)this = *(undefined4 *)param_1; pvVar1 = (void *)0x0; if (*(void **)(this + 4) != (void *)0x0) { operator_delete__(*(void **)(this + 4)); pvVar1 = operator_new__(*(uint *)this); *(void **)(this + 4) = pvVar1; } *(void **)(this + 8) = pvVar1; return; } ### FUNC ~MStream @ 0002dbb0 /* MStream::~MStream() */ MStream * __thiscall MStream::~MStream(MStream *this) { if (*(void **)(this + 4) != (void *)0x0) { operator_delete__(*(void **)(this + 4)); } return this; } ### FUNC Split @ 0002dbc4 /* MStream::Split(char) */ void MStream::Split(char param_1) { vector> *this; byte *pbVar1; int in_r1; uint in_r2; byte *pbVar2; byte *pbVar3; MStream aMStack_30 [4]; void *local_2c; MStream aMStack_24 [4]; void *local_20; int local_18; this = (vector> *)(int)param_1; local_18 = __stack_chk_guard; *(undefined4 *)this = 0; *(undefined4 *)(this + 4) = 0; *(undefined4 *)(this + 8) = 0; pbVar2 = *(byte **)(in_r1 + 4); pbVar1 = *(byte **)(in_r1 + 8); pbVar3 = pbVar2; while (pbVar2 < pbVar1) { if (*pbVar2 == in_r2) { MStream(aMStack_24,(char *)pbVar3,(int)pbVar2 - (int)pbVar3); std::vector>::push_back(this,aMStack_24); if (local_20 != (void *)0x0) { operator_delete__(local_20); } pbVar1 = *(byte **)(in_r1 + 8); pbVar2 = pbVar2 + 1; pbVar3 = pbVar2; } else { pbVar2 = pbVar2 + 1; } } if (1 < (int)pbVar2 - (int)pbVar3) { MStream(aMStack_30,(char *)pbVar3,(int)pbVar2 - (int)pbVar3); std::vector>::push_back(this,aMStack_30); if (local_2c != (void *)0x0) { operator_delete__(local_2c); } } if (__stack_chk_guard != local_18) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return; } ### FUNC push_back @ 0002dc7c /* std::vector >::push_back(MStream const&) */ void __thiscall std::vector>::push_back (vector> *this,MStream *param_1) { MStream *pMVar1; __false_type a_Stack_18 [4]; int local_14; local_14 = __stack_chk_guard; pMVar1 = *(MStream **)(this + 4); if (pMVar1 == *(MStream **)(this + 8)) { _M_insert_overflow_aux(this,pMVar1,param_1,a_Stack_18,1,true); } else { *(undefined4 *)pMVar1 = *(undefined4 *)param_1; *(undefined4 *)(pMVar1 + 4) = *(undefined4 *)(param_1 + 4); *(undefined4 *)(pMVar1 + 8) = *(undefined4 *)(param_1 + 8); *(MStream **)(this + 4) = pMVar1 + 0xc; } if (__stack_chk_guard == local_14) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC ~vector @ 0002dcd8 /* std::vector >::~vector() */ void __thiscall std::vector>::~vector(vector> *this) { int iVar1; int iVar2; iVar1 = *(int *)this; for (iVar2 = *(int *)(this + 4); iVar1 != iVar2; iVar2 = iVar2 + -0xc) { if (*(void **)(iVar2 + -8) != (void *)0x0) { operator_delete__(*(void **)(iVar2 + -8)); } } priv::_Vector_base>::~_Vector_base ((_Vector_base> *)this); return; } ### FUNC Split @ 0002dd10 /* MStream::Split(char const*) */ void MStream::Split(char *param_1) { size_t sVar1; int in_r1; char *pcVar2; char *in_r2; uint uVar3; char *pcVar4; char *pcVar5; MStream aMStack_30 [4]; void *local_2c; MStream aMStack_24 [4]; void *local_20; int local_18; local_18 = __stack_chk_guard; sVar1 = strlen(in_r2); if (sVar1 == 2) { param_1[0] = '\0'; param_1[1] = '\0'; param_1[2] = '\0'; param_1[3] = '\0'; param_1[4] = '\0'; param_1[5] = '\0'; param_1[6] = '\0'; param_1[7] = '\0'; param_1[8] = '\0'; param_1[9] = '\0'; param_1[10] = '\0'; param_1[0xb] = '\0'; pcVar4 = *(char **)(in_r1 + 4); pcVar5 = (char *)(*(int *)(in_r1 + 8) + -1); while (pcVar4 < pcVar5) { pcVar2 = pcVar4; while ((*in_r2 != *pcVar2 || (in_r2[1] != pcVar2[1]))) { pcVar2 = pcVar2 + 1; if (pcVar5 <= pcVar2) goto LAB_0002ddb4; } MStream(aMStack_24,pcVar4,(int)pcVar2 - (int)pcVar4); std::vector>::push_back ((vector> *)param_1,aMStack_24); pcVar4 = pcVar2 + 2; if (local_20 != (void *)0x0) { operator_delete__(local_20); } } LAB_0002ddb4: uVar3 = *(int *)(in_r1 + 8) - (int)pcVar4; if (1 < (int)uVar3) { MStream(aMStack_30,pcVar4,uVar3); std::vector>::push_back ((vector> *)param_1,aMStack_30); if (local_2c != (void *)0x0) { operator_delete__(local_2c); } } } else if (sVar1 == 1) { Split((char)param_1); } else { param_1[0] = '\0'; param_1[1] = '\0'; param_1[2] = '\0'; param_1[3] = '\0'; param_1[4] = '\0'; param_1[5] = '\0'; param_1[6] = '\0'; param_1[7] = '\0'; param_1[8] = '\0'; param_1[9] = '\0'; param_1[10] = '\0'; param_1[0xb] = '\0'; } if (__stack_chk_guard != local_18) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return; } ### FUNC hex2str @ 0002de2c /* hex2str(unsigned long, char*) */ int hex2str(ulong param_1,char *param_2) { char cVar1; char *pcVar2; uint uVar3; uint uVar4; int iVar5; char *pcVar6; char *pcVar7; bool bVar8; uVar3 = 0; do { param_2[uVar3] = "FEDCBA9876543210123456789ABCDEF"[(param_1 & 0xf) + 0xf]; uVar3 = uVar3 + 1; param_1 = param_1 >> 4; } while (param_1 != 0); pcVar2 = param_2 + uVar3; pcVar7 = pcVar2 + 1; if (uVar3 < 8) { iVar5 = 0; do { param_2[uVar3 - iVar5] = '0'; uVar4 = iVar5 + 7; iVar5 = iVar5 + -1; } while (uVar4 != uVar3); pcVar7 = pcVar2 + -uVar3 + 9; pcVar2 = pcVar2 + -uVar3 + 8; } *pcVar2 = 'x'; *pcVar7 = '0'; if (param_2 < pcVar2 + 2) { pcVar7 = pcVar2 + 1; pcVar6 = param_2; do { cVar1 = *pcVar6; *pcVar6 = *pcVar7; *pcVar7 = cVar1; pcVar6 = pcVar6 + 1; bVar8 = pcVar6 < pcVar7; pcVar7 = pcVar7 + -1; } while (bVar8); } return (int)(pcVar2 + 2) - (int)param_2; } ### FUNC Available @ 0002ded0 /* MStream::Available() const */ int __thiscall MStream::Available(MStream *this) { return (*(int *)this - *(int *)(this + 8)) + *(int *)(this + 4); } ### FUNC Fmt @ 0002dedc /* MStream::Fmt(char const*, ...) */ void MStream::Fmt(char *param_1,...) { int iVar1; int iVar2; char *in_r1; undefined4 in_r2; undefined4 in_r3; int *piVar3; undefined4 local_8; undefined4 local_4; iVar1 = __stack_chk_guard; piVar3 = (int *)(param_1 + 8); local_8 = in_r2; local_4 = in_r3; iVar2 = vsnprintf((char *)*piVar3,(*(int *)param_1 - *piVar3) + *(int *)(param_1 + 4),in_r1, &local_8); *piVar3 = *piVar3 + iVar2; if (__stack_chk_guard == iVar1) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC Get @ 0002df38 /* MStream::Get() */ undefined4 __thiscall MStream::Get(MStream *this) { return *(undefined4 *)(this + 4); } ### FUNC Get @ 0002df3c /* MStream::Get() const */ undefined4 __thiscall MStream::Get(MStream *this) { return *(undefined4 *)(this + 4); } ### FUNC Write @ 0002df40 /* MStream::Write(OFStream const&) const */ void __thiscall MStream::Write(MStream *this,OFStream *param_1) { OFStream::Write(param_1,*(char **)(this + 4)); return; } ### FUNC Write @ 0002df50 /* MStream::Write(__sFILE*) const */ bool __thiscall MStream::Write(MStream *this,__sFILE *param_1) { int iVar1; iVar1 = fputs(*(char **)(this + 4),(FILE *)param_1); return iVar1 == 0; } ### FUNC Puts @ 0002df68 /* MStream::Puts(char const*, unsigned int) */ void __thiscall MStream::Puts(MStream *this,char *param_1,uint param_2) { int iVar1; MStream *pMVar2; pMVar2 = this + 8; if (param_2 + 1 < (uint)((*(int *)this - *(int *)pMVar2) + *(int *)(this + 4))) { __aeabi_memcpy(*(int *)pMVar2,param_1,param_2); iVar1 = *(int *)pMVar2; *(uint *)pMVar2 = iVar1 + param_2; *(undefined1 *)(iVar1 + param_2) = 0; } return; } ### FUNC Puts @ 0002df92 /* MStream::Puts(char const*) */ void __thiscall MStream::Puts(MStream *this,char *param_1) { size_t sVar1; int iVar2; MStream *pMVar3; sVar1 = strlen(param_1); pMVar3 = this + 8; if (sVar1 + 1 < (uint)((*(int *)this - *(int *)pMVar3) + *(int *)(this + 4))) { __aeabi_memcpy(*(int *)pMVar3,param_1,sVar1); iVar2 = *(int *)pMVar3; *(size_t *)pMVar3 = iVar2 + sVar1; *(undefined1 *)(iVar2 + sVar1) = 0; } return; } ### FUNC Reset @ 0002dfca /* MStream::Reset() */ void __thiscall MStream::Reset(MStream *this) { *(undefined4 *)(this + 8) = *(undefined4 *)(this + 4); return; } ### FUNC Empty @ 0002dfd0 /* MStream::Empty() const */ bool __thiscall MStream::Empty(MStream *this) { return *(int *)(this + 8) == *(int *)(this + 4); } ### FUNC operator<< @ 0002dfe0 /* MStream::TEMPNAMEPLACEHOLDERVALUE(char const*) */ MStream * __thiscall MStream::operator<<(MStream *this,char *param_1) { Puts(this,param_1); return this; } ### FUNC operator<< @ 0002dfee /* MStream::TEMPNAMEPLACEHOLDERVALUE(char) */ void __thiscall MStream::operator<<(MStream *this,char param_1) { int iVar1; MStream *pMVar2; pMVar2 = this + 8; if (2 < (uint)((*(int *)this - (int)*(char **)pMVar2) + *(int *)(this + 4))) { **(char **)pMVar2 = param_1; iVar1 = *(int *)pMVar2; *(int *)pMVar2 = iVar1 + 1; *(undefined1 *)(iVar1 + 1) = 0; } return; } ### FUNC ~_Vector_base @ 0002e00e /* std::priv::_Vector_base >::~_Vector_base() */ _Vector_base> * __thiscall std::priv::_Vector_base>::~_Vector_base (_Vector_base> *this) { void *pvVar1; pvVar1 = *(void **)this; if (pvVar1 != (void *)0x0) { if ((uint)(*(int *)(this + 8) - (int)pvVar1) < 0x81) { __node_alloc::_M_deallocate(pvVar1,*(int *)(this + 8) - (int)pvVar1); } else { operator_delete(pvVar1); } } return this; } ### FUNC _M_insert_overflow_aux @ 0002e030 /* std::vector >::_M_insert_overflow_aux(MStream*, MStream const&, std::__false_type const&, unsigned int, bool) */ void __thiscall std::vector>::_M_insert_overflow_aux (vector> *this,MStream *param_1,MStream *param_2, __false_type *param_3,uint param_4,bool param_5) { undefined4 *puVar1; int iVar2; undefined4 *puVar3; undefined4 *puVar4; undefined3 in_stack_00000005; uint local_1c; int local_18; local_18 = __stack_chk_guard; local_1c = _M_compute_next_size(this,param_4); puVar1 = (undefined4 *) allocator::_M_allocate((allocator *)(this + 8),local_1c,&local_1c); puVar4 = *(undefined4 **)this; puVar3 = puVar1; if (0 < (int)param_1 - (int)puVar4) { iVar2 = __udivsi3((int)param_1 - (int)puVar4,0xc); iVar2 = iVar2 + 1; do { *puVar3 = *puVar4; puVar3[1] = puVar4[1]; puVar3[2] = puVar4[2]; puVar3 = puVar3 + 3; puVar4 = puVar4 + 3; iVar2 = iVar2 + -1; } while (1 < iVar2); } if (param_4 == 1) { *puVar3 = *(undefined4 *)param_2; puVar3[1] = *(undefined4 *)(param_2 + 4); puVar3[2] = *(undefined4 *)(param_2 + 8); puVar4 = puVar3 + 3; } else { puVar4 = puVar3 + param_4 * 3; if (0 < (int)(param_4 * 0xc)) { iVar2 = param_4 + 1; do { *puVar3 = *(undefined4 *)param_2; puVar3[1] = *(undefined4 *)(param_2 + 4); puVar3[2] = *(undefined4 *)(param_2 + 8); puVar3 = puVar3 + 3; iVar2 = iVar2 + -1; } while (1 < iVar2); } } if ((_param_5 == 0) && (0 < *(int *)(this + 4) - (int)param_1)) { iVar2 = __udivsi3(*(int *)(this + 4) - (int)param_1,0xc); iVar2 = iVar2 + 1; do { *puVar4 = *(undefined4 *)param_1; puVar4[1] = *(undefined4 *)(param_1 + 4); puVar4[2] = *(undefined4 *)(param_1 + 8); puVar4 = puVar4 + 3; param_1 = param_1 + 0xc; iVar2 = iVar2 + -1; } while (1 < iVar2); } _M_clear_after_move(this); *(undefined4 **)this = puVar1; *(undefined4 **)(this + 4) = puVar4; *(undefined4 **)(this + 8) = puVar1 + local_1c * 3; if (__stack_chk_guard != local_18) { /* WARNING: Subroutine does not return */ __stack_chk_fail(); } return; } ### FUNC _M_compute_next_size @ 0002e138 /* std::vector >::_M_compute_next_size(unsigned int) */ uint __thiscall std::vector>::_M_compute_next_size (vector> *this,uint param_1) { int iVar1; uint uVar2; uint uVar3; uint uVar4; iVar1 = *(int *)(this + 4) - *(int *)this >> 2; uVar4 = iVar1 * -0x55555555; if (param_1 <= iVar1 * 0x55555555 + 0x15555555U) { uVar2 = uVar4; if (uVar4 < param_1 || uVar4 - param_1 == 0) { uVar2 = param_1; } uVar4 = uVar2 + uVar4; uVar3 = uVar4; if (uVar4 < uVar2) { uVar3 = 0x15555555; } uVar2 = 0x15555555; if (uVar4 < 0x15555556) { uVar2 = uVar3; } return uVar2; } /* WARNING: Subroutine does not return */ __stl_throw_length_error("vector"); } ### FUNC _M_clear_after_move @ 0002e184 /* std::vector >::_M_clear_after_move() */ void __thiscall std::vector>::_M_clear_after_move (vector> *this) { void *pvVar1; void *pvVar2; pvVar1 = *(void **)this; pvVar2 = *(void **)(this + 4); if (pvVar1 != pvVar2) { do { if (*(void **)((int)pvVar2 + -8) != (void *)0x0) { operator_delete__(*(void **)((int)pvVar2 + -8)); } pvVar2 = (void *)((int)pvVar2 + -0xc); } while (pvVar2 != pvVar1); pvVar1 = *(void **)this; } if (pvVar1 != (void *)0x0) { if ((uint)(*(int *)(this + 8) - (int)pvVar1) < 0x81) { __node_alloc::_M_deallocate(pvVar1,*(int *)(this + 8) - (int)pvVar1); } else { operator_delete(pvVar1); } } return; } ### FUNC _M_allocate @ 0002e1d4 /* std::allocator::_M_allocate(unsigned int, unsigned int&) */ undefined4 __thiscall std::allocator::_M_allocate(allocator *this,uint param_1,uint *param_2) { uint uVar1; undefined4 uVar2; uint local_1c; int local_18; local_18 = __stack_chk_guard; if (0x15555555 < param_1) { FUN_00030824(4); uVar2 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } uVar2 = 0; if (param_1 != 0) { local_1c = param_1 * 0xc; uVar2 = __node_alloc::allocate(&local_1c); uVar1 = __udivsi3(local_1c,0xc); *param_2 = uVar1; } if (__stack_chk_guard == local_18) { return uVar2; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC allocate @ 0002e250 /* std::__node_alloc::allocate(unsigned int&) */ void std::__node_alloc::allocate(uint *param_1) { if (0x80 < *param_1) { operator_new(*param_1); return; } _M_allocate(param_1); return; } ### FUNC Logging @ 0002e268 /* mag::Logging::Logging(int) */ Logging * __thiscall mag::Logging::Logging(Logging *this,int param_1) { tm *ptVar1; time_t tStack_1c; int local_18; local_18 = __stack_chk_guard; MStream::MStream((MStream *)this,0x400); time(&tStack_1c); ptVar1 = localtime(&tStack_1c); MStream::Fmt((char *)this,"%d.%02d.%02d %02d:%02d:%02d %s",ptVar1->tm_year + 0x76c, ptVar1->tm_mon + 1,ptVar1->tm_mday,ptVar1->tm_hour,ptVar1->tm_min,ptVar1->tm_sec, (&PTR_s_TRACE___00068c58)[param_1]); if (__stack_chk_guard == local_18) { return this; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC ~Logging @ 0002e31c /* mag::Logging::~Logging() */ void __thiscall mag::Logging::~Logging(Logging *this) { MStream::operator<<((MStream *)this,"\n"); MStream::Write((MStream *)this,(__sFILE *)PTR___sF_0006b898); fflush((FILE *)PTR___sF_0006b898); MStream::~MStream((MStream *)this); return; } ### FUNC Setfp @ 0002e364 /* mag::Logging::Setfp(__sFILE*) */ void mag::Logging::Setfp(__sFILE *param_1) { PTR___sF_0006b898 = param_1; return; } ### FUNC Setfp @ 0002e370 /* mag::Logging::Setfp(OFStream&) */ void mag::Logging::Setfp(OFStream *param_1) { PTR___sF_0006b898 = (pointer_____offset_0x54___)FStream::GetRaw((FStream *)param_1); return; } ### FUNC CSmoother @ 0002e384 /* CSmoother::CSmoother() */ CSmoother * __thiscall CSmoother::CSmoother(CSmoother *this) { *(undefined ***)this = &PTR__CSmoother_00068c78; __aeabi_memclr4(this + 4,0x24); return this; } ### FUNC ~CSmoother @ 0002e3a4 /* CSmoother::~CSmoother() */ CSmoother * __thiscall CSmoother::~CSmoother(CSmoother *this) { *(undefined ***)this = &PTR__CSmoother_00068c78; if (*(void **)(this + 4) != (void *)0x0) { operator_delete__(*(void **)(this + 4)); *(undefined4 *)(this + 4) = 0; } *(undefined4 *)(this + 8) = 0; if (*(void **)(this + 0xc) != (void *)0x0) { operator_delete__(*(void **)(this + 0xc)); *(undefined4 *)(this + 0xc) = 0; } if (*(void **)(this + 0x10) != (void *)0x0) { operator_delete__(*(void **)(this + 0x10)); *(undefined4 *)(this + 0x10) = 0; } return this; } ### FUNC ~CSmoother @ 0002e3e8 /* CSmoother::~CSmoother() */ void __thiscall CSmoother::~CSmoother(CSmoother *this) { void *pvVar1; pvVar1 = (void *)~CSmoother(this); operator_delete(pvVar1); return; } ### FUNC Reset @ 0002e3f6 /* CSmoother::Reset(unsigned int, unsigned int, int, unsigned int) */ undefined4 __thiscall CSmoother::Reset(CSmoother *this,uint param_1,uint param_2,int param_3,uint param_4) { void *pvVar1; uint uVar2; uint uVar3; int iVar4; undefined4 uVar5; undefined8 uVar6; uVar5 = 0; *(undefined4 *)(this + 0x24) = 0; if (*(void **)(this + 4) != (void *)0x0) { operator_delete__(*(void **)(this + 4)); *(undefined4 *)(this + 4) = 0; } *(undefined4 *)(this + 8) = 0; if (*(void **)(this + 0xc) != (void *)0x0) { operator_delete__(*(void **)(this + 0xc)); *(undefined4 *)(this + 0xc) = 0; } if (*(void **)(this + 0x10) != (void *)0x0) { operator_delete__(*(void **)(this + 0x10)); *(undefined4 *)(this + 0x10) = 0; } if ((param_1 != 0) && (param_2 != 0)) { *(undefined4 *)(this + 0x18) = 0; *(uint *)(this + 0x1c) = param_1; *(uint *)(this + 0x20) = param_2; uVar3 = (param_4 + 1 >> 1) + param_1 * param_2; uVar2 = uVar3 * 2; if (uVar2 < uVar3) { uVar2 = 0xffffffff; } pvVar1 = operator_new__(uVar2); iVar4 = (int)pvVar1 + (param_4 & 0xfffffffe); *(void **)(this + 4) = pvVar1; *(int *)(this + 8) = iVar4; *(int *)(this + 0x14) = iVar4; uVar6 = __muldi3(param_1,0,4,(int)param_1 >> 0x1f); uVar2 = 0xffffffff; if ((int)((ulonglong)uVar6 >> 0x20) == 0) { uVar2 = (uint)uVar6; } pvVar1 = operator_new__(uVar2); *(void **)(this + 0xc) = pvVar1; __aeabi_memclr4(pvVar1,param_1 << 2); if (param_3 != 0) { uVar2 = param_1 * 2; if (param_1 * 2 < param_1) { uVar2 = 0xffffffff; } pvVar1 = operator_new__(uVar2); *(void **)(this + 0x10) = pvVar1; } uVar5 = 1; *(undefined4 *)(this + 0x24) = 1; } return uVar5; } ### FUNC PushFrameSum @ 0002e4b6 /* CSmoother::PushFrameSum(unsigned short const*) */ undefined4 __thiscall CSmoother::PushFrameSum(CSmoother *this,ushort *param_1) { undefined4 uVar1; int iVar2; uint uVar3; int extraout_r1; int *piVar4; ushort *puVar5; ushort *puVar6; uint uVar7; uVar1 = 0; if ((*(int *)(this + 0x24) != 0) && (piVar4 = *(int **)(this + 0xc), piVar4 != (int *)0x0)) { iVar2 = *(int *)(this + 0x18); *(uint *)(this + 0x18) = iVar2 + 1U; uVar3 = *(uint *)(this + 0x1c) >> 2; if (*(uint *)(this + 0x20) < iVar2 + 1U) { if (uVar3 != 0) { iVar2 = -uVar3; puVar5 = *(ushort **)(this + 0x14); puVar6 = param_1; do { *piVar4 = ((uint)*puVar6 - (uint)*puVar5) + *piVar4; piVar4[1] = ((uint)puVar6[1] - (uint)puVar5[1]) + piVar4[1]; piVar4[2] = ((uint)puVar6[2] - (uint)puVar5[2]) + piVar4[2]; piVar4[3] = ((uint)puVar6[3] - (uint)puVar5[3]) + piVar4[3]; piVar4 = piVar4 + 4; puVar5 = puVar5 + 4; puVar6 = puVar6 + 4; iVar2 = iVar2 + 1; } while (iVar2 != 0); } } else if (uVar3 != 0) { iVar2 = -uVar3; puVar6 = param_1; do { *piVar4 = *piVar4 + (uint)*puVar6; piVar4[1] = piVar4[1] + (uint)puVar6[1]; piVar4[2] = piVar4[2] + (uint)puVar6[2]; piVar4[3] = piVar4[3] + (uint)puVar6[3]; piVar4 = piVar4 + 4; puVar6 = puVar6 + 4; iVar2 = iVar2 + 1; } while (iVar2 != 0); } __aeabi_memcpy(*(undefined4 *)(this + 0x14),param_1,*(int *)(this + 0x1c) << 1); uVar3 = *(uint *)(this + 0x18); uVar7 = *(uint *)(this + 0x20); __aeabi_uidivmod(uVar3,uVar7); if (extraout_r1 == 0) { iVar2 = *(int *)(this + 8); } else { iVar2 = *(int *)(this + 0x14) + *(int *)(this + 0x1c) * 2; } *(int *)(this + 0x14) = iVar2; uVar1 = 1; if (uVar3 < uVar7) { uVar1 = 0; } } return uVar1; } ### FUNC PushFrameAve @ 0002e58e /* CSmoother::PushFrameAve(unsigned short*, unsigned int) */ undefined4 __thiscall CSmoother::PushFrameAve(CSmoother *this,ushort *param_1,uint param_2) { ushort uVar1; ushort uVar2; undefined4 uVar3; int iVar4; int extraout_r1; ushort *puVar5; uint uVar6; uint uVar7; uVar3 = 0; if (*(int *)(this + 0x24) != 0) { uVar6 = *(int *)(this + 0x18) + 1; *(uint *)(this + 0x18) = uVar6; if (*(uint *)(this + 0x20) < uVar6) { if (*(uint *)(this + 0x20) != 1) { return 0; } iVar4 = *(int *)(this + 0x1c); uVar7 = 1; if (iVar4 != 0) { puVar5 = *(ushort **)(this + 8); do { uVar1 = *puVar5; uVar2 = *param_1; *puVar5 = uVar2; uVar7 = (uint)uVar2 - (uint)uVar1; puVar5 = puVar5 + 1; if ((((int)uVar7 <= (int)param_2) && (-param_2 == uVar7 || (int)-uVar7 < (int)param_2)) && (uVar7 != 0)) { *param_1 = uVar2 - (short)(uVar7 >> 1); } iVar4 = iVar4 + -1; param_1 = param_1 + 1; } while (iVar4 != 0); uVar7 = 1; } } else { __aeabi_memcpy(*(undefined4 *)(this + 0x14),param_1,*(int *)(this + 0x1c) << 1); uVar7 = *(uint *)(this + 0x20); uVar6 = *(uint *)(this + 0x18); } __aeabi_uidivmod(uVar6,uVar7); if (extraout_r1 == 0) { iVar4 = *(int *)(this + 8); } else { iVar4 = *(int *)(this + 0x14) + *(int *)(this + 0x1c) * 2; } *(int *)(this + 0x14) = iVar4; uVar3 = 1; if (uVar6 < uVar7) { uVar3 = 0; } } return uVar3; } ### FUNC Restart @ 0002e622 /* CSmoother::Restart() */ void __thiscall CSmoother::Restart(CSmoother *this) { if (*(int *)(this + 0x24) != 0) { *(undefined4 *)(this + 0x14) = *(undefined4 *)(this + 8); *(undefined4 *)(this + 0x18) = 0; __aeabi_memclr4(*(undefined4 *)(this + 0xc),*(int *)(this + 0x1c) << 2); } return; } ### FUNC GetSTDFrame @ 0002e644 /* CSmoother::GetSTDFrame() */ int __thiscall CSmoother::GetSTDFrame(CSmoother *this) { undefined2 uVar1; int iVar2; uint uVar3; undefined4 uVar4; uint uVar5; ushort *puVar6; int iVar7; uint uVar8; uint uVar9; undefined8 uVar10; undefined8 uVar11; undefined8 uVar12; undefined4 in_stack_ffffffc0; uint uVar13; uint uVar14; iVar2 = 0; if ((((*(int *)(this + 0x24) != 0) && (*(int *)(this + 0xc) != 0)) && (iVar7 = *(int *)(this + 0x10), iVar7 != 0)) && (uVar8 = *(uint *)(this + 0x20), uVar8 <= *(uint *)(this + 0x18))) { if (uVar8 < 2) { __aeabi_memclr(iVar7,*(int *)(this + 0x1c) << 1); iVar2 = *(int *)(this + 0x10); } else { uVar10 = __floatunsidf((uVar8 - 1) * uVar8 * uVar8); uVar13 = 0; uVar10 = __divdf3(0,0x3ff00000,(int)uVar10,(int)((ulonglong)uVar10 >> 0x20)); uVar3 = *(uint *)(this + 0x1c); iVar2 = iVar7; uVar5 = uVar13; if (uVar3 != 0) { while( true ) { uVar14 = uVar5; if (uVar8 != 0) { puVar6 = (ushort *)(*(int *)(this + 8) + uVar13 * 2); iVar2 = *(int *)(*(int *)(this + 0xc) + uVar13 * 4); uVar12 = 0; uVar9 = 0; do { uVar11 = __floatsidf(uVar8 * *puVar6 - iVar2); uVar4 = (undefined4)((ulonglong)uVar11 >> 0x20); uVar11 = __muldf3((int)uVar11,uVar4,(int)uVar11,uVar4); uVar12 = __adddf3((int)uVar12,(int)((ulonglong)uVar12 >> 0x20),(int)uVar11, (int)((ulonglong)uVar11 >> 0x20)); uVar5 = (uint)uVar12; puVar6 = puVar6 + uVar3; uVar9 = uVar9 + 1; } while (uVar9 < uVar8); } __muldf3((int)uVar10,(int)((ulonglong)uVar10 >> 0x20),uVar5); sqrt((double)CONCAT44(uVar14,in_stack_ffffffc0)); uVar1 = __fixunsdfsi(); iVar2 = *(int *)(this + 0x10); *(undefined2 *)(iVar2 + uVar13 * 2) = uVar1; uVar13 = uVar13 + 1; uVar3 = *(uint *)(this + 0x1c); if (uVar3 <= uVar13) break; uVar8 = *(uint *)(this + 0x20); uVar5 = uVar14; } } } } return iVar2; } ### FUNC FStream @ 0002e730 /* FStream::FStream() */ void __thiscall FStream::FStream(FStream *this) { *(undefined ***)this = &PTR__IFStream_00068c90; return; } ### FUNC ~IFStream @ 0002e740 /* IFStream::~IFStream() */ IFStream * __thiscall IFStream::~IFStream(IFStream *this) { *(undefined ***)this = &PTR__IFStream_00068c90; if (*(FILE **)(this + 4) != (FILE *)0x0) { fclose(*(FILE **)(this + 4)); } return this; } ### FUNC ~FStream @ 0002e764 /* FStream::~FStream() */ void __thiscall FStream::~FStream(FStream *this) { code *pcVar1; /* WARNING: Does not return */ pcVar1 = (code *)software_udf(0xfe,0x2e764); (*pcVar1)(); } ### FUNC GetRaw @ 0002e766 /* FStream::GetRaw() const */ undefined4 __thiscall FStream::GetRaw(FStream *this) { return *(undefined4 *)(this + 4); } ### FUNC IsEof @ 0002e76a /* FStream::IsEof() const */ bool __thiscall FStream::IsEof(FStream *this) { int iVar1; iVar1 = feof(*(FILE **)(this + 4)); return iVar1 != 0; } ### FUNC ReadLine @ 0002e780 /* FStream::ReadLine(char*, int) const */ undefined4 __thiscall FStream::ReadLine(FStream *this,char *param_1,int param_2) { int iVar1; undefined4 uVar2; char *pcVar3; iVar1 = feof(*(FILE **)(this + 4)); uVar2 = 0; if (iVar1 == 0) { pcVar3 = fgets(param_1,param_2,*(FILE **)(this + 4)); uVar2 = 1; if (pcVar3 == (char *)0x0) { uVar2 = 0; } } return uVar2; } ### FUNC Read @ 0002e7b2 /* FStream::Read(void*, unsigned int, unsigned int) const */ int __thiscall FStream::Read(FStream *this,void *param_1,uint param_2,uint param_3) { size_t sVar1; sVar1 = fread(param_1,param_2,param_3,*(FILE **)(this + 4)); return param_2 * sVar1; } ### FUNC GetCurrentPos @ 0002e7ca /* FStream::GetCurrentPos() const */ void __thiscall FStream::GetCurrentPos(FStream *this) { ftell(*(FILE **)(this + 4)); return; } ### FUNC Seek @ 0002e7d6 /* FStream::Seek(long, io::seek) const */ bool __thiscall FStream::Seek(FStream *this,long param_1,int param_3) { int iVar1; iVar1 = fseek(*(FILE **)(this + 4),param_1,param_3); return iVar1 == 0; } ### FUNC OFStream @ 0002e7f0 /* OFStream::OFStream(char const*, bool) */ OFStream * __thiscall OFStream::OFStream(OFStream *this,char *param_1,bool param_2) { FILE *pFVar1; undefined4 *puVar2; *(undefined ***)this = &PTR__IFStream_00068ca4; if (param_2) { pFVar1 = fopen(param_1,"rb+"); *(FILE **)(this + 4) = pFVar1; if (pFVar1 == (FILE *)0x0) { puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "IOError: open file failed1.[IFStream::IFStream]"; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar2,&Error::typeinfo,0); } } else { pFVar1 = fopen(param_1,"wb"); *(FILE **)(this + 4) = pFVar1; if (pFVar1 == (FILE *)0x0) { puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "IOError: open file failed2.[IFStream::IFStream]"; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar2,&Error::typeinfo,0); } } return this; } ### FUNC ~OFStream @ 0002e8ec /* OFStream::~OFStream() */ void __thiscall OFStream::~OFStream(OFStream *this) { *(undefined ***)this = &PTR__IFStream_00068c90; if (*(FILE **)(this + 4) != (FILE *)0x0) { fclose(*(FILE **)(this + 4)); } operator_delete(this); return; } ### FUNC Flush @ 0002e914 /* OFStream::Flush() const */ bool __thiscall OFStream::Flush(OFStream *this) { int iVar1; iVar1 = fflush(*(FILE **)(this + 4)); return iVar1 == 0; } ### FUNC Write @ 0002e92c /* OFStream::Write(char const*) const */ bool __thiscall OFStream::Write(OFStream *this,char *param_1) { int iVar1; iVar1 = fputs(param_1,*(FILE **)(this + 4)); return -1 < iVar1; } ### FUNC Write @ 0002e948 /* OFStream::Write(void const*, unsigned int, unsigned int) */ bool __thiscall OFStream::Write(OFStream *this,void *param_1,uint param_2,uint param_3) { size_t sVar1; sVar1 = fwrite(param_1,param_2,param_3,*(FILE **)(this + 4)); return sVar1 != 0; } ### FUNC WriteLine @ 0002e968 /* OFStream::WriteLine(char const*) const */ undefined4 __thiscall OFStream::WriteLine(OFStream *this,char *param_1) { int iVar1; iVar1 = fputs(param_1,*(FILE **)(this + 4)); if (-1 < iVar1) { iVar1 = fputs("\n",*(FILE **)(this + 4)); if (-1 < iVar1) { return 1; } } return 0; } ### FUNC GetLength @ 0002e998 /* OFStream::GetLength() const */ long __thiscall OFStream::GetLength(OFStream *this) { int iVar1; long __off; long lVar2; fflush(*(FILE **)(this + 4)); iVar1 = feof(*(FILE **)(this + 4)); __off = ftell(*(FILE **)(this + 4)); if (iVar1 == 0) { fseek(*(FILE **)(this + 4),0,2); lVar2 = ftell(*(FILE **)(this + 4)); fseek(*(FILE **)(this + 4),__off,0); __off = lVar2; } return __off; } ### FUNC IFStream @ 0002e9e4 /* IFStream::IFStream(char const*) */ IFStream * __thiscall IFStream::IFStream(IFStream *this,char *param_1) { FILE *__stream; long lVar1; undefined4 *puVar2; *(undefined4 *)(this + 8) = 0; *(undefined ***)this = &PTR__IFStream_00068cb8; __stream = fopen(param_1,"rb"); *(FILE **)(this + 4) = __stream; if (__stream != (FILE *)0x0) { fseek(__stream,0,2); lVar1 = ftell(*(FILE **)(this + 4)); *(long *)(this + 8) = lVar1; fseek(*(FILE **)(this + 4),0,0); return this; } puVar2 = (undefined4 *)FUN_00030824(4); *puVar2 = "IOError: open file failed.[IFStream::IFStream]"; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar2,&Error::typeinfo,0); } ### FUNC ~IFStream @ 0002ea9c /* IFStream::~IFStream() */ void __thiscall IFStream::~IFStream(IFStream *this) { *(undefined ***)this = &PTR__IFStream_00068c90; if (*(FILE **)(this + 4) != (FILE *)0x0) { fclose(*(FILE **)(this + 4)); } operator_delete(this); return; } ### FUNC GetLength @ 0002eac4 /* IFStream::GetLength() const */ undefined4 __thiscall IFStream::GetLength(IFStream *this) { return *(undefined4 *)(this + 8); } ### FUNC Controller @ 0002eac8 /* Controller::Controller() */ Controller * __thiscall Controller::Controller(Controller *this) { int iVar1; int iVar2; iVar1 = __stack_chk_guard; iVar2 = 0; do { *(undefined4 *)(this + iVar2 + 0x84) = 0; *(undefined4 *)(this + iVar2 + 0x80) = 0; *(undefined4 *)(this + iVar2 + 0x78) = 0; *(undefined4 *)(this + iVar2 + 0x7c) = 0; iVar2 = iVar2 + 0x6c; } while (iVar2 != 0x438); MutexLock::MutexLock((MutexLock *)(this + 0x4a0)); *(undefined4 *)(this + 0x494) = 0; *(undefined4 *)(this + 0x490) = 0; *(undefined4 *)(this + 0x4a4) = 0; *(undefined4 *)(this + 0x48c) = 0; *(undefined4 *)this = 4; *(undefined4 *)(this + 4) = 3; *(undefined4 *)(this + 8) = 0x1194; *(undefined4 *)(this + 0xc) = 300; *(undefined4 *)(this + 0x14) = 5000; *(undefined4 *)(this + 0x18) = 2; *(undefined4 *)(this + 0x10) = 0; *(undefined4 *)(this + 0x1c) = 1; *(undefined4 *)(this + 0x20) = 0; *(undefined4 *)(this + 0x24) = 0; *(undefined4 *)(this + 0x28) = 0x180; *(undefined4 *)(this + 0x2c) = 0x120; *(undefined4 *)(this + 0x30) = 0x180; *(undefined4 *)(this + 0x34) = 0x120; *(undefined4 *)(this + 0x38) = 0x10; *(undefined4 *)(this + 0x3c) = 0x50; *(undefined4 *)(this + 0x40) = 8; *(undefined4 *)(this + 0x44) = 1; *(undefined4 *)(this + 0x48) = 1; *(undefined4 *)(this + 0x4c) = 5; __aeabi_memclr4(0x6b92c,0x54); theFunc._128_4_ = 0x41a00000; theFunc._132_4_ = 0x3ecccccd; theFunc._136_4_ = 0x41a00000; theFunc._140_4_ = 0; theFunc._144_4_ = 0; theFunc._156_4_ = 0x3f7f4b1f; theFunc._160_4_ = 0x3f800000; theFunc._148_4_ = 0x3dcccccd; theFunc._152_4_ = 0x399d4952; theFunc._4_4_ = 0; theFunc._52_4_ = 500; theFunc._12_4_ = 0; theFunc._16_4_ = 20000; theFunc._20_4_ = (int)"_ZNKSt6localeeqERKS_" + 2; theFunc._24_4_ = 0; theFunc._28_4_ = 0xff; theFunc._32_4_ = 5; theFunc._88_4_ = 1; theFunc._96_4_ = 1; theFunc._44_4_ = 0; theFunc._48_4_ = 0; theFunc._8_4_ = 0; theFunc._120_4_ = 0x41a00000; theFunc._124_4_ = 0x3f800000; theFunc._80_4_ = 1; *(undefined4 *)(this + 0x488) = 0; AddProbe(this,0,1,1,0x3f800000,0,2,3000000,3500000); AddProbe(this,0,1,1,theFunc._124_4_,0x1000000,0,3000000,3500000); AddProbe(this,0,1,0x19,theFunc._124_4_,0x2000000,1,3000000,3500000); if (__stack_chk_guard == iVar1) { return this; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC AddProbe @ 0002ed04 /* Controller::AddProbe(unsigned int, unsigned int, unsigned int, float, unsigned int, int, int, int, int, int, ProbeType, tagPOINT const*, unsigned int, tagRECT) */ undefined4 Controller::AddProbe (Controller *param_1,undefined4 param_2,undefined4 param_3,int param_5,undefined4 param_6, undefined4 param_7,undefined4 param_8,undefined4 param_9,undefined4 param_10, undefined4 param_10_00,int param_11,undefined4 param_12,int param_13,uint param_14, undefined4 param_15,undefined4 param_16,undefined4 param_17,undefined4 param_18) { pthread_mutex_t *__mutex; uint uVar1; int iVar2; Controller *pCVar3; uint extraout_r1; uint uVar4; undefined4 uVar5; __mutex = (pthread_mutex_t *)(param_1 + 0x4a0); uVar5 = *(undefined4 *)(param_1 + 0x28); pthread_mutex_lock(__mutex); uVar1 = __udivsi3(param_2,uVar5); pCVar3 = param_1 + 0x488; uVar4 = *(uint *)(param_1 + 0x488); if ((((uVar4 < 10) && (__aeabi_uidivmod(param_2,uVar5), extraout_r1 < *(uint *)(param_1 + 0x28))) && (param_5 != 0)) && (uVar1 < *(uint *)(param_1 + 0x2c))) { __aeabi_memclr4(param_1 + uVar4 * 0x6c + 0x50); *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x50) = param_12; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x54) = param_2; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x58) = param_3; if (2 < param_14) { param_14 = 3; } *(uint *)(param_1 + *(int *)pCVar3 * 0x6c + 0x74) = param_14; iVar2 = *(int *)pCVar3; if ((param_13 != 0) && (*(int *)(param_1 + iVar2 * 0x6c + 0x74) != 0)) { __aeabi_memcpy4(param_1 + iVar2 * 0x6c + 0x5c,param_13, *(int *)(param_1 + iVar2 * 0x6c + 0x74) << 3); iVar2 = *(int *)pCVar3; } iVar2 = iVar2 * 0x6c; *(undefined4 *)(param_1 + iVar2 + 0x78) = param_15; *(undefined4 *)(param_1 + iVar2 + 0x7c) = param_16; *(undefined4 *)(param_1 + iVar2 + 0x80) = param_17; *(undefined4 *)(param_1 + iVar2 + 0x84) = param_18; *(int *)(param_1 + *(int *)pCVar3 * 0x6c + 0x90) = param_5; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x8c) = param_6; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x88) = param_7; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x94) = param_8; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xa8) = param_9; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xac) = param_10; *(int *)(param_1 + *(int *)pCVar3 * 0x6c + 0xb0) = param_5 + -1; *(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xb4) = 0; *(int *)pCVar3 = *(int *)pCVar3 + 1; pthread_mutex_unlock(__mutex); uVar5 = 1; if (param_11 != 0) { SampleProbe(param_1,*(int *)pCVar3 + -1); } } else { pthread_mutex_unlock(__mutex); uVar5 = 0; } return uVar5; } ### FUNC ~Controller @ 0002ee94 /* Controller::~Controller() */ Controller * __thiscall Controller::~Controller(Controller *this) { *(undefined4 *)(this + 0x494) = 0; *(undefined4 *)(this + 0x4a4) = 0; CFunctions::ReleaseMemory((CFunctions *)theFunc); pthread_mutex_destroy((pthread_mutex_t *)(this + 0x4a0)); return this; } ### FUNC StopProcess @ 0002eee0 /* Controller::StopProcess() */ void __thiscall Controller::StopProcess(Controller *this) { *(undefined4 *)(this + 0x494) = 0; *(undefined4 *)(this + 0x4a4) = 0; CFunctions::ReleaseMemory((CFunctions *)theFunc); return; } ### FUNC StartProcess @ 0002ef08 /* Controller::StartProcess(void (*)(int), unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, int, unsigned int, char const*) */ void __thiscall Controller::StartProcess (Controller *this,_func_void_int *param_1,uint param_2,uint param_3,uint param_4, uint param_5,uint param_6,uint param_7,uint param_8,uint param_9,int param_10, uint param_11,char *param_12) { undefined4 uVar1; int iVar2; MStream *pMVar3; Logging *this_00; Logging aLStack_30 [12]; Logging aLStack_24 [12]; int local_18; local_18 = __stack_chk_guard; uVar1 = 0; if (param_1 != (_func_void_int *)0x0) { *(_func_void_int **)(this + 0x4a4) = param_1; *(uint *)(this + 0x49c) = param_5; *(uint *)(this + 0x498) = param_4; *(uint *)(this + 0x28) = param_2; *(uint *)(this + 0x2c) = param_3; *(uint *)this = param_6; *(uint *)(this + 4) = param_7; *(uint *)(this + 8) = param_8; *(uint *)(this + 0xc) = param_9; *(int *)(this + 0x18) = param_10; *(uint *)(this + 0x40) = param_11; iVar2 = CFunctions::Reset((CFunctions *)theFunc,(struct_IntrinsicPara *)(this + 0x28)); if (iVar2 == 0) { pMVar3 = (MStream *)mag::Logging::Logging(aLStack_24,4); MStream::operator<<(pMVar3,"Failed to allocate memory"); this_00 = aLStack_24; } else { iVar2 = CFunctions::LoadCalibrationTable((CFunctions *)theFunc,param_12); if (iVar2 != 0) { CFunctions::SetColorPalette((CFunctions *)theFunc,*(undefined4 *)(this + 0x18)); uVar1 = 1; *(undefined4 *)(this + 0x494) = 1; *(undefined4 *)(this + 0x48c) = 0xffffffff; goto LAB_0002efd0; } pMVar3 = (MStream *)mag::Logging::Logging(aLStack_30,4); MStream::operator<<(pMVar3,"Failed to load calibration table"); this_00 = aLStack_30; } mag::Logging::~Logging(this_00); uVar1 = 0; } LAB_0002efd0: if (__stack_chk_guard == local_18) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(uVar1); } ### FUNC setPreviewOrientation @ 0002f068 /* Controller::setPreviewOrientation(int) */ Controller * __thiscall Controller::setPreviewOrientation(Controller *this,int param_1) { if (param_1 < 0xb4) { if ((param_1 == 0) || (param_1 == 0x5a)) { theFunc._116_4_ = param_1; return (Controller *)theFunc; } } else { this = (Controller *)0x10e; if (param_1 == 0x10e) { theFunc._116_4_ = param_1; return (Controller *)theFunc; } if (param_1 == 0xb4) { theFunc._116_4_ = param_1; return (Controller *)theFunc; } } return this; } ### FUNC getPreviewOrientation @ 0002f090 /* Controller::getPreviewOrientation() */ undefined4 Controller::getPreviewOrientation(void) { return theFunc._116_4_; } ### FUNC FFC @ 0002f0a0 /* Controller::FFC() */ void __thiscall Controller::FFC(Controller *this) { if (*(code **)(this + 0x4a4) != (code *)0x0) { (**(code **)(this + 0x4a4))(0); } theFunc._56_4_ = theFunc._64_4_; theFunc._60_4_ = theFunc._68_4_; *(undefined4 *)(this + 0x48c) = 0; return; } ### FUNC PushFrame @ 0002f0d4 /* Controller::PushFrame(unsigned short const*, int, int) */ undefined4 __thiscall Controller::PushFrame(Controller *this,ushort *param_1,int param_2,int param_3) { uint uVar1; undefined4 uVar2; uint uVar3; Controller *pCVar4; uint uVar5; int iVar6; if (*(int *)(this + 0x494) == 0) { return 0; } pCVar4 = this + 0x48c; iVar6 = *(int *)(this + 0x48c); theFunc._64_4_ = param_2; theFunc._68_4_ = param_3; if (iVar6 < 0) { if (*(code **)(this + 0x4a4) != (code *)0x0) { (**(code **)(this + 0x4a4))(0); } theFunc._56_4_ = theFunc._64_4_; theFunc._60_4_ = theFunc._68_4_; *(undefined4 *)pCVar4 = 0; return 0; } uVar3 = iVar6 + 1; *(uint *)pCVar4 = uVar3; uVar5 = *(uint *)this; uVar1 = *(int *)(this + 0x40) + uVar5; if (uVar3 <= uVar5) { uVar1 = *(int *)(this + 4) + uVar1; LAB_0002f1ce: CFunctions::DoSomething((CFunctions *)theFunc,iVar6,uVar1); return 0; } if (uVar3 <= uVar1) { if ((uVar3 == uVar1) && (*(code **)(this + 0x4a4) != (code *)0x0)) { (**(code **)(this + 0x4a4))(1); uVar5 = *(uint *)this; uVar3 = *(uint *)pCVar4; } CFunctions::PushBaselineRaw((CFunctions *)theFunc,param_1,(uint)(uVar3 == uVar5 + 1)); CFunctions::DoSomething ((CFunctions *)theFunc,*(int *)pCVar4 + -1, *(int *)(this + 0x40) + *(int *)this + *(int *)(this + 4)); return 0; } uVar1 = *(int *)(this + 4) + uVar1; if (uVar3 <= uVar1) goto LAB_0002f1ce; if (uVar3 < *(int *)(this + 8) + uVar1) { iVar6 = 100; if (0x98be26 < *(uint *)(this + 0x498)) { iVar6 = 0x1e; } if ((uVar3 < iVar6 + uVar1) || (uVar1 = theFunc._56_4_ - param_2 >> 0x1f, ((theFunc._56_4_ - param_2) + uVar1 ^ uVar1) <= *(uint *)(this + 0xc))) goto LAB_0002f184; } if (*(code **)(this + 0x4a4) != (code *)0x0) { (**(code **)(this + 0x4a4))(0); param_3 = theFunc._68_4_; param_2 = theFunc._64_4_; } theFunc._56_4_ = param_2; theFunc._60_4_ = param_3; *(undefined4 *)pCVar4 = 0; LAB_0002f184: uVar2 = CFunctions::PushFrame((CFunctions *)theFunc,param_1,0,1,0,1); return uVar2; } ### FUNC GetRectTemperatureInfo @ 0002f260 /* Controller::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*, int) */ int __thiscall Controller::GetRectTemperatureInfo (Controller *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5, int param_6) { uint uVar1; int iVar2; int iVar3; uint uVar4; uint uVar5; uint uVar6; uint uVar7; uVar1 = param_4; uVar5 = param_3; uVar7 = param_1; if (theFunc._116_4_ != 0x5a) { if (theFunc._116_4_ == 0x10e) { uVar5 = *(int *)(this + 0x2c) + (param_3 ^ 0xffffffff); uVar1 = *(int *)(this + 0x28) + (param_4 ^ 0xffffffff); uVar7 = *(int *)(this + 0x2c) + (param_1 ^ 0xffffffff); param_2 = *(int *)(this + 0x28) + (param_2 ^ 0xffffffff); } else if (theFunc._116_4_ == 0xb4) { uVar1 = *(int *)(this + 0x28) + (param_3 ^ 0xffffffff); uVar5 = param_4; uVar7 = param_2; param_2 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffff); } else { uVar5 = *(int *)(this + 0x2c) + (param_4 ^ 0xffffffff); uVar7 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffff); uVar1 = param_3; param_2 = param_1; } } uVar6 = uVar7; if ((int)uVar7 <= (int)uVar5) { uVar6 = uVar5; } uVar4 = uVar1; if ((int)param_2 <= (int)uVar1) { uVar4 = param_2; } if ((int)uVar7 <= (int)uVar5) { uVar5 = uVar7; } if ((int)param_2 <= (int)uVar1) { param_2 = uVar1; } iVar2 = CFunctions::GetRectTemperatureInfo ((CFunctions *)theFunc,uVar4,uVar5,param_2,uVar6,param_5,param_6); if (iVar2 != 0) { iVar3 = Buffer2Client(this,param_5[3]); param_5[3] = iVar3; iVar3 = Buffer2Client(this,param_5[4]); param_5[4] = iVar3; } return iVar2; } ### FUNC Client2Buffer @ 0002f340 /* Controller::Client2Buffer(int, int, int&, int&) */ void __thiscall Controller::Client2Buffer(Controller *this,int param_1,int param_2,int *param_3,int *param_4) { if (theFunc._116_4_ == 0x5a) { *param_3 = param_2; param_2 = param_1; } else if (theFunc._116_4_ == 0xb4) { *param_3 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); } else if (theFunc._116_4_ == 0x10e) { *param_3 = *(int *)(this + 0x28) + (param_2 ^ 0xffffffffU); param_2 = *(int *)(this + 0x2c) + (param_1 ^ 0xffffffffU); } else { *param_3 = param_1; param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); } *param_4 = param_2; return; } ### FUNC Buffer2Client @ 0002f39c /* Controller::Buffer2Client(int) */ int __thiscall Controller::Buffer2Client(Controller *this,int param_1) { int iVar1; int iVar2; int iVar3; int iVar4; iVar4 = *(int *)(this + 0x28); iVar1 = __divsi3(param_1,iVar4); iVar2 = param_1 - iVar1 * iVar4; iVar3 = *(int *)(this + 0x2c); if (theFunc._116_4_ == 0x5a) { iVar2 = iVar2 * iVar3 + iVar1; } else if (theFunc._116_4_ == 0xb4) { iVar2 = (iVar4 + iVar1 * iVar4 + -1) - iVar2; } else if (theFunc._116_4_ == 0x10e) { iVar2 = ((iVar3 + -1) - iVar1) + iVar3 * ((iVar4 + -1) - iVar2); } else { iVar2 = ((iVar3 + -1) - iVar1) * iVar4 + iVar2; } return iVar2; } ### FUNC SetEX @ 0002f3fc /* Controller::SetEX(int, int, int) */ void Controller::SetEX(int param_1,int param_2,int param_3) { CFunctions::SetEX((CFunctions *)theFunc); return; } ### FUNC getEX @ 0002f410 /* Controller::getEX() */ void Controller::getEX(void) { CFunctions::GetEX((CFunctions *)theFunc); return; } ### FUNC setAutoEnlargeValue @ 0002f424 /* Controller::setAutoEnlargeValue(int) */ void __thiscall Controller::setAutoEnlargeValue(Controller *this,int param_1) { theFunc._12_4_ = 0; if (99 < param_1) { param_1 = 100; } if (param_1 < 3) { param_1 = 2; } theFunc._32_4_ = param_1; return; } ### FUNC setEmissivity @ 0002f448 /* Controller::setEmissivity(int, int) */ Controller * __thiscall Controller::setEmissivity(Controller *this,int param_1,int param_2) { undefined4 uVar1; if ((uint)param_1 < 0x65) { uVar1 = __floatsisf(param_2); theFunc._128_4_ = __mulsf3(uVar1,0x3a83126f); uVar1 = __floatsisf(param_1); this = (Controller *)__mulsf3(uVar1,0x3c23d70a); theFunc._124_4_ = this; } return this; } ### FUNC SetColorPalette @ 0002f484 /* Controller::SetColorPalette(ColorPalette) */ void Controller::SetColorPalette(void) { CFunctions::SetColorPalette((CFunctions *)theFunc); return; } ### FUNC setColorbarSize @ 0002f498 /* Controller::setColorbarSize(int, int) */ void __thiscall Controller::setColorbarSize(Controller *this,int param_1,int param_2) { *(int *)(this + 0x38) = param_1; *(int *)(this + 0x3c) = param_2; return; } ### FUNC SetExtParameter @ 0002f4a0 /* Controller::SetExtParameter(struct_ExtrinsicPara) */ undefined4 Controller::SetExtParameter (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 in_lr; undefined4 local_c; undefined4 uStack_8; undefined4 uStack_4; local_c = param_2; uStack_8 = param_3; uStack_4 = param_4; __aeabi_memcpy4(0x6b90c,&local_c,0x74); return in_lr; } ### FUNC getExtParameter @ 0002f4cc /* Controller::getExtParameter(struct_ExtrinsicPara&) */ void __thiscall Controller::getExtParameter(Controller *this,struct_ExtrinsicPara *param_1) { __aeabi_memcpy4(param_1,0x6b90c,0x74); return; } ### FUNC IsOutputDataReady @ 0002f4e8 /* Controller::IsOutputDataReady() */ undefined4 Controller::IsOutputDataReady(void) { return theFunc._172_4_; } ### FUNC SaveDDT @ 0002f4f8 /* Controller::SaveDDT(char const*) */ void __thiscall Controller::SaveDDT(Controller *this,char *param_1) { int iVar1; undefined4 *puVar2; char *__format; undefined4 uVar3; OFStream aOStack_394 [8]; undefined4 local_38c; undefined4 local_388; int local_384; int local_380; undefined4 local_37c; undefined4 local_378; undefined4 local_374; undefined4 local_370; undefined1 auStack_36c [8]; undefined4 local_364; undefined4 local_360; char local_35c [64]; time_t local_31c; int local_318; undefined4 local_314; undefined1 auStack_2fc [556]; undefined4 local_d0; undefined4 local_cc; undefined4 local_c8; undefined4 local_c4; undefined4 local_c0; undefined4 local_bc; undefined4 local_b8; undefined4 local_b4; undefined4 local_b0; undefined4 local_ac; undefined4 local_a8; undefined4 local_a4; undefined4 local_a0; undefined4 local_9c; undefined4 local_98; int local_18; local_18 = __stack_chk_guard; if (theFunc._172_4_ == 0) { puVar2 = (undefined4 *)__errno(); *puVar2 = 0xe4ae0006; uVar3 = 0; goto LAB_0002f67a; } __aeabi_memclr4(auStack_36c,0x354); local_388 = 0x10002; local_38c = 0x374; local_384 = *(int *)(this + 0x28); local_380 = *(int *)(this + 0x2c); local_31c = time((time_t *)0x0); local_318 = local_31c >> 0x1f; uVar3 = *(undefined4 *)(this + 0x498); local_378 = theFunc._20736_4_; local_37c = theFunc._20732_4_; local_370 = theFunc._64_4_; local_374 = theFunc._68_4_; local_360 = 0; local_364 = 0; iVar1 = *(int *)(this + 0x49c); local_314 = uVar3; if (iVar1 == 2) { builtin_strncpy(local_35c + 4,"C3P",4); builtin_strncpy(local_35c,"MAG-",4); __format = "MAG-C3P-%d"; LAB_0002f5c4: sprintf(local_35c,__format,uVar3); } else { if (iVar1 == 1) { __aeabi_memcpy(local_35c,"MAG-C3",7); __format = "MAG-C3-%d"; goto LAB_0002f5c4; } if (iVar1 == 0) { __aeabi_memcpy(local_35c,"MAG-C1",7); __format = "MAG-C1-%d"; goto LAB_0002f5c4; } } if ((uint)theFunc._104_4_ < (uint)theFunc._12588_4_) { __aeabi_memcpy4(auStack_2fc,theFunc._104_4_ * 0x21c + 0x6ea38); } local_d0 = *(undefined4 *)(this + 0x18); local_cc = 0; local_b4 = theFunc._12_4_; local_b0 = theFunc._16_4_; local_ac = theFunc._20_4_; local_a8 = theFunc._24_4_; local_a4 = theFunc._28_4_; local_a0 = theFunc._32_4_; local_b8 = theFunc._120_4_; local_c8 = theFunc._124_4_; local_bc = theFunc._160_4_; local_c4 = theFunc._128_4_; local_c0 = theFunc._156_4_; local_9c = theFunc._44_4_; local_98 = theFunc._48_4_; OFStream::OFStream(aOStack_394,param_1,false); OFStream::Write(aOStack_394,&local_38c,0x374,1); OFStream::Write(aOStack_394,(void *)theFunc._180_4_,local_380 * local_384 * 2,1); IFStream::~IFStream((IFStream *)aOStack_394); uVar3 = 1; LAB_0002f67a: if (__stack_chk_guard != local_18) { /* WARNING: Subroutine does not return */ __stack_chk_fail(uVar3); } return; } ### FUNC GetTemperature @ 0002f734 /* Controller::GetTemperature(unsigned int, unsigned int, int) */ void __thiscall Controller::GetTemperature(Controller *this,uint param_1,uint param_2,int param_3) { uint uVar1; uVar1 = Client2Buffer(this,param_1); CFunctions::GetTemperature((CFunctions *)theFunc,uVar1,param_2,param_3); return; } ### FUNC Client2Buffer @ 0002f758 /* Controller::Client2Buffer(int) */ int __thiscall Controller::Client2Buffer(Controller *this,int param_1) { int iVar1; int extraout_r1; int iVar2; int iVar3; iVar2 = *(int *)(this + 0x28); iVar3 = *(int *)(this + 0x2c); if (theFunc._116_4_ == 0x5a) { iVar1 = __divsi3(param_1,iVar3); iVar1 = (param_1 - iVar1 * iVar3) * iVar2 + iVar1; } else if (theFunc._116_4_ == 0xb4) { __aeabi_idivmod(param_1,iVar2); iVar1 = param_1 + iVar2 + extraout_r1 * -2 + -1; } else if (theFunc._116_4_ == 0x10e) { iVar1 = __divsi3(param_1,iVar3); iVar1 = ((iVar2 + -1) - iVar1) + iVar2 * (iVar3 + (param_1 ^ 0xffffffffU) + iVar1 * iVar3); } else { iVar1 = __divsi3(param_1,iVar2); iVar1 = iVar2 * (iVar3 + -1 + iVar1 * -2) + param_1; } return iVar1; } ### FUNC GetOutputBMPData @ 0002f7e0 /* Controller::GetOutputBMPData(unsigned int*, int) */ undefined4 __thiscall Controller::GetOutputBMPData(Controller *this,uint *param_1,int param_2) { bool bVar1; undefined4 uVar2; byte *pbVar3; uint *puVar4; int iVar5; byte *pbVar6; uint *puVar7; int iVar8; int iVar9; iVar8 = *(int *)(this + 0x28); iVar9 = *(int *)(this + 0x2c); iVar5 = iVar8 * iVar9 * 4; uVar2 = 0; if (iVar5 - param_2 == 0 || iVar5 < param_2) { pbVar3 = (byte *)CFunctions::GetOriginalBMPDataPointer((CFunctions *)theFunc); uVar2 = 1; if (0 < iVar9) { puVar4 = param_1 + (iVar9 + -1) * iVar8; iVar5 = iVar9 + -1; do { pbVar6 = pbVar3; if (iVar8 != 0) { pbVar6 = pbVar3 + iVar8; puVar7 = puVar4; iVar9 = iVar8; do { *puVar7 = *(uint *)(theFunc + (uint)*pbVar3 * 4 + 0x24f4) | 0xff000000; puVar7 = puVar7 + 1; iVar9 = iVar9 + -1; pbVar3 = pbVar3 + 1; } while (iVar9 != 0); puVar4 = puVar4 + iVar8; } puVar4 = puVar4 + iVar8 * -2; bVar1 = 0 < iVar5; pbVar3 = pbVar6; iVar5 = iVar5 + -1; } while (bVar1); uVar2 = 1; } } return uVar2; } ### FUNC GetOutputColorBarData @ 0002f878 /* Controller::GetOutputColorBarData(unsigned int*, int) */ undefined4 __thiscall Controller::GetOutputColorBarData(Controller *this,uint *param_1,int param_2) { bool bVar1; uint *puVar2; int iVar3; uint uVar4; int iVar5; uint uVar6; undefined4 uVar7; uVar6 = *(uint *)(this + 0x38); uVar4 = uVar6 * *(int *)(this + 0x3c) * 4; uVar7 = 0; if (uVar4 < (uint)param_2 || uVar4 - param_2 == 0) { iVar3 = *(int *)(this + 0x3c) + -1; uVar7 = 1; if (-1 < iVar3) { puVar2 = param_1 + iVar3 * uVar6; iVar5 = theFunc._200_4_; do { if (uVar6 == 0) { uVar6 = 0; } else { uVar4 = 0; do { *puVar2 = *(uint *)(theFunc + (uint)*(byte *)(iVar5 + uVar4) * 4 + 0x291c) | 0xff000000; puVar2 = puVar2 + 1; uVar4 = uVar4 + 1; uVar6 = *(uint *)(this + 0x38); } while (uVar4 < uVar6); iVar5 = iVar5 + uVar4; } puVar2 = puVar2 + uVar6 * -2; bVar1 = 0 < iVar3; iVar3 = iVar3 + -1; } while (bVar1); uVar7 = 1; } } return uVar7; } ### FUNC GetStatePointer @ 0002f900 /* Controller::GetStatePointer(struct_State*) */ undefined4 __thiscall Controller::GetStatePointer(Controller *this,struct_State *param_1) { undefined4 uVar1; __aeabi_memcpy4(param_1,0x6fd90,0xc68); uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x28)); *(undefined4 *)(param_1 + 0x28) = uVar1; uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x2c)); *(undefined4 *)(param_1 + 0x2c) = uVar1; uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x30)); *(undefined4 *)(param_1 + 0x30) = uVar1; return 1; } ### FUNC Lock @ 0002f948 /* Controller::Lock() */ void Controller::Lock(void) { pthread_mutex_lock((pthread_mutex_t *)(theFunc + 0xb0)); return; } ### FUNC Unlock @ 0002f960 /* Controller::Unlock() */ void Controller::Unlock(void) { pthread_mutex_unlock((pthread_mutex_t *)(theFunc + 0xb0)); return; } ### FUNC SampleTemperatures @ 0002f978 /* Controller::SampleTemperatures() */ void __thiscall Controller::SampleTemperatures(Controller *this) { undefined4 uVar1; Controller *pCVar2; int iVar3; uint uVar4; uint uVar5; int iVar6; float extraout_s0; float extraout_s0_00; float extraout_s0_01; float extraout_s0_02; float fVar7; pthread_mutex_lock((pthread_mutex_t *)(this + 0x4a0)); pthread_mutex_lock((pthread_mutex_t *)(theFunc + 0xb0)); if (*(int *)(this + 0x488) != 0) { iVar6 = 0; uVar5 = 0; fVar7 = extraout_s0; do { iVar3 = *(int *)(this + iVar6 + 0xb0); *(uint *)(this + iVar6 + 0xb0) = iVar3 + 1U; *(int *)(this + iVar6 + 0xb8) = *(int *)(this + iVar6 + 0xb8) + 1; if (*(uint *)(this + iVar6 + 0x90) <= iVar3 + 1U) { *(undefined4 *)(this + iVar6 + 0xb0) = 0; if (uVar5 == 2) { *(undefined4 *)(this + 300) = theFunc._17584_4_; pCVar2 = this + 0x170; uVar1 = theFunc._17568_4_; if (*(int *)(this + 0x10) != 0) { uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17568_4_); fVar7 = extraout_s0_01; } LAB_0002fab4: *(undefined4 *)pCVar2 = uVar1; LAB_0002fad6: iVar3 = *(int *)(this + iVar6 + 0x98); *(int *)(this + iVar6 + 0x9c) = iVar3; *(int *)(this + iVar6 + 0xa0) = iVar3; *(int *)(this + iVar6 + 0xa4) = iVar3; } else { if (uVar5 == 1) { *(undefined4 *)(this + 0xc0) = theFunc._17588_4_; pCVar2 = this + 0x104; uVar1 = theFunc._17572_4_; if (*(int *)(this + 0x10) != 0) { uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17572_4_); fVar7 = extraout_s0_02; } goto LAB_0002fab4; } if (uVar5 == 0) { *(undefined4 *)(this + 0x54) = theFunc._17592_4_; uVar1 = theFunc._17576_4_; if (*(int *)(this + 0x10) != 0) { uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17576_4_); fVar7 = extraout_s0_00; } *(undefined4 *)(this + 0x98) = uVar1; goto LAB_0002fad6; } fVar7 = (float)SampleProbe(this,uVar5); if ((*(uint *)(this + iVar6 + 0x50) < 8) && ((1 << (*(uint *)(this + iVar6 + 0x50) & 0xff) & 0xc1U) != 0)) goto LAB_0002fad6; iVar3 = *(int *)(this + iVar6 + 0x98); } uVar4 = 0; if (*(int *)(this + iVar6 + 0xa8) <= iVar3) { uVar4 = (uint)(iVar3 <= *(int *)(this + iVar6 + 0xac)); } *(uint *)(this + iVar6 + 0xb4) = uVar4; } iVar6 = iVar6 + 0x6c; uVar5 = uVar5 + 1; } while (uVar5 < *(uint *)(this + 0x488)); } pthread_mutex_unlock((pthread_mutex_t *)(theFunc + 0xb0)); pthread_mutex_unlock((pthread_mutex_t *)(this + 0x4a0)); return; } ### FUNC SampleProbe @ 0002fb60 /* WARNING: Restarted to delay deadcode elimination for space: stack */ /* Controller::SampleProbe(int) */ void __thiscall Controller::SampleProbe(Controller *this,int param_1) { int iVar1; int iVar2; uint uVar3; uint *puVar4; uint uVar5; int iVar6; uint uVar7; uint uVar8; uint uVar9; uint uVar10; int iVar11; float extraout_s0; float extraout_s0_00; float extraout_s0_01; float fVar12; float extraout_s0_02; float extraout_s0_03; float extraout_s0_04; float extraout_s0_05; float extraout_s0_06; float extraout_s0_07; uint *local_a30; uint local_a2c; uint local_a28; uint *local_a24; uint local_a20; uint local_a1c; uint *local_a18; uint local_a14; uint local_a10; int local_a0c [638]; iVar1 = __stack_chk_guard; iVar2 = 0; if ((9 < param_1) || (*(int *)(this + 0x488) < param_1)) goto switchD_0002fbaa_default; iVar6 = param_1 * 0x6c; iVar11 = *(int *)(this + iVar6 + 0x50); switch(iVar11) { case 0: uVar10 = CFunctions::GetTemperature ((CFunctions *)theFunc,*(uint *)(this + iVar6 + 0x54), *(uint *)(this + iVar6 + 0x58),0); if (*(int *)(this + 0x10) != 0) { uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_04,uVar10); } *(uint *)(this + iVar6 + 0x98) = uVar10; iVar2 = 0; break; case 1: uVar10 = *(uint *)(this + 0x2c); if (*(uint *)(this + 0x2c) <= *(uint *)(this + 0x28)) { uVar10 = *(uint *)(this + 0x28); } iVar2 = CFunctions::GetLineTemperatureInfo2 ((CFunctions *)theFunc,(ushort *)&local_a18,uVar10 << 1,(int *)&local_a24, *(uint *)(this + iVar6 + 0x5c),*(uint *)(this + iVar6 + 0x60), *(uint *)(this + iVar6 + 100),*(uint *)(this + iVar6 + 0x68),0); if (0 < iVar2) { if (*(int *)(this + 0x10) == 0) { local_a30 = local_a24; local_a2c = local_a20; local_a28 = local_a1c; puVar4 = local_a24; uVar10 = local_a20; } else { puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,extraout_s0_05,(uint)local_a24) ; local_a30 = puVar4; uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_06,local_a20); local_a2c = uVar10; local_a28 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_07,local_a1c); } *(uint *)(this + iVar6 + 0xa0) = uVar10; *(uint **)(this + iVar6 + 0x9c) = puVar4; *(uint *)(this + iVar6 + 0xa4) = local_a28; if (*(int *)(this + iVar6 + 0x94) < 3) { puVar4 = (&local_a30)[*(int *)(this + iVar6 + 0x94)]; } else { puVar4 = (uint *)(uVar10 - (int)puVar4); } *(uint **)(this + iVar6 + 0x98) = puVar4; *(undefined4 *)(this + iVar6 + 0x54) = 0; } iVar2 = 1; break; case 2: case 3: case 4: case 5: iVar2 = 0; if (iVar11 == 5) break; if (iVar11 == 2) { uVar8 = *(uint *)(this + iVar6 + 0x80); uVar3 = *(uint *)(this + iVar6 + 0x78); uVar9 = *(uint *)(this + iVar6 + 0x7c); uVar10 = *(uint *)(this + iVar6 + 0x84); uVar7 = uVar10; if ((int)uVar10 <= (int)uVar9) { uVar7 = uVar9; } uVar5 = uVar8; if ((int)uVar3 <= (int)uVar8) { uVar5 = uVar3; } if ((int)uVar9 <= (int)uVar10) { uVar10 = uVar9; } if ((int)uVar8 <= (int)uVar3) { uVar8 = uVar3; } iVar11 = CFunctions::GetRectTemperatureInfo ((CFunctions *)theFunc,uVar5,uVar10,uVar8,uVar7,(int *)&local_a18,0); fVar12 = extraout_s0; } else { uVar8 = *(uint *)(this + iVar6 + 0x80); uVar3 = *(uint *)(this + iVar6 + 0x78); uVar9 = *(uint *)(this + iVar6 + 0x7c); uVar10 = *(uint *)(this + iVar6 + 0x84); uVar7 = uVar10; if ((int)uVar10 <= (int)uVar9) { uVar7 = uVar9; } uVar5 = uVar8; if ((int)uVar3 <= (int)uVar8) { uVar5 = uVar3; } if ((int)uVar9 <= (int)uVar10) { uVar10 = uVar9; } if ((int)uVar8 <= (int)uVar3) { uVar8 = uVar3; } iVar11 = CFunctions::GetEllipseTemperatureInfo ((CFunctions *)theFunc,uVar5,uVar10,uVar8,uVar7,(int *)&local_a18,0); fVar12 = extraout_s0_01; } iVar2 = 0; if (iVar11 == 0) break; if (*(int *)(this + 0x10) == 0) { local_a24 = local_a18; local_a20 = local_a14; puVar4 = local_a18; uVar10 = local_a14; } else { puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,fVar12,(uint)local_a18); local_a24 = puVar4; uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_02,local_a14); local_a20 = uVar10; local_a10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_03,local_a10); } local_a1c = local_a10; *(uint *)(this + iVar6 + 0xa0) = uVar10; *(uint **)(this + iVar6 + 0x9c) = puVar4; *(uint *)(this + iVar6 + 0xa4) = local_a10; iVar2 = *(int *)(this + iVar6 + 0x94); if (iVar2 < 3) { *(uint **)(this + iVar6 + 0x98) = (&local_a24)[iVar2]; if (iVar2 == 2) goto LAB_0002fef8; iVar2 = local_a0c[iVar2]; } else { *(uint *)(this + iVar6 + 0x98) = uVar10 - (int)puVar4; LAB_0002fef8: iVar2 = ((*(int *)(this + iVar6 + 0x7c) + *(int *)(this + iVar6 + 0x84)) / 2) * *(int *)(this + 0x28) + (*(int *)(this + iVar6 + 0x78) + *(int *)(this + iVar6 + 0x80)) / 2; } *(int *)(this + iVar6 + 0x54) = iVar2; iVar2 = iVar11; break; case 6: case 7: if (*(int *)(this + iVar6 + 0x74) == 0) { local_a14 = 0; local_a18 = &switchD_0002fbaa::switchdataD_0002fbac; } else { uVar10 = 0; do { iVar2 = uVar10 * 8 + iVar6; puVar4 = (uint *)CFunctions::GetTemperature ((CFunctions *)theFunc, *(int *)(this + iVar2 + 0x60) * *(int *)(this + 0x28) + *(int *)(this + iVar2 + 0x5c),*(uint *)(this + iVar6 + 0x58),0); if (*(int *)(this + 0x10) != 0) { puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,extraout_s0_00,(uint)puVar4); } (&local_a18)[uVar10] = puVar4; uVar10 = uVar10 + 1; } while (uVar10 < *(uint *)(this + iVar6 + 0x74)); iVar11 = *(int *)(this + iVar6 + 0x50); } uVar10 = (int)((int)local_a18 - local_a14) >> 0x1f; uVar10 = ((int)local_a18 - local_a14) + uVar10 ^ uVar10; if (iVar11 == 7) { uVar7 = (int)((int)local_a18 - local_a10) >> 0x1f; uVar7 = ((int)local_a18 - local_a10) + uVar7 ^ uVar7; uVar8 = (int)(local_a14 - local_a10) >> 0x1f; uVar8 = (local_a14 - local_a10) + uVar8 ^ uVar8; if ((int)uVar8 <= (int)uVar10) { uVar8 = uVar10; } uVar10 = uVar7; if ((int)uVar7 <= (int)uVar8) { uVar10 = uVar8; } } *(uint *)(this + iVar6 + 0x98) = uVar10; iVar2 = 0; } switchD_0002fbaa_default: if (__stack_chk_guard != iVar1) { /* WARNING: Subroutine does not return */ __stack_chk_fail(iVar2); } return; } ### FUNC DeleteProbe @ 0002ff98 /* Controller::DeleteProbe(unsigned int) */ undefined4 __thiscall Controller::DeleteProbe(Controller *this,uint param_1) { pthread_mutex_t *__mutex; uint uVar1; Controller *pCVar2; uint uVar3; __mutex = (pthread_mutex_t *)(this + 0x4a0); pthread_mutex_lock(__mutex); if (2 < param_1) { uVar1 = *(uint *)(this + 0x488); uVar3 = param_1 + 1; if (uVar3 <= uVar1) { if (uVar3 < uVar1) { pCVar2 = this + param_1 * 0x6c + 0xbc; do { __aeabi_memcpy4(pCVar2 + -0x6c,pCVar2,0x6c); pCVar2 = pCVar2 + 0x6c; uVar3 = uVar3 + 1; uVar1 = *(uint *)(this + 0x488); } while (uVar3 < uVar1); } *(uint *)(this + 0x488) = uVar1 - 1; pthread_mutex_unlock(__mutex); return 1; } } pthread_mutex_unlock(__mutex); return 0; } ### FUNC EditProbe @ 0002fffc /* Controller::EditProbe(unsigned int, unsigned int, unsigned int, unsigned int, float, unsigned int, int, int, int, int) */ undefined4 Controller::EditProbe (uint param_1,uint param_2,uint param_3,uint param_4,float param_5,uint param_6, int param_7,int param_8,int param_9,int param_10) { pthread_mutex_t *__mutex; uint uVar1; uint extraout_r1; int iVar2; undefined4 uVar3; undefined4 in_stack_00000014; __mutex = (pthread_mutex_t *)(param_1 + 0x4a0); uVar3 = *(undefined4 *)(param_1 + 0x28); pthread_mutex_lock(__mutex); uVar1 = __udivsi3(param_3,uVar3); if ((((param_2 < *(uint *)(param_1 + 0x488)) && (__aeabi_uidivmod(param_3,uVar3), extraout_r1 < *(uint *)(param_1 + 0x28))) && (param_6 != 0) ) && (uVar1 < *(uint *)(param_1 + 0x2c))) { iVar2 = param_1 + param_2 * 0x6c; *(uint *)(iVar2 + 0x90) = param_6; *(int *)(iVar2 + 0x8c) = param_7; *(int *)(iVar2 + 0x88) = param_8; *(int *)(iVar2 + 0x94) = param_9; *(int *)(iVar2 + 0xa8) = param_10; *(undefined4 *)(iVar2 + 0xac) = in_stack_00000014; *(uint *)(iVar2 + 0x54) = param_3; *(uint *)(iVar2 + 0x58) = param_4; pthread_mutex_unlock(__mutex); SampleProbe((Controller *)param_1,param_2); uVar3 = 1; } else { pthread_mutex_unlock(__mutex); uVar3 = 0; } return uVar3; } ### FUNC SaveDDT @ 000300aa /* Controller::SaveDDT() */ void Controller::SaveDDT(void) { return; } ### FUNC Buffer2Client @ 000300ac /* Controller::Buffer2Client(int, int&, int&) */ void __thiscall Controller::Buffer2Client(Controller *this,int param_1,int *param_2,int *param_3) { uint uVar1; uint uVar2; int iVar3; iVar3 = *(int *)(this + 0x28); uVar1 = __udivsi3(param_1,iVar3); uVar2 = param_1 - uVar1 * iVar3; if (theFunc._116_4_ == 0x5a) { LAB_00030102: *param_2 = uVar1; *param_3 = uVar2; iVar3 = *(int *)(this + 0x28); } else if (theFunc._116_4_ != 0xb4) { if (theFunc._116_4_ == 0x10e) goto LAB_0003011c; *param_2 = uVar2; *param_3 = *(int *)(this + 0x2c) + (uVar1 ^ 0xffffffff); goto LAB_00030102; } *param_2 = iVar3 + (uVar2 ^ 0xffffffff); *param_3 = uVar1; LAB_0003011c: *param_2 = *(int *)(this + 0x2c) + (uVar1 ^ 0xffffffff); *param_3 = *(int *)(this + 0x28) + (uVar2 ^ 0xffffffff); return; } ### FUNC Buffer2Client @ 00030138 /* Controller::Buffer2Client(int, int, int&, int&) */ void __thiscall Controller::Buffer2Client(Controller *this,int param_1,int param_2,int *param_3,int *param_4) { if (theFunc._116_4_ == 0x5a) { *param_3 = param_2; param_2 = param_1; } else if (theFunc._116_4_ == 0xb4) { *param_3 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); } else if (theFunc._116_4_ == 0x10e) { *param_3 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); param_2 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); } else { *param_3 = param_1; param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); } *param_4 = param_2; return; } ### FUNC clientPos2ClientXY @ 00030194 /* Controller::clientPos2ClientXY(int, int&, int&) */ void __thiscall Controller::clientPos2ClientXY(Controller *this,int param_1,int *param_2,int *param_3) { int iVar1; Controller *pCVar2; if ((int)theFunc._116_4_ < 0xb4) { if (theFunc._116_4_ == 0) { LAB_000301c0: pCVar2 = this + 0x28; goto LAB_000301ce; } if (theFunc._116_4_ != 0x5a) { return; } } else if (theFunc._116_4_ != 0x10e) { if (theFunc._116_4_ != 0xb4) { return; } goto LAB_000301c0; } pCVar2 = this + 0x2c; LAB_000301ce: iVar1 = __udivsi3(param_1,*(undefined4 *)pCVar2); *param_3 = iVar1; *param_2 = param_1 - iVar1 * *(int *)pCVar2; return; } ### FUNC clientPos2ScreenXY @ 000301ec /* Controller::clientPos2ScreenXY(int, int, int, int&, int&) */ void __thiscall Controller::clientPos2ScreenXY (Controller *this,int param_1,int param_2,int param_3,int *param_4,int *param_5) { undefined4 uVar1; undefined1 *puVar2; int iVar3; int iVar4; Controller *pCVar5; uVar1 = theFunc._116_4_; puVar2 = theFunc; iVar4 = param_3; if ((int)theFunc._116_4_ < 0xb4) { if (theFunc._116_4_ == 0) { LAB_00030218: pCVar5 = this + 0x28; goto LAB_00030226; } if (theFunc._116_4_ == 0x5a) goto LAB_00030220; } else { puVar2 = (undefined1 *)0x10e; if (theFunc._116_4_ != 0x10e) { if (theFunc._116_4_ != 0xb4) goto LAB_0003023c; goto LAB_00030218; } LAB_00030220: pCVar5 = this + 0x2c; LAB_00030226: iVar3 = *(int *)pCVar5; iVar4 = __udivsi3(param_1,iVar3); puVar2 = (undefined1 *)(param_1 - iVar4 * iVar3); } LAB_0003023c: if ((int)uVar1 < 0xb4) { if (uVar1 == 0) { LAB_00030258: iVar3 = __udivsi3((int)puVar2 * param_2,*(undefined4 *)(this + 0x28)); *param_4 = iVar3; pCVar5 = this + 0x2c; goto LAB_0003027e; } if (uVar1 != 0x5a) { return; } } else if (uVar1 != 0x10e) { if (uVar1 != 0xb4) { return; } goto LAB_00030258; } iVar3 = __udivsi3((int)puVar2 * param_2,*(undefined4 *)(this + 0x2c)); *param_4 = iVar3; pCVar5 = this + 0x28; LAB_0003027e: iVar4 = __udivsi3(iVar4 * param_3,*(undefined4 *)pCVar5); *param_5 = iVar4; return; } ### FUNC clientXY2ScreenXY @ 00030294 /* Controller::clientXY2ScreenXY(int, int, int, int, int&, int&) */ void __thiscall Controller::clientXY2ScreenXY (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, int *param_6) { int iVar1; Controller *pCVar2; if ((int)theFunc._116_4_ < 0xb4) { if (theFunc._116_4_ == 0) { LAB_000302c2: iVar1 = __udivsi3(param_3 * param_1,*(undefined4 *)(this + 0x28)); *param_5 = iVar1; pCVar2 = this + 0x2c; goto LAB_000302e4; } if (theFunc._116_4_ != 0x5a) { return; } } else if (theFunc._116_4_ != 0x10e) { if (theFunc._116_4_ != 0xb4) { return; } goto LAB_000302c2; } iVar1 = __udivsi3(param_3 * param_1,*(undefined4 *)(this + 0x2c)); *param_5 = iVar1; pCVar2 = this + 0x28; LAB_000302e4: iVar1 = __udivsi3(param_4 * param_2,*(undefined4 *)pCVar2); *param_6 = iVar1; return; } ### FUNC screenXY2ClientXY @ 000302fc /* Controller::screenXY2ClientXY(int, int, int, int, int&, int&) */ void __thiscall Controller::screenXY2ClientXY (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, int *param_6) { int iVar1; int iVar2; int iVar3; int iVar4; iVar3 = *(int *)(this + 0x28); iVar4 = *(int *)(this + 0x2c); if ((int)theFunc._116_4_ < 0xb4) { if (theFunc._116_4_ == 0) { LAB_00030338: iVar1 = __divsi3(iVar3 * param_1,param_3); *param_5 = iVar1; iVar1 = __divsi3(iVar4 * param_2,param_4); *param_6 = iVar1; iVar2 = 0; if (*param_5 < 0) { LAB_0003036a: *param_5 = iVar2; iVar1 = *param_6; } else if (iVar3 <= *param_5) { iVar2 = iVar3 + -1; goto LAB_0003036a; } if (iVar1 < 0) goto LAB_000303be; iVar3 = iVar4; if (iVar1 < iVar4) { return; } goto LAB_000303b8; } if (theFunc._116_4_ != 0x5a) { return; } } else if (theFunc._116_4_ != 0x10e) { if (theFunc._116_4_ != 0xb4) { return; } goto LAB_00030338; } iVar1 = __divsi3(iVar4 * param_1,param_3); *param_5 = iVar1; iVar1 = __divsi3(iVar3 * param_2,param_4); *param_6 = iVar1; iVar2 = 0; if (*param_5 < 0) { LAB_000303a6: *param_5 = iVar2; iVar1 = *param_6; } else if (iVar4 <= *param_5) { iVar2 = iVar4 + -1; goto LAB_000303a6; } if (iVar1 < 0) { LAB_000303be: *param_6 = 0; return; } if (iVar1 < iVar3) { return; } LAB_000303b8: *param_6 = iVar3 + -1; return; } ### FUNC sensorXY2ScreenXY @ 000303cc /* Controller::sensorXY2ScreenXY(int, int, int, int, int&, int&) */ void __thiscall Controller::sensorXY2ScreenXY (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, int *param_6) { int iVar1; Controller *pCVar2; if (theFunc._116_4_ != 0x5a) { if (theFunc._116_4_ != 0x10e) { if (theFunc._116_4_ == 0xb4) { param_1 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); } else { param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); if (theFunc._116_4_ != 0) { return; } } iVar1 = __udivsi3(param_1 * param_3,*(undefined4 *)(this + 0x28)); *param_5 = iVar1; pCVar2 = this + 0x2c; param_1 = param_2; goto LAB_0003043e; } param_1 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU); param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU); } iVar1 = __udivsi3(param_2 * param_3,*(undefined4 *)(this + 0x2c)); *param_5 = iVar1; pCVar2 = this + 0x28; LAB_0003043e: iVar1 = __udivsi3(param_1 * param_4,*(undefined4 *)pCVar2); *param_6 = iVar1; return; } ### FUNC screenXY2SensorXY @ 00030454 /* Controller::screenXY2SensorXY(int, int, int, int, int&, int&) */ void __thiscall Controller::screenXY2SensorXY (Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5, int *param_6) { int local_1c; int local_18; int local_14; local_14 = __stack_chk_guard; screenXY2ClientXY(this,param_1,param_2,param_3,param_4,&local_18,&local_1c); Client2Buffer(this,local_18,local_1c,param_5,param_6); if (__stack_chk_guard == local_14) { return; } /* WARNING: Subroutine does not return */ __stack_chk_fail(); } ### FUNC FUN_000304ac @ 000304ac void FUN_000304ac(void) { FUN_00030670(); return; } ### FUNC FUN_000304b6 @ 000304b6 void FUN_000304b6(void *param_1) { FUN_00030670(); operator_delete(param_1); return; } ### FUNC FUN_0003057c @ 0003057c bool FUN_0003057c(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 *param_4) { int iVar1; undefined4 uVar2; iVar1 = FUN_0003186c(); if (iVar1 == 1) { param_4[1] = param_2; *param_4 = 1; uVar2 = *param_3; *(undefined1 *)(param_4 + 4) = 1; param_4[2] = uVar2; } return iVar1 == 1; } ### FUNC FUN_000305a4 @ 000305a4 bool FUN_000305a4(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 *param_4) { int iVar1; undefined4 uVar2; iVar1 = FUN_0003186c(); if (iVar1 == 1) { param_4[1] = param_2; *param_4 = 1; uVar2 = *param_3; *(undefined1 *)(param_4 + 4) = 1; param_4[2] = uVar2; } return iVar1 == 1; } ### FUNC FUN_000305cc @ 000305cc undefined4 * FUN_000305cc(undefined4 *param_1,int param_2) { int iVar1; *param_1 = 0; param_1[1] = 0; param_1[2] = 0; param_1[3] = 0; *(undefined1 *)(param_1 + 4) = 1; if ((param_2 != 0) && (iVar1 = FUN_00030ba0(param_2,&PTR_PTR_FUN_00031728_1_00068ce4,&PTR_PTR_FUN_00031728_1_00068e6c ,0), iVar1 != 0)) { param_1[3] = *(undefined4 *)(iVar1 + 8); } return param_1; } ### FUNC FUN_00030610 @ 00030610 undefined4 FUN_00030610(undefined4 param_1) { void *__addr; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28); __addr = DAT_00070a2c; while (__addr != (void *)0x0) { DAT_00070a2c = *(void **)((int)__addr + DAT_00070a24); munmap(__addr,0x1000); __addr = DAT_00070a2c; } DAT_00070a2c = __addr; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28); pthread_mutex_destroy((pthread_mutex_t *)&DAT_00070a28); pthread_key_delete(DAT_00070a18); return param_1; } ### FUNC FUN_00030670 @ 00030670 void FUN_00030670(void) { FUN_00031860(); return; } ### FUNC FUN_0003067c @ 0003067c void FUN_0003067c(void) { /* WARNING: Subroutine does not return */ FUN_00030e78("Pure virtual function called!"); } ### FUNC FUN_000306a8 @ 000306a8 void FUN_000306a8(void) { /* WARNING: Subroutine does not return */ FUN_00030e78("Deleted virtual function called!"); } ### FUNC FUN_000306d8 @ 000306d8 int * FUN_000306d8(void) { int iVar1; int *piVar2; undefined4 *puVar3; undefined4 *puVar4; undefined4 *puVar5; int iVar6; undefined4 *puVar7; piVar2 = (int *)pthread_getspecific(DAT_00070a18); if (piVar2 != (int *)0x0) { return piVar2; } pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28); piVar2 = DAT_00070a30; if (DAT_00070a30 == (int *)0x0) { piVar2 = (int *)0x0; puVar3 = (undefined4 *)mmap((void *)0x0,0x1000,3,0x22,-1,0); if (puVar3 == (undefined4 *)0xffffffff) goto LAB_0003076a; *(undefined4 **)((int)puVar3 + DAT_00070a24) = DAT_00070a2c; iVar1 = DAT_00070a1c; puVar5 = &DAT_00070a30; DAT_00070a2c = puVar3; if (DAT_00070a20 != 0) { puVar5 = (undefined4 *)((int)puVar3 + DAT_00070a1c * (DAT_00070a20 + -1)); iVar6 = DAT_00070a20; puVar7 = &DAT_00070a30; do { puVar4 = puVar3; *puVar7 = puVar4; iVar6 = iVar6 + -1; puVar3 = (undefined4 *)((int)puVar4 + iVar1); puVar7 = puVar4; } while (iVar6 != 0); } *puVar5 = 0; piVar2 = DAT_00070a30; } DAT_00070a30 = (int *)*piVar2; __aeabi_memclr4(piVar2,DAT_00070a1c); LAB_0003076a: pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28); if (piVar2 != (int *)0x0) { pthread_setspecific(DAT_00070a18,piVar2); return piVar2; } /* WARNING: Subroutine does not return */ FUN_00030e78("Can\'t allocate thread-specific C++ runtime info block."); } ### FUNC FUN_0003080c @ 0003080c void FUN_0003080c(void) { pthread_getspecific(DAT_00070a18); return; } ### FUNC FUN_00030824 @ 00030824 int FUN_00030824(int param_1) { int iVar1; iVar1 = memalign(8,param_1 + 0x90); if (iVar1 != 0) { __aeabi_memclr8(iVar1,0x90); return iVar1 + 0x90; } /* WARNING: Subroutine does not return */ FUN_00030e78("Not enough memory to allocate exception!"); } ### FUNC FUN_00030880 @ 00030880 void FUN_00030880(int param_1) { if (*(code **)(param_1 + -0x88) != (code *)0x0) { (**(code **)(param_1 + -0x88))(); } free((void *)(param_1 + -0x90)); return; } ### FUNC FUN_000308d8 @ 000308d8 undefined4 FUN_000308d8(undefined4 *param_1) { undefined4 *puVar1; int iVar2; undefined4 *puVar3; uint uVar4; bool bVar5; puVar1 = (undefined4 *)FUN_000306d8(); iVar2 = FUN_00030ac0(*param_1,param_1[1]); puVar3 = (undefined4 *)*puVar1; if ((iVar2 == 0) && (bVar5 = puVar3 != (undefined4 *)0x0, puVar3 = (undefined4 *)0x0, bVar5)) { /* WARNING: Subroutine does not return */ FUN_00030e78("Can\'t handle non-C++ exception!"); } uVar4 = (int)param_1[-8] >> 0x1f; param_1[-8] = (param_1[-8] + uVar4 ^ uVar4) + 1; if (puVar3 != param_1 + -0xe) { param_1[-9] = puVar3; *puVar1 = param_1 + -0xe; } puVar1[1] = puVar1[1] + -1; return param_1[-1]; } ### FUNC FUN_0003094c @ 0003094c void FUN_0003094c(void) { int *piVar1; int iVar2; int iVar3; int iVar4; piVar1 = (int *)FUN_0003080c(); iVar4 = *piVar1; if (iVar4 != 0) { iVar2 = FUN_00030ac0(*(undefined4 *)(iVar4 + 0x38),*(undefined4 *)(iVar4 + 0x3c)); if (iVar2 != 0) { iVar2 = *(int *)(iVar4 + 0x18); if (iVar2 < 0) { iVar3 = iVar2 + 1; if (iVar3 == 0) { *piVar1 = *(int *)(iVar4 + 0x14); *(undefined4 *)(iVar4 + 0x18) = 0; return; } } else { iVar3 = iVar2 + -1; if (iVar3 == 0) { *piVar1 = *(int *)(iVar4 + 0x14); FUN_00030880(iVar4 + 0x90); return; } if (iVar2 < 1) { /* WARNING: Subroutine does not return */ FUN_00030e78("Internal error during exception handling!"); } } *(int *)(iVar4 + 0x18) = iVar3; return; } *piVar1 = 0; _Unwind_DeleteException(iVar4 + 0x38); } return; } ### FUNC FUN_000309e0 @ 000309e0 void FUN_000309e0(int param_1,undefined4 param_2,undefined4 param_3,undefined1 param_4) { int iVar1; int unaff_r5; code *UNRECOVERED_JUMPTABLE; *(undefined4 *)(param_1 + -0x8c) = param_2; *(undefined4 *)(param_1 + -0x88) = param_3; *(undefined4 *)(param_1 + -0x54) = 0x474e5543; *(undefined4 *)(param_1 + -0x58) = 0x432b2b00; *(undefined4 *)(param_1 + -0x50) = 0x30a09; iVar1 = FUN_00030a16(); *(undefined1 *)(iVar1 + unaff_r5) = param_4; /* WARNING: Could not recover jumptable at 0x000309fe. Too many branches */ /* WARNING: Treating indirect jump as call */ (*UNRECOVERED_JUMPTABLE)(); return; } ### FUNC FUN_00030a08 @ 00030a08 void FUN_00030a08(undefined4 param_1,int param_2) { FUN_00030880(param_2 + 0x58); return; } ### FUNC FUN_00030a16 @ 00030a16 void FUN_00030a16(int param_1) { int iVar1; undefined4 uVar2; iVar1 = FUN_000306d8(); uVar2 = FUN_00031810(); *(undefined4 *)(param_1 + 0xc) = uVar2; uVar2 = FUN_000317dc(); *(undefined4 *)(param_1 + 0x10) = uVar2; *(int *)(iVar1 + 4) = *(int *)(iVar1 + 4) + 1; ___Unwind_RaiseException(param_1 + 0x38); /* WARNING: Subroutine does not return */ FUN_00030efc(param_1 + 0x38); } ### FUNC FUN_00030a44 @ 00030a44 void FUN_00030a44(void) { int *piVar1; int iVar2; int *extraout_r1; undefined1 uVar3; uint uVar4; int unaff_r5; code *UNRECOVERED_JUMPTABLE; piVar1 = (int *)FUN_000306d8(); iVar2 = *piVar1; if (iVar2 == 0) { /* WARNING: Subroutine does not return */ FUN_00030e78("Attempting to rethrow an exception that doesn\'t exist!"); } uVar4 = *(uint *)(iVar2 + 0x38) ^ 0x432b2b00 | *(uint *)(iVar2 + 0x3c) ^ 0x474e5543; if (uVar4 == 0) { *(int *)(iVar2 + 0x18) = -*(int *)(iVar2 + 0x18); FUN_00030a16(); piVar1 = extraout_r1; } uVar3 = (undefined1)uVar4; *piVar1 = 0; iVar2 = FUN_00030a16(); *(undefined1 *)(iVar2 + unaff_r5) = uVar3; /* WARNING: Could not recover jumptable at 0x00030a82. Too many branches */ /* WARNING: Treating indirect jump as call */ (*UNRECOVERED_JUMPTABLE)(); return; } ### FUNC FUN_00030ac0 @ 00030ac0 bool FUN_00030ac0(int param_1,int param_2) { return param_1 == 0x432b2b00 && param_2 == 0x474e5543; } ### FUNC FUN_00030ae8 @ 00030ae8 undefined4 FUN_00030ae8(void) { int iVar1; undefined4 uVar2; iVar1 = FUN_000306d8(); uVar2 = 0; if ((iVar1 != 0) && (uVar2 = 1, *(int *)(iVar1 + 4) != 0)) { uVar2 = 0; } return uVar2; } ### FUNC FUN_00030b06 @ 00030b06 void FUN_00030b06(int param_1) { int iVar1; if ((param_1 != 0) && (iVar1 = FUN_00056e98(param_1 + -0x90,1), iVar1 == 1)) { FUN_00030880(param_1); } return; } ### FUNC FUN_00030b26 @ 00030b26 void FUN_00030b26(int param_1) { if (param_1 != 0) { FUN_00056e60(param_1 + -0x90,1); } return; } ### FUNC FUN_00030b40 @ 00030b40 void FUN_00030b40(undefined4 *param_1) { if (param_1 != (undefined4 *)0x0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28); *param_1 = DAT_00070a30; DAT_00070a30 = param_1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28); } return; } ### FUNC operator.delete @ 00030b70 /* operator delete(void*) */ void operator_delete(void *param_1) { if (param_1 != (void *)0x0) { free(param_1); } return; } ### FUNC operator.delete[] @ 00030b7e /* operator delete[](void*) */ void operator_delete__(void *param_1) { operator_delete(param_1); return; } ### FUNC FUN_00030b88 @ 00030b88 void FUN_00030b88(void *param_1) { if (param_1 != (void *)0x0) { free(param_1); } return; } ### FUNC FUN_00030b96 @ 00030b96 void FUN_00030b96(void) { FUN_00030b88(); return; } ### FUNC FUN_00030ba0 @ 00030ba0 int FUN_00030ba0(int *param_1,undefined4 param_2,undefined4 param_3,int param_4) { int iVar1; int iVar2; int *piVar3; undefined4 uVar4; undefined4 uVar5; int iVar6; int *local_2c; undefined4 local_28; undefined4 local_24; int local_20; undefined4 local_1c; int local_18; iVar1 = (int)param_1 + *(int *)(*param_1 + -8); uVar4 = *(undefined4 *)(*(int *)((int)param_1 + *(int *)(*param_1 + -8)) + -4); iVar2 = FUN_00030c3c(iVar1,uVar4,0); if (iVar2 == 0) { return 0; } if (param_4 != -2) { if ((-1 < param_4) && (iVar2 != -1)) { return (int)param_1 - param_4; } local_1c = 0; local_18 = 0; iVar6 = iVar1; uVar5 = uVar4; if (iVar2 != -1) { iVar6 = iVar2; uVar5 = param_3; } local_2c = param_1; local_28 = param_2; local_24 = param_3; local_20 = param_4; FUN_00030d20(iVar6,uVar5,&local_2c); if (1 < local_18 + 1U) { return local_18; } } iVar6 = 0; if ((iVar2 != -1) && (piVar3 = (int *)FUN_00030c3c(iVar1,uVar4,param_1,param_2), iVar6 = iVar2, piVar3 != param_1)) { iVar6 = 0; } return iVar6; } ### FUNC FUN_00030c3c @ 00030c3c int * FUN_00030c3c(int *param_1,int *param_2,int *param_3,undefined4 param_4) { int iVar1; int iVar2; int *piVar3; int *piVar4; uint uVar5; int *piVar6; uint uVar7; while( true ) { iVar1 = FUN_0003186c(param_2,param_4); if (iVar1 != 0) { piVar4 = param_1; if (param_1 != param_3) { piVar4 = (int *)0x0; } if (param_3 == (int *)0x0) { return param_1; } return piVar4; } iVar1 = (**(code **)(*param_2 + 0xc))(param_2); if (iVar1 != 1) break; param_2 = (int *)param_2[2]; } if (iVar1 != 0) { if (iVar1 == 2) { if (param_2[3] == 0) { return (int *)0x0; } iVar1 = *param_1; uVar7 = 0; piVar4 = (int *)0x0; do { uVar5 = param_2[uVar7 * 2 + 5]; piVar6 = piVar4; if ((uVar5 & 2) != 0) { iVar2 = (int)uVar5 >> 8; if ((uVar5 & 1) != 0) { iVar2 = *(int *)(iVar1 + iVar2); } piVar3 = (int *)FUN_00030c3c((int)param_1 + iVar2,param_2[uVar7 * 2 + 4],param_3,param_4); if (piVar3 != (int *)0x0) { if (piVar3 == (int *)0xffffffff) { return (int *)0xffffffff; } piVar6 = piVar3; if ((piVar4 != (int *)0x0) && (piVar6 = piVar4, piVar4 != piVar3)) { return (int *)0xffffffff; } } } uVar7 = uVar7 + 1; piVar4 = piVar6; if ((uint)param_2[3] <= uVar7) { return piVar6; } } while( true ); } __assert2("/usr/local/google/buildbot/src/android/ndk-release-r16/out/stlport/ndk/sources/cxx-stl/gabi++/src/dynamic_cast.cc" ,0xad, "const void *(anonymous namespace)::walk_object(const void *, const abi::__class_type_info *, const void *, const abi::__class_type_info *)" ,&DAT_00030d1c); } return (int *)0x0; } ### FUNC FUN_00030d20 @ 00030d20 void FUN_00030d20(int *param_1,int *param_2,int *param_3) { int iVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; uint uVar6; iVar1 = param_3[4]; iVar2 = FUN_0003186c(param_2,param_3[2]); if (iVar2 == 1) { param_3[4] = (int)param_1; } if ((((int *)*param_3 == param_1) && (param_3[4] != 0)) && (iVar2 = FUN_0003186c(param_2,param_3[1]), iVar2 == 1)) { if (param_3[5] == 0) { param_3[5] = param_3[4]; } else if (param_3[5] != param_3[4]) { param_3[5] = -1; } } else { iVar2 = (**(code **)(*param_2 + 0xc))(param_2); if (iVar2 != 0) { if (iVar2 == 2) { uVar3 = param_2[3]; if (uVar3 != 0) { iVar2 = *param_1; uVar6 = 0; do { uVar5 = param_2[uVar6 * 2 + 5]; if ((uVar5 & 2) != 0) { iVar4 = (int)uVar5 >> 8; if ((uVar5 & 1) != 0) { iVar4 = *(int *)(iVar2 + iVar4); } FUN_00030d20((int)param_1 + iVar4,param_2[uVar6 * 2 + 4],param_3); if (param_3[5] == -1) break; uVar3 = param_2[3]; } uVar6 = uVar6 + 1; } while (uVar6 < uVar3); } } else if (iVar2 == 1) { FUN_00030d20(param_1,param_2[2],param_3); } else { __assert2("/usr/local/google/buildbot/src/android/ndk-release-r16/out/stlport/ndk/sources/cxx-stl/gabi++/src/dynamic_cast.cc" ,0x105, "void (anonymous namespace)::base_to_derived_cast(const void *, const abi::__class_type_info *, (anonymous namespace)::cast_context *)" ,&DAT_00030dfc); } } } param_3[4] = iVar1; return; } ### FUNC FUN_00030e00 @ 00030e00 void FUN_00030e00(undefined4 *param_1) { *param_1 = &PTR_FUN_00030e10_1_00068d34; return; } ### FUNC FUN_00030e10 @ 00030e10 void FUN_00030e10(void) { return; } ### FUNC FUN_00030e12 @ 00030e12 void FUN_00030e12(void *param_1) { operator_delete(param_1); return; } ### FUNC FUN_00030e64 @ 00030e64 bool FUN_00030e64(void) { int iVar1; iVar1 = FUN_000306d8(); return *(int *)(iVar1 + 4) != 0; } ### FUNC FUN_00030e78 @ 00030e78 void FUN_00030e78(undefined4 param_1) { int iVar1; code *pcVar2; fprintf((FILE *)isupper,"PANIC:GAbi++:%s\n",param_1); iVar1 = dlopen("liblog.so",0); if (iVar1 != 0) { pcVar2 = (code *)dlsym(iVar1,"__android_log_print"); if (pcVar2 != (code *)0x0) { (*pcVar2)(7,"GAbi++",param_1); } dlclose(iVar1); } /* WARNING: Subroutine does not return */ FUN_0003178c(); } ### FUNC FUN_00030efc @ 00030efc void FUN_00030efc(void) { FUN_000308d8(); /* WARNING: Subroutine does not return */ FUN_0003178c(); } ### FUNC FUN_00030f08 @ 00030f08 void FUN_00030f08(uint *param_1,uint param_2,int param_3,int param_4,undefined4 param_5) { char cVar1; uint uVar2; int iVar3; int iVar4; uint uVar5; int iVar6; int iVar7; int *piVar8; char *pcVar9; char *pcVar10; uint uVar11; int *piVar12; char *local_3c; char *local_24; char *local_20; char *local_1c; char *local_18; uVar2 = 3; *param_1 = 0; param_1[1] = 0; param_1[2] = 0; param_1[3] = 0; param_1[4] = 0; param_1[5] = 0; param_1[6] = 3; uVar11 = param_2 & 1; if (uVar11 == 0) { if ((int)(param_2 << 0x1e) < 0) { if ((param_2 & 0xc) != 0xc) goto LAB_00030f52; uVar2 = 2; } param_1[6] = uVar2; return; } if ((param_2 << 0x1c) >> 0x1d != 0) { param_1[6] = 3; return; } LAB_00030f52: local_1c = (char *)_Unwind_GetLanguageSpecificData(param_5); if (local_1c == (char *)0x0) { param_1[6] = 8; return; } param_1[3] = (uint)local_1c; local_3c = (char *)0x0; _Unwind_VRS_Get(param_5,0,0xf,0,&local_18); pcVar10 = local_18; iVar3 = _Unwind_GetRegionStart(param_5); cVar1 = *local_1c; local_1c = local_1c + 1; iVar4 = FUN_0004e23c(&local_1c,cVar1); pcVar9 = local_1c + 1; uVar2 = (((uint)pcVar10 & 0xfffffffe) - 1) - iVar3; if (iVar4 != 0) { iVar3 = iVar4; } cVar1 = *local_1c; local_1c = pcVar9; if (cVar1 != -1) { iVar4 = FUN_0004e1d4(&local_1c); local_3c = local_1c + iVar4; } cVar1 = *local_1c; local_1c = local_1c + 1; iVar4 = FUN_0004e1d4(&local_1c); local_20 = local_1c; pcVar10 = local_1c + iVar4; if (0 < iVar4) { do { uVar5 = FUN_0004e23c(&local_20,cVar1); iVar4 = FUN_0004e23c(&local_20,cVar1); iVar6 = FUN_0004e23c(&local_20,cVar1); iVar7 = FUN_0004e1d4(&local_20); if ((uVar5 <= uVar2) && (uVar2 < iVar4 + uVar5)) { if (iVar6 == 0) { param_1[6] = 8; return; } uVar2 = iVar6 + iVar3; if (iVar7 == 0) { uVar11 = 6; if ((param_2 & 6) == 2) { *param_1 = 0; param_1[1] = 0; param_1[4] = uVar2; } else { uVar11 = 8; } param_1[6] = uVar11; return; } local_24 = pcVar10 + iVar7 + -1; pcVar10 = (char *)(param_4 + 0x58); goto LAB_000310bc; } } while ((uVar5 <= uVar2) && (local_20 < pcVar10)); } LAB_000311de: /* WARNING: Subroutine does not return */ FUN_00030efc(param_4); LAB_000310bc: pcVar9 = local_24; uVar5 = FUN_0004e1f8(&local_24); if ((int)uVar5 < 1) { if ((int)uVar5 < 0) { if (param_3 != 1) goto joined_r0x00031094; iVar3 = *(int *)(param_4 + -0x34); if ((iVar3 == 0) || (local_3c == (char *)0x0)) goto LAB_000311de; piVar12 = (int *)(local_3c + (uVar5 ^ 0xffffffff) * 4); do { if (*piVar12 == 0) { if (uVar11 != 0) goto LAB_0003119e; goto joined_r0x0003112a; } piVar8 = *(int **)(*piVar12 + (int)piVar12); local_18 = pcVar10; iVar4 = (**(code **)(*piVar8 + 8))(piVar8,iVar3,&local_18); piVar12 = piVar12 + 1; } while (iVar4 == 0); } else if ((param_2 & 6) == 2) goto LAB_0003119e; } else { if (local_3c == (char *)0x0) goto LAB_000311de; iVar3 = *(int *)(local_3c + uVar5 * -4); if ((iVar3 == 0) || (piVar12 = *(int **)(iVar3 + (int)(local_3c + uVar5 * -4)), piVar12 == (int *)0x0)) { joined_r0x00031094: if ((param_2 & 4) != 0 || uVar11 != 0) { LAB_0003119e: param_1[4] = uVar2; param_1[5] = (uint)pcVar10; param_1[6] = 6; *param_1 = uVar5; param_1[1] = (int)uVar5 >> 0x1f; param_1[2] = (uint)pcVar9; return; } joined_r0x0003112a: if ((param_2 & 8) == 0) goto LAB_000311de; } else if (param_3 == 1) { iVar3 = *(int *)(param_4 + -0x34); local_18 = pcVar10; if (iVar3 == 0) goto LAB_000311de; iVar4 = FUN_00030ba0(iVar3,&PTR_PTR_FUN_00031728_1_00068d20,&PTR_PTR_FUN_00031728_1_00068dc4,0 ); if (iVar4 != 0) { local_18 = *(char **)pcVar10; } iVar3 = (**(code **)(*piVar12 + 8))(piVar12,iVar3,&local_18); if (iVar3 == 1) { if (uVar11 != 0) { *param_1 = uVar5; param_1[1] = (int)uVar5 >> 0x1f; param_1[2] = (uint)pcVar9; param_1[4] = uVar2; param_1[5] = (uint)local_18; param_1[6] = 6; return; } goto joined_r0x0003112a; } } } local_18 = local_24; iVar3 = FUN_0004e1f8(&local_18); if (iVar3 == 0) { param_1[6] = 8; return; } local_24 = local_24 + iVar3; goto LAB_000310bc; } ### FUNC FUN_000311ec @ 000311ec undefined4 FUN_000311ec(int param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5) { undefined4 uVar1; int *piVar2; int iVar3; if (param_3 != 0) { piVar2 = (int *)(param_3 + param_1 * -4); iVar3 = *piVar2; uVar1 = 0; if (iVar3 != 0) { uVar1 = *(undefined4 *)(iVar3 + (int)piVar2); } return uVar1; } /* WARNING: Subroutine does not return */ FUN_00030efc(param_5); } ### FUNC FUN_0003120a @ 0003120a undefined4 FUN_0003120a(uint param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5, undefined4 param_6,undefined4 param_7) { int *piVar1; int iVar2; int *piVar3; undefined4 local_18; if (param_3 == 0) { /* WARNING: Subroutine does not return */ FUN_00030efc(param_7); } piVar3 = (int *)(param_3 + ~param_1 * 4); do { if (*piVar3 == 0) { return 1; } piVar1 = *(int **)(*piVar3 + (int)piVar3); local_18 = param_6; iVar2 = (**(code **)(*piVar1 + 8))(piVar1,param_5,&local_18); piVar3 = piVar3 + 1; } while (iVar2 != 1); return 0; } ### FUNC FUN_00031256 @ 00031256 void FUN_00031256(uint param_1,undefined4 param_2,uint *param_3) { uint uVar1; uint local_18; local_18 = param_1; _Unwind_VRS_Set(param_2,0,0,0,&local_18); local_18 = *param_3; _Unwind_VRS_Set(param_2,0,1,0,&local_18); uVar1 = param_3[4]; _Unwind_VRS_Get(param_2,0,0xf,0,&local_18); local_18 = local_18 & 1 | uVar1; _Unwind_VRS_Set(param_2,0,0xf,0,&local_18); return; } ### FUNC FUN_000312cc @ 000312cc undefined4 FUN_000312cc(void) { int iVar1; undefined4 uVar2; iVar1 = __gnu_unwind_frame(); uVar2 = 8; if (iVar1 != 0) { uVar2 = 9; } return uVar2; } ### FUNC FUN_000312e2 @ 000312e2 void FUN_000312e2(int param_1,undefined4 param_2,undefined4 *param_3) { undefined4 local_14; _Unwind_VRS_Get(param_2,0,0xd,0,&local_14); *(undefined4 *)(param_1 + 0x20) = local_14; *(undefined4 *)(param_1 + 0x24) = param_3[5]; *(undefined4 *)(param_1 + 0x28) = *param_3; *(undefined4 *)(param_1 + 0x30) = param_3[4]; return; } ### FUNC FUN_00031312 @ 00031312 void FUN_00031312(int param_1,undefined4 *param_2) { param_2[5] = *(undefined4 *)(param_1 + 0x24); *param_2 = *(undefined4 *)(param_1 + 0x28); param_2[1] = 0; param_2[4] = *(undefined4 *)(param_1 + 0x30); return; } ### FUNC FUN_00031322 @ 00031322 void FUN_00031322(void) { __cxa_begin_cleanup(); return; } ### FUNC FUN_0003132c @ 0003132c void FUN_0003132c(int param_1,undefined4 param_2,int *param_3) { undefined1 *puVar1; char *pcVar2; int iVar3; int iVar4; int iVar5; char *local_18; __cxa_begin_cleanup(); puVar1 = (undefined1 *)_Unwind_GetLanguageSpecificData(param_2); local_18 = puVar1 + 1; FUN_0004e23c(&local_18,*puVar1); _Unwind_GetRegionStart(param_2); pcVar2 = (char *)0x0; iVar5 = -1; if (*local_18 != -1) { local_18 = local_18 + 1; iVar3 = FUN_0004e1d4(&local_18); pcVar2 = local_18 + iVar3; } iVar3 = *param_3; do { iVar4 = iVar5 * 4; iVar5 = iVar5 + 1; } while (*(int *)(pcVar2 + iVar4 + iVar3 * -4) != 0); *(int *)(param_1 + 0x28) = iVar5; *(undefined4 *)(param_1 + 0x30) = 4; *(char **)(param_1 + 0x34) = pcVar2 + iVar3 * -4 + -4; return; } ### FUNC FUN_00031390 @ 00031390 void FUN_00031390(void) { undefined4 *puVar1; puVar1 = (undefined4 *)FUN_00030e00(); *puVar1 = &PTR_FUN_000313a8_1_00068d70; return; } ### FUNC FUN_000313a8 @ 000313a8 void FUN_000313a8(void) { FUN_00030e10(); return; } ### FUNC FUN_000313b2 @ 000313b2 void FUN_000313b2(void) { void *pvVar1; pvVar1 = (void *)FUN_00030e10(); operator_delete(pvVar1); return; } ### FUNC operator.new @ 00031440 /* operator new(unsigned int) */ void * operator_new(uint param_1) { void *pvVar1; code *pcVar2; undefined4 *puVar3; while( true ) { pvVar1 = malloc(param_1); if (pvVar1 != (void *)0x0) { return pvVar1; } pcVar2 = (code *)FUN_00056e60(&DAT_00070a34,0); if (pcVar2 == (code *)0x0) break; (*pcVar2)(); } FUN_00030824(4); puVar3 = (undefined4 *)FUN_00030e00(); *puVar3 = &PTR_FUN_000313a8_1_00068d70; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC FUN_000314a8 @ 000314a8 void * FUN_000314a8(uint param_1) { void *pvVar1; pvVar1 = operator_new(param_1); return pvVar1; } ### FUNC operator.new[] @ 000314ca /* operator new[](unsigned int) */ void * operator_new__(uint param_1) { void *pvVar1; pvVar1 = operator_new(param_1); return pvVar1; } ### FUNC __gxx_personality_v0 @ 000314e4 undefined4 __gxx_personality_v0(int param_1,int *param_2,int param_3) { undefined4 uVar1; int iVar2; int iVar3; uint uVar4; int *piVar5; int *local_38; int local_34; int local_30; int local_2c; int local_28; int local_24; int local_20; iVar2 = *param_2; iVar3 = param_2[1]; uVar4 = 1; if (param_1 != 0) { if (param_1 == 2) goto LAB_00031616; if (param_1 != 1) { return 9; } piVar5 = (int *)param_2[8]; _Unwind_VRS_Get(param_3,0,0xd,0,&local_38); uVar4 = 6; if (piVar5 != local_38) { uVar4 = 2; } } local_38 = param_2; _Unwind_VRS_Set(param_3,0,0xc,0,&local_38); if (param_3 == 0) { return 3; } if ((uVar4 & 1) == 0) { if (-1 < (int)(uVar4 << 0x1e)) { return 3; } if ((int)(uVar4 << 0x1d) < 0) { if (iVar3 == 0x474e5543 && iVar2 == 0x432b2b00) { local_38 = (int *)param_2[-5]; local_30 = param_2[-4]; local_2c = param_2[-3]; local_28 = param_2[-2]; local_24 = param_2[-1]; local_34 = (int)local_38 >> 0x1f; FUN_00031312(param_2,&local_38); } else { FUN_00030f08(&local_38,uVar4,0,param_2,param_3); if (local_20 != 6) { /* WARNING: Subroutine does not return */ FUN_00030efc(param_2); } } FUN_00031256(param_2,param_3,&local_38); FUN_0003132c(param_2,param_3,&local_38); return 7; } FUN_00030f08(&local_38,uVar4,iVar3 == 0x474e5543 && iVar2 == 0x432b2b00,param_2,param_3); if (local_20 == 6) { FUN_00031256(param_2,param_3,&local_38); FUN_00031322(param_2); return 7; } } else { FUN_00030f08(&local_38,uVar4,iVar3 == 0x474e5543 && iVar2 == 0x432b2b00,param_2,param_3); if (local_20 == 6) { if (iVar3 != 0x474e5543 || iVar2 != 0x432b2b00) { return 6; } param_2[-5] = (int)local_38; param_2[-4] = local_30; param_2[-3] = local_2c; param_2[-2] = local_28; param_2[-1] = local_24; FUN_000312e2(param_2,param_3,&local_38); return 6; } } LAB_00031616: uVar1 = FUN_000312cc(param_2,param_3); return uVar1; } ### FUNC FUN_000316a0 @ 000316a0 void FUN_000316a0(void) { FUN_0004e480(); return; } ### FUNC FUN_000316aa @ 000316aa void FUN_000316aa(void *param_1) { FUN_0004e480(); operator_delete(param_1); return; } ### FUNC FUN_00031728 @ 00031728 void FUN_00031728(void) { FUN_000304ac(); return; } ### FUNC FUN_00031732 @ 00031732 void FUN_00031732(void *param_1) { FUN_000304ac(); operator_delete(param_1); return; } ### FUNC FUN_00031784 @ 00031784 void FUN_00031784(void) { /* WARNING: Subroutine does not return */ FUN_0003178c(); } ### FUNC FUN_0003178c @ 0003178c void FUN_0003178c(void) { FUN_00056e60(&DAT_0006b89c,0); FUN_000317b8(); DAT_deadcab1 = 0; /* WARNING: Subroutine does not return */ abort(); } ### FUNC FUN_000317a4 @ 000317a4 void FUN_000317a4(void) { DAT_deadcab1 = 0; /* WARNING: Subroutine does not return */ abort(); } ### FUNC FUN_000317b8 @ 000317b8 /* WARNING: Control flow encountered bad instruction data */ void FUN_000317b8(code *param_1) { if (param_1 == (code *)0x0) { param_1 = FUN_000317a4; } (*param_1)(); FUN_000317a4(); FUN_000308d8(); FUN_0003094c(); FUN_000317a4(); /* WARNING: Bad instruction - Truncating control flow here */ halt_baddata(); } ### FUNC FUN_000317dc @ 000317dc void FUN_000317dc(void) { FUN_00056e60(&DAT_0006b89c,0); return; } ### FUNC FUN_000317f0 @ 000317f0 void FUN_000317f0(int param_1) { if (param_1 == 0) { param_1 = 0x317a5; } FUN_00057c50(&DAT_0006b89c,param_1); return; } ### FUNC FUN_00031810 @ 00031810 void FUN_00031810(void) { FUN_00056e60(&DAT_0006b8a0,0); return; } ### FUNC FUN_00031824 @ 00031824 void FUN_00031824(int param_1) { if (param_1 == 0) { param_1 = 0x317a5; } FUN_00057c50(&DAT_0006b8a0,param_1); return; } ### FUNC FUN_00031844 @ 00031844 void FUN_00031844(void) { code *pcVar1; pcVar1 = (code *)FUN_00056e60(&DAT_0006b8a0,0); if (pcVar1 != (code *)0x0) { (*pcVar1)(); } /* WARNING: Subroutine does not return */ FUN_0003178c(); } ### FUNC FUN_00031860 @ 00031860 void FUN_00031860(void) { return; } ### FUNC FUN_00031862 @ 00031862 void FUN_00031862(void *param_1) { operator_delete(param_1); return; } ### FUNC FUN_0003186c @ 0003186c bool FUN_0003186c(int param_1,int param_2) { int iVar1; iVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4)); return iVar1 == 0; } ### FUNC FUN_00031886 @ 00031886 bool FUN_00031886(int param_1,int param_2) { int iVar1; iVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4)); return iVar1 != 0; } ### FUNC FUN_0003189e @ 0003189e uint FUN_0003189e(int param_1,int param_2) { uint uVar1; uVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4)); return uVar1 >> 0x1f; } ### FUNC FUN_000318b0 @ 000318b0 void FUN_000318b0(void) { undefined4 *puVar1; puVar1 = (undefined4 *)FUN_00030e00(); *puVar1 = &PTR_FUN_000318c8_1_00068e00; return; } ### FUNC FUN_000318c8 @ 000318c8 void FUN_000318c8(void) { FUN_00030e10(); return; } ### FUNC FUN_000318d2 @ 000318d2 void FUN_000318d2(void) { void *pvVar1; pvVar1 = (void *)FUN_00030e10(); operator_delete(pvVar1); return; } ### FUNC FUN_000318f4 @ 000318f4 void FUN_000318f4(void) { undefined4 *puVar1; puVar1 = (undefined4 *)FUN_00030e00(); *puVar1 = &PTR_FUN_0003190c_1_00068e14; return; } ### FUNC FUN_0003190c @ 0003190c void FUN_0003190c(void) { FUN_00030e10(); return; } ### FUNC FUN_00031916 @ 00031916 void FUN_00031916(void) { void *pvVar1; pvVar1 = (void *)FUN_00030e10(); operator_delete(pvVar1); return; } ### FUNC FUN_00031938 @ 00031938 void FUN_00031938(void) { FUN_000304ac(); return; } ### FUNC FUN_00031942 @ 00031942 void FUN_00031942(void *param_1) { FUN_000304ac(); operator_delete(param_1); return; } ### FUNC __stl_throw_runtime_error @ 00031b54 /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::__stl_throw_runtime_error(char const*) */ void std::__stl_throw_runtime_error(char *param_1) { undefined4 *puVar1; size_t sVar2; size_t *__dest; size_t *psVar3; int *local_38; undefined1 auStack_30 [4]; undefined1 auStack_2c [20]; char *local_18; puVar1 = (undefined4 *)FUN_00030824(0x108); FUN_00031c38(auStack_2c,param_1,auStack_30); FUN_00030e00(puVar1); *puVar1 = &PTR____Named_exception_00068e80; sVar2 = strlen(local_18); sVar2 = sVar2 + 1; if (sVar2 < 0x101) { __dest = puVar1 + 1; puVar1[0x41] = __dest; } else { __dest = (size_t *)malloc(sVar2); puVar1[0x41] = __dest; psVar3 = puVar1 + 1; if (__dest == (size_t *)0x0) { puVar1[0x41] = psVar3; __dest = psVar3; sVar2 = 0x100; } else { *psVar3 = sVar2; } } local_38 = puVar1 + 0x41; strncpy((char *)__dest,local_18,sVar2 - 1); *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; *puVar1 = &PTR____Named_exception_00068ec0; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar1,&runtime_error::typeinfo,__Named_exception::~__Named_exception); } ### FUNC FUN_00031c38 @ 00031c38 undefined4 * FUN_00031c38(undefined4 *param_1,char *param_2) { size_t sVar1; undefined4 *puVar2; uint uVar3; uint local_18; param_1[4] = param_1; param_1[5] = param_1; sVar1 = strlen(param_2); uVar3 = sVar1 + 1; if (uVar3 == 0) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (uVar3 < 0x11) { puVar2 = param_1; if (sVar1 == 0) goto LAB_00031c9c; } else { local_18 = uVar3; if (uVar3 < 0x81) { puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); uVar3 = local_18; } else { puVar2 = (undefined4 *)operator_new(uVar3); } param_1[4] = puVar2; param_1[5] = puVar2; *param_1 = (undefined1 *)((int)puVar2 + uVar3); } __aeabi_memcpy(puVar2,param_2); puVar2 = (undefined4 *)((int)puVar2 + sVar1); LAB_00031c9c: param_1[4] = puVar2; *(undefined1 *)puVar2 = 0; return param_1; } ### FUNC __stl_throw_range_error @ 00031cec /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::__stl_throw_range_error(char const*) */ void std::__stl_throw_range_error(char *param_1) { undefined4 *puVar1; size_t sVar2; size_t *__dest; size_t *psVar3; int *local_38; undefined1 auStack_30 [4]; undefined1 auStack_2c [20]; char *local_18; puVar1 = (undefined4 *)FUN_00030824(0x108); FUN_00031c38(auStack_2c,param_1,auStack_30); FUN_00030e00(puVar1); *puVar1 = &PTR____Named_exception_00068e80; sVar2 = strlen(local_18); sVar2 = sVar2 + 1; if (sVar2 < 0x101) { __dest = puVar1 + 1; puVar1[0x41] = __dest; } else { __dest = (size_t *)malloc(sVar2); puVar1[0x41] = __dest; psVar3 = puVar1 + 1; if (__dest == (size_t *)0x0) { puVar1[0x41] = psVar3; __dest = psVar3; sVar2 = 0x100; } else { *psVar3 = sVar2; } } local_38 = puVar1 + 0x41; strncpy((char *)__dest,local_18,sVar2 - 1); *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; *puVar1 = &PTR____Named_exception_00068f60; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar1,&range_error::typeinfo,__Named_exception::~__Named_exception); } ### FUNC __stl_throw_out_of_range @ 00031dd0 /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::__stl_throw_out_of_range(char const*) */ void std::__stl_throw_out_of_range(char *param_1) { undefined4 *puVar1; size_t sVar2; size_t *__dest; size_t *psVar3; int *local_38; undefined1 auStack_30 [4]; undefined1 auStack_2c [20]; char *local_18; puVar1 = (undefined4 *)FUN_00030824(0x108); FUN_00031c38(auStack_2c,param_1,auStack_30); FUN_00030e00(puVar1); *puVar1 = &PTR____Named_exception_00068e80; sVar2 = strlen(local_18); sVar2 = sVar2 + 1; if (sVar2 < 0x101) { __dest = puVar1 + 1; puVar1[0x41] = __dest; } else { __dest = (size_t *)malloc(sVar2); puVar1[0x41] = __dest; psVar3 = puVar1 + 1; if (__dest == (size_t *)0x0) { puVar1[0x41] = psVar3; __dest = psVar3; sVar2 = 0x100; } else { *psVar3 = sVar2; } } local_38 = puVar1 + 0x41; strncpy((char *)__dest,local_18,sVar2 - 1); *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; *puVar1 = &PTR____Named_exception_00068f40; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar1,&out_of_range::typeinfo,__Named_exception::~__Named_exception); } ### FUNC __stl_throw_length_error @ 00031eb4 /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::__stl_throw_length_error(char const*) */ void std::__stl_throw_length_error(char *param_1) { undefined4 *puVar1; size_t sVar2; size_t *__dest; size_t *psVar3; int *local_38; undefined1 auStack_30 [4]; undefined1 auStack_2c [20]; char *local_18; puVar1 = (undefined4 *)FUN_00030824(0x108); FUN_00031c38(auStack_2c,param_1,auStack_30); FUN_00030e00(puVar1); *puVar1 = &PTR____Named_exception_00068e80; sVar2 = strlen(local_18); sVar2 = sVar2 + 1; if (sVar2 < 0x101) { __dest = puVar1 + 1; puVar1[0x41] = __dest; } else { __dest = (size_t *)malloc(sVar2); puVar1[0x41] = __dest; psVar3 = puVar1 + 1; if (__dest == (size_t *)0x0) { puVar1[0x41] = psVar3; __dest = psVar3; sVar2 = 0x100; } else { *psVar3 = sVar2; } } local_38 = puVar1 + 0x41; strncpy((char *)__dest,local_18,sVar2 - 1); *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; *puVar1 = &PTR____Named_exception_00068f20; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar1,&length_error::typeinfo,__Named_exception::~__Named_exception); } ### FUNC __stl_throw_invalid_argument @ 00031f98 /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::__stl_throw_invalid_argument(char const*) */ void std::__stl_throw_invalid_argument(char *param_1) { undefined4 *puVar1; size_t sVar2; size_t *__dest; size_t *psVar3; int *local_38; undefined1 auStack_30 [4]; undefined1 auStack_2c [20]; char *local_18; puVar1 = (undefined4 *)FUN_00030824(0x108); FUN_00031c38(auStack_2c,param_1,auStack_30); FUN_00030e00(puVar1); *puVar1 = &PTR____Named_exception_00068e80; sVar2 = strlen(local_18); sVar2 = sVar2 + 1; if (sVar2 < 0x101) { __dest = puVar1 + 1; puVar1[0x41] = __dest; } else { __dest = (size_t *)malloc(sVar2); puVar1[0x41] = __dest; psVar3 = puVar1 + 1; if (__dest == (size_t *)0x0) { puVar1[0x41] = psVar3; __dest = psVar3; sVar2 = 0x100; } else { *psVar3 = sVar2; } } local_38 = puVar1 + 0x41; strncpy((char *)__dest,local_18,sVar2 - 1); *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; *puVar1 = &PTR____Named_exception_00068f00; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar1,&invalid_argument::typeinfo,__Named_exception::~__Named_exception); } ### FUNC __stl_throw_overflow_error @ 0003207c /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::__stl_throw_overflow_error(char const*) */ void std::__stl_throw_overflow_error(char *param_1) { undefined4 *puVar1; size_t sVar2; size_t *__dest; size_t *psVar3; int *local_38; undefined1 auStack_30 [4]; undefined1 auStack_2c [20]; char *local_18; puVar1 = (undefined4 *)FUN_00030824(0x108); FUN_00031c38(auStack_2c,param_1,auStack_30); FUN_00030e00(puVar1); *puVar1 = &PTR____Named_exception_00068e80; sVar2 = strlen(local_18); sVar2 = sVar2 + 1; if (sVar2 < 0x101) { __dest = puVar1 + 1; puVar1[0x41] = __dest; } else { __dest = (size_t *)malloc(sVar2); puVar1[0x41] = __dest; psVar3 = puVar1 + 1; if (__dest == (size_t *)0x0) { puVar1[0x41] = psVar3; __dest = psVar3; sVar2 = 0x100; } else { *psVar3 = sVar2; } } local_38 = puVar1 + 0x41; strncpy((char *)__dest,local_18,sVar2 - 1); *(undefined1 *)(*local_38 + (sVar2 - 1)) = 0; *puVar1 = &PTR____Named_exception_00068f80; /* WARNING: Subroutine does not return */ FUN_000309e0(puVar1,&overflow_error::typeinfo,__Named_exception::~__Named_exception); } ### FUNC __Named_exception @ 00032160 /* std::__Named_exception::__Named_exception(std::string const&) */ __Named_exception * __thiscall std::__Named_exception::__Named_exception(__Named_exception *this,string *param_1) { char *__s; size_t sVar1; __Named_exception *p_Var2; __Named_exception *__dest; size_t sVar3; FUN_00030e00(); *(undefined ***)this = &PTR____Named_exception_00068e80; __s = *(char **)(param_1 + 0x14); sVar1 = strlen(__s); sVar3 = 0x100; sVar1 = sVar1 + 1; if (sVar1 < 0x101) { *(__Named_exception **)(this + 0x104) = this + 4; __dest = this + 4; sVar3 = sVar1; } else { p_Var2 = (__Named_exception *)malloc(sVar1); *(__Named_exception **)(this + 0x104) = p_Var2; __dest = this + 4; if (p_Var2 == (__Named_exception *)0x0) { *(__Named_exception **)(this + 0x104) = __dest; } else { *(size_t *)__dest = sVar1; __dest = p_Var2; sVar3 = sVar1; } } strncpy((char *)__dest,__s,sVar3 - 1); *(undefined1 *)(*(int *)(this + 0x104) + (sVar3 - 1)) = 0; return this; } ### FUNC __Named_exception @ 000321d8 /* std::__Named_exception::__Named_exception(std::__Named_exception const&) */ __Named_exception * __thiscall std::__Named_exception::__Named_exception(__Named_exception *this,__Named_exception *param_1) { size_t sVar1; __Named_exception *p_Var2; __Named_exception *__dest; FUN_00030e00(); *(undefined ***)this = &PTR____Named_exception_00068e80; sVar1 = strlen(*(char **)(param_1 + 0x104)); sVar1 = sVar1 + 1; if (sVar1 < 0x101) { __dest = this + 4; *(__Named_exception **)(this + 0x104) = __dest; } else { p_Var2 = (__Named_exception *)malloc(sVar1); *(__Named_exception **)(this + 0x104) = p_Var2; __dest = this + 4; if (p_Var2 == (__Named_exception *)0x0) { *(__Named_exception **)(this + 0x104) = __dest; sVar1 = 0x100; } else { *(size_t *)__dest = sVar1; __dest = p_Var2; } } strncpy((char *)__dest,*(char **)(param_1 + 0x104),sVar1 - 1); *(undefined1 *)(*(int *)(this + 0x104) + (sVar1 - 1)) = 0; return this; } ### FUNC operator= @ 0003224c /* std::__Named_exception::TEMPNAMEPLACEHOLDERVALUE(std::__Named_exception const&) */ __Named_exception * __thiscall std::__Named_exception::operator=(__Named_exception *this,__Named_exception *param_1) { __Named_exception *p_Var1; size_t sVar2; __Named_exception *__dest; uint uVar3; __Named_exception *p_Var4; p_Var1 = this + 0x104; sVar2 = strlen(*(char **)(param_1 + 0x104)); __dest = *(__Named_exception **)(this + 0x104); sVar2 = sVar2 + 1; p_Var4 = this + 4; uVar3 = 0x100; if (__dest != p_Var4) { uVar3 = *(uint *)p_Var4; } if (uVar3 < sVar2) { if (__dest != p_Var4) { free(__dest); } __dest = (__Named_exception *)malloc(sVar2); *(__Named_exception **)p_Var1 = __dest; if (__dest == (__Named_exception *)0x0) { *(__Named_exception **)p_Var1 = p_Var4; sVar2 = 0x100; __dest = p_Var4; } else { *(size_t *)p_Var4 = sVar2; } } strncpy((char *)__dest,*(char **)(param_1 + 0x104),sVar2 - 1); *(undefined1 *)(*(int *)p_Var1 + (sVar2 - 1)) = 0; return this; } ### FUNC ~__Named_exception @ 000322c0 /* std::__Named_exception::~__Named_exception() */ void __thiscall std::__Named_exception::~__Named_exception(__Named_exception *this) { *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(__Named_exception **)(this + 0x104) != this + 4) { free(*(__Named_exception **)(this + 0x104)); } FUN_00030e10(this); return; } ### FUNC ~__Named_exception @ 000322ec /* std::__Named_exception::~__Named_exception() */ void __thiscall std::__Named_exception::~__Named_exception(__Named_exception *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(__Named_exception **)(this + 0x104) != this + 4) { free(*(__Named_exception **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC what @ 0003231c /* std::__Named_exception::what() const */ undefined4 __thiscall std::__Named_exception::what(__Named_exception *this) { return *(undefined4 *)(this + 0x104); } ### FUNC ~logic_error @ 00032324 /* std::logic_error::~logic_error() */ void __thiscall std::logic_error::~logic_error(logic_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(logic_error **)(this + 0x104) != this + 4) { free(*(logic_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~runtime_error @ 00032354 /* std::runtime_error::~runtime_error() */ void __thiscall std::runtime_error::~runtime_error(runtime_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(runtime_error **)(this + 0x104) != this + 4) { free(*(runtime_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~domain_error @ 00032384 /* std::domain_error::~domain_error() */ void __thiscall std::domain_error::~domain_error(domain_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(domain_error **)(this + 0x104) != this + 4) { free(*(domain_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~invalid_argument @ 000323b4 /* std::invalid_argument::~invalid_argument() */ void __thiscall std::invalid_argument::~invalid_argument(invalid_argument *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(invalid_argument **)(this + 0x104) != this + 4) { free(*(invalid_argument **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~length_error @ 000323e4 /* std::length_error::~length_error() */ void __thiscall std::length_error::~length_error(length_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(length_error **)(this + 0x104) != this + 4) { free(*(length_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~out_of_range @ 00032414 /* std::out_of_range::~out_of_range() */ void __thiscall std::out_of_range::~out_of_range(out_of_range *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(out_of_range **)(this + 0x104) != this + 4) { free(*(out_of_range **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~range_error @ 00032444 /* std::range_error::~range_error() */ void __thiscall std::range_error::~range_error(range_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(range_error **)(this + 0x104) != this + 4) { free(*(range_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~overflow_error @ 00032474 /* std::overflow_error::~overflow_error() */ void __thiscall std::overflow_error::~overflow_error(overflow_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(overflow_error **)(this + 0x104) != this + 4) { free(*(overflow_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC ~underflow_error @ 000324a4 /* std::underflow_error::~underflow_error() */ void __thiscall std::underflow_error::~underflow_error(underflow_error *this) { void *pvVar1; *(undefined ***)this = &PTR____Named_exception_00068e80; if (*(underflow_error **)(this + 0x104) != this + 4) { free(*(underflow_error **)(this + 0x104)); } pvVar1 = (void *)FUN_00030e10(this); operator_delete(pvVar1); return; } ### FUNC failure @ 000324d4 /* std::ios_base::failure::failure(std::string const&) */ void __thiscall std::ios_base::failure::failure(failure *this,string *param_1) { undefined4 *puVar1; puVar1 = (undefined4 *)__Named_exception::__Named_exception((__Named_exception *)this,param_1); *puVar1 = &PTR__failure_00068fc0; return; } ### FUNC ~failure @ 000324ec /* std::ios_base::failure::~failure() */ void __thiscall std::ios_base::failure::~failure(failure *this) { __Named_exception::~__Named_exception((__Named_exception *)this); return; } ### FUNC ~failure @ 000324f6 /* std::ios_base::failure::~failure() */ void __thiscall std::ios_base::failure::~failure(failure *this) { void *pvVar1; pvVar1 = (void *)__Named_exception::~__Named_exception((__Named_exception *)this); operator_delete(pvVar1); return; } ### FUNC imbue @ 00032504 /* std::ios_base::imbue(std::locale const&) */ void std::ios_base::imbue(locale *param_1) { int iVar1; int in_r1; locale *in_r2; locale *this; int iVar2; this = (locale *)(in_r1 + 0x20); iVar1 = locale::operator!=(in_r2,this); if (iVar1 == 1) { locale::locale(param_1,this); locale::operator=(this,in_r2); iVar1 = *(int *)(in_r1 + 0x2c); if (iVar1 != 0) { iVar2 = 1 - iVar1; iVar1 = iVar1 * -8 + 4; do { (**(code **)(*(int *)(in_r1 + 0x24) + iVar2 * -8)) (1,in_r1,*(undefined4 *)(*(int *)(in_r1 + 0x24) - iVar1)); iVar1 = iVar1 + 8; iVar2 = iVar2 + 1; } while (iVar2 != 1); } return; } iVar1 = *(int *)(in_r1 + 0x2c); if (iVar1 != 0) { iVar2 = 1 - iVar1; iVar1 = iVar1 * -8 + 4; do { (**(code **)(*(int *)(in_r1 + 0x24) + iVar2 * -8)) (1,in_r1,*(undefined4 *)(*(int *)(in_r1 + 0x24) - iVar1)); iVar1 = iVar1 + 8; iVar2 = iVar2 + 1; } while (iVar2 != 1); } locale::locale(param_1,this); return; } ### FUNC _M_invoke_callbacks @ 000325c6 /* std::ios_base::_M_invoke_callbacks(std::ios_base::event) */ void __thiscall std::ios_base::_M_invoke_callbacks(ios_base *this,undefined4 param_2) { int iVar1; int iVar2; iVar1 = *(int *)(this + 0x2c); if (iVar1 != 0) { iVar2 = 1 - iVar1; iVar1 = iVar1 * -8 + 4; do { (**(code **)(*(int *)(this + 0x24) + iVar2 * -8)) (param_2,this,*(undefined4 *)(*(int *)(this + 0x24) - iVar1)); iVar1 = iVar1 + 8; iVar2 = iVar2 + 1; } while (iVar2 != 1); } return; } ### FUNC xalloc @ 00032608 /* std::ios_base::xalloc() */ int std::ios_base::xalloc(void) { int iVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a3c); iVar1 = DAT_00070a38; DAT_00070a38 = DAT_00070a38 + 1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a3c); return iVar1; } ### FUNC iword @ 00032634 /* std::ios_base::iword(int) */ undefined * __thiscall std::ios_base::iword(ios_base *this,int param_1) { int iVar1; uint uVar2; uint uVar3; uint uVar4; void *__ptr; __ptr = *(void **)(this + 0x30); uVar4 = *(uint *)(this + 0x34); uVar2 = uVar4; if ((int)uVar4 <= param_1) { uVar2 = param_1 + 1U; if (param_1 + 1U <= uVar4 << 1) { uVar2 = uVar4 << 1; } __ptr = realloc(__ptr,uVar2 << 2); if (__ptr == (void *)0x0) goto LAB_000326ac; uVar3 = uVar2 - uVar4; if (0 < (int)(uVar3 * 4)) { iVar1 = 0x3fffffff; if ((uVar3 | 0xc0000000) != 0xc0000000) { iVar1 = 0x3ffffffe; } __aeabi_memclr4((void *)((int)__ptr + uVar4 * 4),(iVar1 + uVar3) * 4 + 8); } } if (__ptr != (void *)0x0) { *(void **)(this + 0x30) = __ptr; *(uint *)(this + 0x34) = uVar2; return (undefined *)((int)__ptr + param_1 * 4); } LAB_000326ac: uVar2 = *(uint *)(this + 8); *(uint *)(this + 8) = uVar2 | 1; if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) { /* WARNING: Subroutine does not return */ _M_throw_failure(); } return &DAT_00070a40; } ### FUNC pword @ 000326d0 /* std::ios_base::pword(int) */ undefined * __thiscall std::ios_base::pword(ios_base *this,int param_1) { int iVar1; uint uVar2; uint uVar3; uint uVar4; void *__ptr; __ptr = *(void **)(this + 0x38); uVar4 = *(uint *)(this + 0x3c); uVar2 = uVar4; if ((int)uVar4 <= param_1) { uVar2 = param_1 + 1U; if (param_1 + 1U <= uVar4 << 1) { uVar2 = uVar4 << 1; } __ptr = realloc(__ptr,uVar2 << 2); if (__ptr == (void *)0x0) goto LAB_00032748; uVar3 = uVar2 - uVar4; if (0 < (int)(uVar3 * 4)) { iVar1 = 0x3fffffff; if ((uVar3 | 0xc0000000) != 0xc0000000) { iVar1 = 0x3ffffffe; } __aeabi_memclr4((void *)((int)__ptr + uVar4 * 4),(iVar1 + uVar3) * 4 + 8); } } if (__ptr != (void *)0x0) { *(void **)(this + 0x38) = __ptr; *(uint *)(this + 0x3c) = uVar2; return (undefined *)((int)__ptr + param_1 * 4); } LAB_00032748: uVar2 = *(uint *)(this + 8); *(uint *)(this + 8) = uVar2 | 1; if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) { /* WARNING: Subroutine does not return */ _M_throw_failure(); } return &DAT_00070a44; } ### FUNC register_callback @ 0003276c /* std::ios_base::register_callback(void (*)(std::ios_base::event, std::ios_base&, int), int) */ void __thiscall std::ios_base::register_callback (ios_base *this,_func_void_event_ios_base_ptr_int *param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; void *__ptr; uint uVar4; __ptr = *(void **)(this + 0x24); uVar4 = *(uint *)(this + 0x28); uVar2 = uVar4; if ((int)uVar4 <= *(int *)(this + 0x2c)) { uVar2 = *(int *)(this + 0x2c) + 1; if (uVar2 <= uVar4 << 1) { uVar2 = uVar4 << 1; } __ptr = realloc(__ptr,uVar2 << 3); if (__ptr == (void *)0x0) goto LAB_000327f6; uVar3 = uVar2 - uVar4; if (0 < (int)(uVar3 * 8)) { iVar1 = 0x1fffffff; if ((uVar3 | 0xe0000000) != 0xe0000000) { iVar1 = 0x1ffffffe; } __aeabi_memclr4((void *)((int)__ptr + uVar4 * 8),(iVar1 + uVar3) * 8 + 0x10); } } if (__ptr != (void *)0x0) { *(uint *)(this + 0x28) = uVar2; *(void **)(this + 0x24) = __ptr; iVar1 = *(int *)(this + 0x2c); *(int *)(this + 0x2c) = iVar1 + 1; iVar1 = iVar1 * 8; *(_func_void_event_ios_base_ptr_int **)((int)__ptr + iVar1) = param_1; *(int *)((int)__ptr + iVar1 + 4) = param_2; return; } LAB_000327f6: uVar2 = *(uint *)(this + 8); *(uint *)(this + 8) = uVar2 | 1; if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) { /* WARNING: Subroutine does not return */ _M_throw_failure(); } return; } ### FUNC _M_throw_failure @ 00032810 /* std::ios_base::_M_throw_failure() */ void std::ios_base::_M_throw_failure(void) { __Named_exception *this; undefined1 auStack_30 [4]; string asStack_2c [24]; this = (__Named_exception *)FUN_00030824(0x108); FUN_00031c38(asStack_2c,&LAB_00032890,auStack_30); __Named_exception::__Named_exception(this,asStack_2c); *(undefined ***)this = &PTR__failure_00068fc0; /* WARNING: Subroutine does not return */ FUN_000309e0(this,&failure::typeinfo,failure::~failure); } ### FUNC _M_copy_state @ 000328a8 /* std::ios_base::_M_copy_state(std::ios_base const&) */ void __thiscall std::ios_base::_M_copy_state(ios_base *this,ios_base *param_1) { int iVar1; size_t sVar2; void *pvVar3; undefined4 uVar4; uint uVar5; int iVar6; *(undefined4 *)(this + 4) = *(undefined4 *)(param_1 + 4); *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc); *(undefined4 *)(this + 0x10) = *(undefined4 *)(param_1 + 0x10); *(undefined4 *)(this + 0x18) = *(undefined4 *)(param_1 + 0x18); *(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c); locale::operator=((locale *)(this + 0x20),(locale *)(param_1 + 0x20)); iVar1 = *(int *)(param_1 + 0x24); if (iVar1 != 0) { iVar6 = *(int *)(param_1 + 0x2c); sVar2 = iVar6 << 3; pvVar3 = malloc(sVar2); if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) { __aeabi_memcpy(pvVar3,iVar1,sVar2); } if (pvVar3 == (void *)0x0) { uVar5 = *(uint *)(this + 8); *(uint *)(this + 8) = uVar5 | 1; if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) goto LAB_000329b4; } else { free(*(void **)(this + 0x24)); *(void **)(this + 0x24) = pvVar3; uVar4 = *(undefined4 *)(param_1 + 0x2c); *(undefined4 *)(this + 0x28) = uVar4; *(undefined4 *)(this + 0x2c) = uVar4; } } iVar1 = *(int *)(param_1 + 0x30); if (iVar1 != 0) { iVar6 = *(int *)(param_1 + 0x34); sVar2 = iVar6 << 2; pvVar3 = malloc(sVar2); if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) { __aeabi_memcpy(pvVar3,iVar1,sVar2); } if (pvVar3 == (void *)0x0) { uVar5 = *(uint *)(this + 8); *(uint *)(this + 8) = uVar5 | 1; if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) goto LAB_000329b4; } else { free(*(void **)(this + 0x30)); *(void **)(this + 0x30) = pvVar3; *(undefined4 *)(this + 0x34) = *(undefined4 *)(param_1 + 0x34); } } iVar1 = *(int *)(param_1 + 0x38); if (iVar1 != 0) { iVar6 = *(int *)(param_1 + 0x3c); sVar2 = iVar6 << 2; pvVar3 = malloc(sVar2); if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) { __aeabi_memcpy(pvVar3,iVar1,sVar2); } if (pvVar3 != (void *)0x0) { free(*(void **)(this + 0x38)); *(void **)(this + 0x38) = pvVar3; *(undefined4 *)(this + 0x3c) = *(undefined4 *)(param_1 + 0x3c); return; } uVar5 = *(uint *)(this + 8); *(uint *)(this + 8) = uVar5 | 1; if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) { LAB_000329b4: /* WARNING: Subroutine does not return */ _M_throw_failure(); } } return; } ### FUNC ios_base @ 000329b8 /* std::ios_base::ios_base() */ ios_base * __thiscall std::ios_base::ios_base(ios_base *this) { *(undefined4 *)(this + 0x1c) = 0; *(undefined4 *)(this + 0x18) = 0; *(undefined4 *)(this + 0x14) = 0; *(undefined4 *)(this + 0x10) = 0; *(undefined4 *)(this + 0xc) = 0; *(undefined4 *)(this + 8) = 0; *(undefined4 *)(this + 4) = 0; *(undefined ***)this = &PTR__ios_base_00068fe0; locale::locale((locale *)(this + 0x20)); *(undefined4 *)(this + 0x24) = 0; *(undefined4 *)(this + 0x28) = 0; *(undefined4 *)(this + 0x2c) = 0; *(undefined4 *)(this + 0x30) = 0; *(undefined4 *)(this + 0x34) = 0; *(undefined4 *)(this + 0x38) = 0; *(undefined4 *)(this + 0x3c) = 0; return this; } ### FUNC ~ios_base @ 000329f8 /* std::ios_base::~ios_base() */ ios_base * __thiscall std::ios_base::~ios_base(ios_base *this) { int iVar1; int iVar2; *(undefined ***)this = &PTR__ios_base_00068fe0; iVar1 = *(int *)(this + 0x2c); if (iVar1 != 0) { iVar2 = 1 - iVar1; iVar1 = iVar1 * -8 + 4; do { (**(code **)(*(int *)(this + 0x24) + iVar2 * -8)) (0,this,*(undefined4 *)(*(int *)(this + 0x24) - iVar1)); iVar1 = iVar1 + 8; iVar2 = iVar2 + 1; } while (iVar2 != 1); } free(*(void **)(this + 0x24)); free(*(void **)(this + 0x30)); free(*(void **)(this + 0x38)); locale::~locale((locale *)(this + 0x20)); return this; } ### FUNC ~ios_base @ 00032a78 /* std::ios_base::~ios_base() */ void __thiscall std::ios_base::~ios_base(ios_base *this) { ~ios_base(this); operator_delete(this); return; } ### FUNC Init @ 00032a98 /* std::ios_base::Init::Init() */ Init * __thiscall std::ios_base::Init::Init(Init *this) { int iVar1; iVar1 = _S_count; _S_count = _S_count + 1; if (iVar1 != 0) { return this; } FUN_0004d7dc(); _S_initialize(); _Filebuf_base::_S_initialize(); return this; } ### FUNC _S_initialize @ 00032ac8 /* std::ios_base::_S_initialize() */ void std::ios_base::_S_initialize(void) { undefined4 *puVar1; undefined4 uVar2; undefined4 uVar3; undefined4 uVar4; undefined4 uVar5; undefined4 *local_20; undefined4 *local_1c; undefined4 *local_18; if (_S_is_synced == '\0') { puVar1 = (undefined4 *)FUN_000333c0(&__sF,8); } else { puVar1 = (undefined4 *)operator_new(0x24); FUN_0004ec64(puVar1,&__sF); *puVar1 = &DAT_00069e3c; } if (_S_is_synced == '\0') { local_20 = (undefined4 *)FUN_000333c0(pthread_key_create,0x10); local_1c = (undefined4 *)FUN_000333c0(isupper,0x10); local_18 = (undefined4 *)FUN_000333c0(isupper,0x10); } else { local_20 = (undefined4 *)operator_new(0x24); FUN_0004ec64(local_20,pthread_key_create); *local_20 = &DAT_00069e98; local_1c = (undefined4 *)operator_new(0x24); FUN_0004ec64(local_1c,isupper); *local_1c = &DAT_00069e98; local_18 = (undefined4 *)operator_new(0x24); FUN_0004ec64(local_18,isupper); *local_18 = &DAT_00069e98; } ios_base((ios_base *)(cin + 8)); cin[0x4c] = 0; cin._80_4_ = 0; cin._84_4_ = 0; cin._0_4_ = &DAT_00069134; cin._4_4_ = 0; cin._8_4_ = &PTR_LAB_0003549a_1_00069148; FUN_000353f8(0x70a50,puVar1); ios_base((ios_base *)(cout + 4)); cout[0x48] = 0; cout._76_4_ = 0; cout._80_4_ = 0; cout._0_4_ = &DAT_00069184; cout._4_4_ = &PTR_LAB_000355ba_1_00069198; FUN_000353f8(0x70aa4,local_20); ios_base((ios_base *)(cerr + 4)); cerr[0x48] = 0; cerr._76_4_ = 0; cerr._80_4_ = 0; cerr._0_4_ = &DAT_00069184; cerr._4_4_ = &PTR_LAB_000355ba_1_00069198; FUN_000353f8(0x70afc,local_1c); ios_base((ios_base *)(clog + 4)); clog[0x48] = 0; clog._76_4_ = 0; clog._80_4_ = 0; clog._0_4_ = &DAT_00069184; clog._4_4_ = &PTR_LAB_000355ba_1_00069198; FUN_000353f8(0x70b54,local_18); *(undefined1 **)(cin + *(int *)(cin._0_4_ + -0xc) + 0x4c) = cout; *(uint *)(cerr + *(int *)(cerr._0_4_ + -0xc) + 4) = *(uint *)(cerr + *(int *)(cerr._0_4_ + -0xc) + 4) | 0x2000; uVar2 = FUN_00033432(&__sF,8); uVar3 = FUN_00033432(pthread_key_create,0x10); uVar4 = FUN_00033432(isupper,0x10); uVar5 = FUN_00033432(isupper,0x10); ios_base((ios_base *)(wcin + 8)); wcin._76_4_ = 0; wcin._80_4_ = 0; wcin._84_4_ = 0; wcin._0_4_ = &DAT_000691c4; wcin._4_4_ = 0; wcin._8_4_ = &PTR_LAB_000356a2_1_000691d8; FUN_000355fc(0x70bb0,uVar2); ios_base((ios_base *)(wcout + 4)); wcout._72_4_ = 0; wcout._76_4_ = 0; wcout._80_4_ = 0; wcout._0_4_ = &DAT_00069214; wcout._4_4_ = &PTR_LAB_000357c2_1_00069228; FUN_000355fc(0x70c04,uVar3); ios_base((ios_base *)(wcerr + 4)); wcerr._72_4_ = 0; wcerr._76_4_ = 0; wcerr._80_4_ = 0; wcerr._0_4_ = &DAT_00069214; wcerr._4_4_ = &PTR_LAB_000357c2_1_00069228; FUN_000355fc(0x70c5c,uVar4); ios_base((ios_base *)(wclog + 4)); wclog._72_4_ = 0; wclog._76_4_ = 0; wclog._80_4_ = 0; wclog._0_4_ = &DAT_00069214; wclog._4_4_ = &PTR_LAB_000357c2_1_00069228; FUN_000355fc(0x70cb4,uVar5); *(undefined1 **)(wcin + *(int *)(wcin._0_4_ + -0xc) + 0x4c) = wcout; *(uint *)(wcerr + *(int *)(wcerr._0_4_ + -0xc) + 4) = *(uint *)(wcerr + *(int *)(wcerr._0_4_ + -0xc) + 4) | 0x2000; return; } ### FUNC ~Init @ 000330b4 /* std::ios_base::Init::~Init() */ Init * __thiscall std::ios_base::Init::~Init(Init *this) { _S_count = _S_count + -1; if (_S_count != 0) { return this; } _S_uninitialize(); FUN_0004d8ac(); return this; } ### FUNC _S_uninitialize @ 000330dc /* std::ios_base::_S_uninitialize() */ void std::ios_base::_S_uninitialize(void) { int *piVar1; int iVar2; iVar2 = *(int *)(cin._0_4_ + -0xc); *(undefined4 *)(cin + iVar2 + 0x14) = 0; *(uint *)(cin + iVar2 + 8) = *(uint *)(cin + iVar2 + 8) | (uint)(*(int *)(cin + iVar2 + 0x48) == 0); iVar2 = *(int *)(cout._0_4_ + -0xc); *(undefined4 *)(cout + iVar2 + 0x14) = 0; *(uint *)(cout + iVar2 + 8) = *(uint *)(cout + iVar2 + 8) | (uint)(*(int *)(cout + iVar2 + 0x48) == 0); iVar2 = *(int *)(cerr._0_4_ + -0xc); *(undefined4 *)(cerr + iVar2 + 0x14) = 0; *(uint *)(cerr + iVar2 + 8) = *(uint *)(cerr + iVar2 + 8) | (uint)(*(int *)(cerr + iVar2 + 0x48) == 0); iVar2 = *(int *)(clog._0_4_ + -0xc); *(undefined4 *)(clog + iVar2 + 0x14) = 0; *(uint *)(clog + iVar2 + 8) = *(uint *)(clog + iVar2 + 8) | (uint)(*(int *)(clog + iVar2 + 0x48) == 0); iVar2 = *(int *)(cin._0_4_ + -0xc); *(undefined4 *)(cin + iVar2 + 8) = 1; piVar1 = *(int **)(cin + iVar2 + 0x48); *(undefined4 *)(cin + iVar2 + 0x48) = 0; if ((cin[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } iVar2 = *(int *)(cout._0_4_ + -0xc); *(undefined4 *)(cout + iVar2 + 8) = 1; piVar1 = *(int **)(cout + iVar2 + 0x48); *(undefined4 *)(cout + iVar2 + 0x48) = 0; if ((cout[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } iVar2 = *(int *)(cerr._0_4_ + -0xc); *(undefined4 *)(cerr + iVar2 + 8) = 1; piVar1 = *(int **)(cerr + iVar2 + 0x48); *(undefined4 *)(cerr + iVar2 + 0x48) = 0; if ((cerr[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } iVar2 = *(int *)(clog._0_4_ + -0xc); *(undefined4 *)(clog + iVar2 + 8) = 1; piVar1 = *(int **)(clog + iVar2 + 0x48); *(undefined4 *)(clog + iVar2 + 0x48) = 0; if ((clog[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } (**(code **)cin._0_4_)(); (**(code **)cout._0_4_)(); (**(code **)cerr._0_4_)(); (**(code **)clog._0_4_)(); iVar2 = *(int *)(wcin._0_4_ + -0xc); *(undefined4 *)(wcin + iVar2 + 0x14) = 0; *(uint *)(wcin + iVar2 + 8) = *(uint *)(wcin + iVar2 + 8) | (uint)(*(int *)(wcin + iVar2 + 0x48) == 0); iVar2 = *(int *)(wcout._0_4_ + -0xc); *(undefined4 *)(wcout + iVar2 + 0x14) = 0; *(uint *)(wcout + iVar2 + 8) = *(uint *)(wcout + iVar2 + 8) | (uint)(*(int *)(wcout + iVar2 + 0x48) == 0); iVar2 = *(int *)(wcerr._0_4_ + -0xc); *(undefined4 *)(wcerr + iVar2 + 0x14) = 0; *(uint *)(wcerr + iVar2 + 8) = *(uint *)(wcerr + iVar2 + 8) | (uint)(*(int *)(wcerr + iVar2 + 0x48) == 0); iVar2 = *(int *)(wclog._0_4_ + -0xc); *(undefined4 *)(wclog + iVar2 + 0x14) = 0; *(uint *)(wclog + iVar2 + 8) = *(uint *)(wclog + iVar2 + 8) | (uint)(*(int *)(wclog + iVar2 + 0x48) == 0); iVar2 = *(int *)(wcin._0_4_ + -0xc); *(undefined4 *)(wcin + iVar2 + 8) = 1; piVar1 = *(int **)(wcin + iVar2 + 0x48); *(undefined4 *)(wcin + iVar2 + 0x48) = 0; if ((wcin[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } iVar2 = *(int *)(wcout._0_4_ + -0xc); *(undefined4 *)(wcout + iVar2 + 8) = 1; piVar1 = *(int **)(wcout + iVar2 + 0x48); *(undefined4 *)(wcout + iVar2 + 0x48) = 0; if ((wcout[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } iVar2 = *(int *)(wcerr._0_4_ + -0xc); *(undefined4 *)(wcerr + iVar2 + 8) = 1; piVar1 = *(int **)(wcerr + iVar2 + 0x48); *(undefined4 *)(wcerr + iVar2 + 0x48) = 0; if ((wcerr[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } iVar2 = *(int *)(wclog._0_4_ + -0xc); *(undefined4 *)(wclog + iVar2 + 8) = 1; piVar1 = *(int **)(wclog + iVar2 + 0x48); *(undefined4 *)(wclog + iVar2 + 0x48) = 0; if ((wclog[iVar2 + 0x14] & 1) == 0) { if (piVar1 != (int *)0x0) { (**(code **)(*piVar1 + 4))(); } (**(code **)wcin._0_4_)(); (**(code **)wcout._0_4_)(); (**(code **)wcerr._0_4_)(); (**(code **)wclog._0_4_)(); return; } } } } } } } } /* WARNING: Subroutine does not return */ _M_throw_failure(); } ### FUNC FUN_000333c0 @ 000333c0 int * FUN_000333c0(int param_1) { int *piVar1; int *piVar2; int *piVar3; int iVar4; int *piVar5; piVar3 = (int *)operator_new(0x7c); iVar4 = FUN_0003469c(); std::_Filebuf_base::_M_open(iVar4 + 0x20,(int)*(short *)(param_1 + 0xe)); piVar5 = (int *)(uint)*(byte *)(piVar3 + 10); piVar1 = piVar5; piVar2 = piVar3; if ((piVar5 != (int *)0x0) && (piVar2 = (int *)0x0, piVar5 != (int *)0x0)) { piVar1 = piVar3; piVar2 = (int *)0x0; } if (piVar5 == (int *)0x0) { (**(code **)(*piVar2 + 4))(piVar2); } return piVar1; } ### FUNC FUN_00033432 @ 00033432 int * FUN_00033432(int param_1) { int *piVar1; int *piVar2; int *piVar3; int iVar4; int *piVar5; piVar3 = (int *)operator_new(0x94); iVar4 = FUN_000337bc(); std::_Filebuf_base::_M_open(iVar4 + 0x20,(int)*(short *)(param_1 + 0xe)); piVar5 = (int *)(uint)*(byte *)(piVar3 + 10); piVar1 = piVar5; piVar2 = piVar3; if ((piVar5 != (int *)0x0) && (piVar2 = (int *)0x0, piVar5 != (int *)0x0)) { piVar1 = piVar3; piVar2 = (int *)0x0; } if (piVar5 == (int *)0x0) { (**(code **)(*piVar2 + 4))(piVar2); } return piVar1; } ### FUNC sync_with_stdio @ 000334a4 /* std::ios_base::sync_with_stdio(bool) */ undefined1 std::ios_base::sync_with_stdio(bool param_1) { char cVar1; int *piVar2; int *piVar3; int *piVar4; int *piVar5; int *piVar6; int iVar7; cVar1 = _S_is_synced; if ((param_1 != (bool)_S_is_synced) && (cVar1 = param_1, Init::_S_count != 0)) { if (param_1) { piVar2 = (int *)operator_new(0x24); FUN_0004ec64(piVar2,&__sF); *piVar2 = (int)&DAT_00069e3c; piVar3 = (int *)operator_new(0x24); FUN_0004ec64(piVar3,pthread_key_create); *piVar3 = (int)&DAT_00069e98; piVar4 = (int *)operator_new(0x24); FUN_0004ec64(piVar4,isupper); *piVar4 = (int)&DAT_00069e98; piVar5 = (int *)operator_new(0x24); FUN_0004ec64(piVar5,isupper); *piVar5 = (int)&DAT_00069e98; } else { piVar2 = (int *)FUN_000333c0(&__sF,8); piVar3 = (int *)FUN_000333c0(pthread_key_create,0x10); piVar4 = (int *)FUN_000333c0(isupper,0x10); piVar5 = (int *)FUN_000333c0(isupper,0x10); } if ((((piVar2 == (int *)0x0) || (piVar3 == (int *)0x0)) || (piVar4 == (int *)0x0)) || (piVar5 == (int *)0x0)) { param_1 = _S_is_synced != '\0'; if (piVar5 != (int *)0x0) { (**(code **)(*piVar5 + 4))(); } if (piVar4 != (int *)0x0) { (**(code **)(*piVar4 + 4))(piVar4); } if (piVar3 != (int *)0x0) { (**(code **)(*piVar3 + 4))(piVar3); } cVar1 = _S_is_synced; if (piVar2 != (int *)0x0) { (**(code **)(*piVar2 + 4))(); cVar1 = _S_is_synced; } } else { iVar7 = *(int *)(cin._0_4_ + -0xc); *(undefined4 *)(cin + iVar7 + 8) = 0; piVar6 = *(int **)(cin + iVar7 + 0x48); *(int **)(cin + iVar7 + 0x48) = piVar2; if (piVar6 != (int *)0x0) { (**(code **)(*piVar6 + 4))(); } iVar7 = *(int *)(cout._0_4_ + -0xc); *(undefined4 *)(cout + iVar7 + 8) = 0; piVar2 = *(int **)(cout + iVar7 + 0x48); *(int **)(cout + iVar7 + 0x48) = piVar3; if (piVar2 != (int *)0x0) { (**(code **)(*piVar2 + 4))(); } iVar7 = *(int *)(cerr._0_4_ + -0xc); *(undefined4 *)(cerr + iVar7 + 8) = 0; piVar2 = *(int **)(cerr + iVar7 + 0x48); *(int **)(cerr + iVar7 + 0x48) = piVar4; if (piVar2 != (int *)0x0) { (**(code **)(*piVar2 + 4))(); } iVar7 = *(int *)(clog._0_4_ + -0xc); *(undefined4 *)(clog + iVar7 + 8) = 0; piVar2 = *(int **)(clog + iVar7 + 0x48); *(int **)(clog + iVar7 + 0x48) = piVar5; cVar1 = param_1; if (piVar2 != (int *)0x0) { (**(code **)(*piVar2 + 4))(); cVar1 = param_1; } } } _S_is_synced = cVar1; return param_1; } ### FUNC FUN_000337bc @ 000337bc undefined4 * FUN_000337bc(undefined4 *param_1) { locale alStack_18 [4]; param_1[6] = 0; param_1[5] = 0; param_1[4] = 0; param_1[3] = 0; param_1[2] = 0; param_1[1] = 0; *param_1 = &PTR_FUN_00034204_1_00069050; std::locale::locale((locale *)(param_1 + 7)); *param_1 = &PTR_FUN_000338f0_1_00068ff8; std::_Filebuf_base::_Filebuf_base((_Filebuf_base *)(param_1 + 8)); *(undefined1 *)((int)param_1 + 0x32) = 0; *(undefined2 *)(param_1 + 0xc) = 0; param_1[0xb] = 0; __aeabi_memclr4(param_1 + 0xd,0x38); param_1[0x1b] = 1; param_1[0x1c] = 1; std::locale::locale(alStack_18); FUN_00033858(param_1,alStack_18,0); std::locale::~locale(alStack_18); return param_1; } ### FUNC FUN_00033858 @ 00033858 void FUN_00033858(int param_1,locale *param_2,int param_3) { undefined1 uVar1; int iVar2; int *piVar3; int iVar4; undefined4 uVar5; iVar2 = std::locale::_M_get_facet(param_2,(id *)&std::codecvt::id); if (iVar2 != 0) { piVar3 = (int *)std::locale::_M_use_facet (param_2,(id *)&std::codecvt::id); *(int **)(param_1 + 0x68) = piVar3; iVar4 = (**(code **)(*piVar3 + 0x14))(); iVar2 = iVar4; if (iVar4 < 2) { iVar2 = 1; } *(int *)(param_1 + 0x6c) = iVar2; uVar5 = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); *(bool *)(param_1 + 0x2c) = 0 < iVar4; *(undefined4 *)(param_1 + 0x70) = uVar5; uVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 0x18))(); *(undefined1 *)(param_1 + 0x2d) = uVar1; return; } *(undefined4 *)(param_1 + 0x68) = 0; *(undefined4 *)(param_1 + 0x6c) = 1; *(undefined4 *)(param_1 + 0x70) = 1; *(undefined2 *)(param_1 + 0x2c) = 0; if (param_3 != 0) { std::locale::_M_use_facet(param_2,(id *)&std::codecvt::id); } return; } ### FUNC FUN_000338f0 @ 000338f0 undefined4 * FUN_000338f0(undefined4 *param_1) { *param_1 = &PTR_FUN_000338f0_1_00068ff8; FUN_0003427a(param_1); if (*(char *)((int)param_1 + 0x2e) != '\0') { free((void *)param_1[0xd]); } free((void *)param_1[0xf]); param_1[0xd] = 0; param_1[0xe] = 0; param_1[0xf] = 0; param_1[0x10] = 0; *param_1 = &PTR_FUN_00034204_1_00069050; std::locale::~locale((locale *)(param_1 + 7)); return param_1; } ### FUNC FUN_00033960 @ 00033960 void FUN_00033960(undefined4 *param_1) { *param_1 = &PTR_FUN_000338f0_1_00068ff8; FUN_0003427a(param_1); if (*(char *)((int)param_1 + 0x2e) != '\0') { free((void *)param_1[0xd]); } free((void *)param_1[0xf]); param_1[0xd] = 0; param_1[0xe] = 0; param_1[0xf] = 0; param_1[0x10] = 0; *param_1 = &PTR_FUN_00034204_1_00069050; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_000339d8 @ 000339d8 int FUN_000339d8(int param_1,int param_2,int param_3) { if ((((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && (*(char *)(param_1 + 0x31) == '\0')) && (*(int *)(param_1 + 0x34) == 0)) { if ((param_2 == 0) && (param_3 == 0)) { param_2 = 0; param_3 = 1; } else { if (param_2 == 0) { return param_1; } if (param_3 < 1) { return param_1; } } FUN_0003437c(param_1,param_2,param_3); } return param_1; } ### FUNC FUN_00033a1c @ 00033a1c int * FUN_00033a1c(int *param_1,int param_2,int param_3,int param_4) { int iVar1; int *piVar2; int iVar3; char *pcVar4; _Filebuf_base *p_Var5; int *local_18; if (*(char *)(param_2 + 0x28) == '\0') { *param_1 = -1; param_1[1] = 0; return param_1; } if ((param_3 != 0) && (*(char *)(param_2 + 0x2c) == '\0')) { *param_1 = -1; param_1[1] = 0; return param_1 + 2; } iVar1 = FUN_00034400(param_2,param_4 != 2 || param_3 != 0); if (iVar1 != 0) { if ((param_4 == 4) || (param_4 == 1)) { iVar1 = std::_Filebuf_base::_M_seek ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, param_4); piVar2 = (int *)(iVar1 + 1); if (piVar2 != (int *)0x0) { if (*(char *)(param_2 + 0x2f) != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *(undefined1 *)(param_2 + 0x2f) = 0; } piVar2 = (int *)0x0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *(undefined1 *)(param_2 + 0x2f) = 0; } LAB_00033ad4: *param_1 = iVar1; param_1[1] = 0; return piVar2; } pcVar4 = (char *)(param_2 + 0x2f); if (*(char *)(param_2 + 0x2f) == '\0') { iVar1 = std::_Filebuf_base::_M_seek ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, param_4); piVar2 = (int *)(iVar1 + 1); if (piVar2 != (int *)0x0) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } piVar2 = (int *)0x0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; } goto LAB_00033ad4; } if (*(int *)(param_2 + 0x54) != 0) { iVar1 = *(int *)(param_2 + 0x58) - (*(int *)(param_2 + 8) - *(int *)(param_2 + 0x54) >> 2); p_Var5 = (_Filebuf_base *)(param_2 + 0x20); if (param_3 != 0) { iVar1 = std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); piVar2 = (int *)(iVar1 + 1); if (piVar2 != (int *)0x0) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } piVar2 = (int *)0x0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; } *param_1 = iVar1; param_1[1] = 0; return piVar2; } iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); piVar2 = (int *)(iVar3 - iVar1); LAB_00033c42: *param_1 = (int)piVar2; param_1[1] = 0; return piVar2; } if (*(char *)(param_2 + 0x2c) == '\0') { local_18 = *(int **)(param_2 + 0x4c); iVar1 = (**(code **)(**(int **)(param_2 + 0x68) + 0x1c)) (*(int **)(param_2 + 0x68),&local_18,*(undefined4 *)(param_2 + 0x3c), *(undefined4 *)(param_2 + 0x44), *(int *)(param_2 + 8) - *(int *)(param_2 + 4) >> 2); iVar3 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),0,2); piVar2 = local_18; if ((iVar3 != -1) && (iVar1 = ((iVar3 + iVar1) - *(int *)(param_2 + 0x48)) + *(int *)(param_2 + 0x3c), -1 < iVar1)) { if (param_3 != 0) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; *param_1 = iVar1; param_1[1] = (int)piVar2; return piVar2; } *param_1 = iVar1; goto LAB_00033cf0; } } else { iVar1 = (*(int *)(param_2 + 8) - *(int *)(param_2 + 4) >> 2) * *(int *)(param_2 + 0x6c); iVar3 = *(int *)(param_2 + 0x48) - *(int *)(param_2 + 0x3c); if (iVar1 - iVar3 == 0 || iVar1 < iVar3) { iVar1 = *(int *)(param_2 + 0x48) - (*(int *)(param_2 + 0x3c) + iVar1); p_Var5 = (_Filebuf_base *)(param_2 + 0x20); if (param_3 != 0) { piVar2 = (int *)std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); if (piVar2 != (int *)0xffffffff) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; } *param_1 = (int)piVar2; param_1[1] = 0; return piVar2; } iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); piVar2 = (int *)(iVar3 - iVar1); goto LAB_00033c42; } } } *param_1 = -1; LAB_00033cf0: param_1[1] = 0; return param_1; } ### FUNC FUN_00033d10 @ 00033d10 int * FUN_00033d10(int *param_1,int param_2,int param_3,int param_4) { int iVar1; int iVar2; int iVar3; if (((*(char *)(param_2 + 0x28) == '\0') || (iVar1 = FUN_00034400(param_2,1), param_3 == -1)) || (iVar1 != 1)) { iVar3 = 0; iVar1 = -1; } else { iVar2 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),param_3,1); iVar1 = -1; iVar3 = 0; if (iVar2 != -1) { *(int *)(param_2 + 0x4c) = param_4; if (*(char *)(param_2 + 0x2f) != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *(undefined1 *)(param_2 + 0x2f) = 0; } *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *(undefined1 *)(param_2 + 0x2f) = 0; iVar1 = param_3; iVar3 = param_4; } } *param_1 = iVar1; param_1[1] = iVar3; return param_1 + 2; } ### FUNC FUN_00033db4 @ 00033db4 undefined4 FUN_00033db4(int *param_1) { int iVar1; undefined4 uVar2; uVar2 = 0; if ((char)param_1[0xc] != '\0') { uVar2 = 0; iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); if (iVar1 == -1) { uVar2 = 0xffffffff; } } return uVar2; } ### FUNC FUN_00033dd6 @ 00033dd6 int FUN_00033dd6(int param_1) { int iVar1; int iVar2; undefined4 uStack_1c; uStack_1c = -1; if (((*(char *)(param_1 + 0x28) != '\0') && (*(char *)(param_1 + 0x30) == '\0')) && (*(char *)(param_1 + 0x31) == '\0')) { if (*(char *)(param_1 + 0x32) != '\0') { return *(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2; } uStack_1c = 0; if (*(char *)(param_1 + 0x2c) != '\0') { iVar1 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_1 + 0x20),0,2); iVar2 = std::_Filebuf_base::_M_file_size((_Filebuf_base *)(param_1 + 0x20)); uStack_1c = iVar2 - iVar1; if (iVar2 <= iVar1) { uStack_1c = 0; } if (iVar1 < 0) { return 0; } } } return uStack_1c; } ### FUNC FUN_00033e48 @ 00033e48 int FUN_00033e48(int *param_1,wchar_t *param_2,int param_3) { uint uVar1; wchar_t wVar2; wchar_t *__s2; int iVar3; uint __n; iVar3 = 0; if (0 < param_3) { iVar3 = 0; do { __s2 = (wchar_t *)param_1[2]; if (__s2 < (wchar_t *)param_1[3]) { uVar1 = param_1[3] - (int)__s2 >> 2; __n = param_3 - iVar3; if (uVar1 <= (uint)(param_3 - iVar3)) { __n = uVar1; } wmemcpy(param_2,__s2,__n); param_1[2] = param_1[2] + __n * 4; iVar3 = __n + iVar3; param_2 = param_2 + __n; } else { wVar2 = (**(code **)(*param_1 + 0x24))(param_1); if (wVar2 == L'\xffffffff') { return iVar3; } *param_2 = wVar2; param_2 = param_2 + 1; iVar3 = iVar3 + 1; } } while (iVar3 < param_3); } return iVar3; } ### FUNC FUN_00033eae @ 00033eae void FUN_00033eae(void) { FUN_000344d4(); return; } ### FUNC FUN_00033eb8 @ 00033eb8 undefined4 FUN_00033eb8(int *param_1) { int iVar1; undefined4 uVar2; undefined4 *puVar3; iVar1 = (**(code **)(*param_1 + 0x20))(param_1); uVar2 = 0xffffffff; if (iVar1 != -1) { puVar3 = (undefined4 *)param_1[2]; param_1[2] = (int)(puVar3 + 1); uVar2 = *puVar3; } return uVar2; } ### FUNC FUN_00033eda @ 00033eda int FUN_00033eda(int param_1,int param_2) { int iVar1; int *piVar2; int iVar3; if (*(char *)(param_1 + 0x2f) == '\0') { return -1; } iVar1 = *(int *)(param_1 + 4); iVar3 = *(int *)(param_1 + 8); if (iVar3 == iVar1) { if (param_2 == -1) { return -1; } } else { piVar2 = (int *)(iVar3 + -4); if (param_2 == -1) { *(int **)(param_1 + 8) = piVar2; return *piVar2; } if (*piVar2 == param_2) { *(int **)(param_1 + 8) = piVar2; return param_2; } if (*(int *)(param_1 + 0x54) == 0) { *(int **)(param_1 + 8) = piVar2; goto LAB_00033f60; } } if (*(char *)(param_1 + 0x32) == '\0') { *(int *)(param_1 + 0x5c) = iVar1; *(int *)(param_1 + 0x60) = iVar3; *(undefined4 *)(param_1 + 100) = *(undefined4 *)(param_1 + 0xc); piVar2 = (int *)(param_1 + 0x90); *(int **)(param_1 + 4) = piVar2; *(int **)(param_1 + 8) = piVar2; *(int *)(param_1 + 0xc) = param_1 + 0x94; *(undefined1 *)(param_1 + 0x32) = 1; } else { if (iVar1 == param_1 + 0x74) { return -1; } piVar2 = (int *)(*(int *)(param_1 + 0xc) + -4); *(int **)(param_1 + 4) = piVar2; *(int **)(param_1 + 8) = piVar2; *(int *)(param_1 + 0xc) = param_1 + 0x94; } LAB_00033f60: *piVar2 = param_2; return param_2; } ### FUNC FUN_00033f68 @ 00033f68 int FUN_00033f68(int *param_1,wchar_t *param_2,int param_3) { wchar_t *__s1; int iVar1; uint uVar2; int iVar3; uint __n; iVar3 = 0; if (0 < param_3) { iVar3 = 0; do { while( true ) { __s1 = (wchar_t *)param_1[5]; if ((wchar_t *)param_1[6] <= __s1) break; uVar2 = param_1[6] - (int)__s1 >> 2; __n = param_3 - iVar3; if (uVar2 <= (uint)(param_3 - iVar3)) { __n = uVar2; } wmemcpy(__s1,param_2,__n); param_1[5] = param_1[5] + __n * 4; iVar3 = __n + iVar3; param_2 = param_2 + __n; if (param_3 <= iVar3) { return iVar3; } } iVar1 = (**(code **)(*param_1 + 0x34))(param_1,*param_2); if (iVar1 == -1) { return iVar3; } param_2 = param_2 + 1; iVar3 = iVar3 + 1; } while (iVar3 < param_3); } return iVar3; } ### FUNC FUN_00033fd8 @ 00033fd8 int FUN_00033fd8(int *param_1,wchar_t param_2,int param_3) { wchar_t *__s; int iVar1; uint uVar2; int iVar3; uint __n; iVar3 = 0; if (0 < param_3) { iVar3 = 0; do { while( true ) { __s = (wchar_t *)param_1[5]; if (__s < (wchar_t *)param_1[6]) break; iVar1 = (**(code **)(*param_1 + 0x34))(param_1,param_2); if (iVar1 == -1) { return iVar3; } iVar3 = iVar3 + 1; if (param_3 <= iVar3) { return iVar3; } } uVar2 = param_1[6] - (int)__s >> 2; __n = param_3 - iVar3; if (uVar2 <= (uint)(param_3 - iVar3)) { __n = uVar2; } wmemset(__s,param_2,__n); param_1[5] = param_1[5] + __n * 4; iVar3 = __n + iVar3; } while (iVar3 < param_3); } return iVar3; } ### FUNC FUN_00034038 @ 00034038 int FUN_00034038(int param_1,int param_2) { int iVar1; uint uVar2; int extraout_r1; char *pcVar3; int *piVar4; int *piVar5; int local_1c; int *local_18; if (*(char *)(param_1 + 0x30) == '\0') { if (*(char *)(param_1 + 0x28) == '\0') { return -1; } uVar2 = *(uint *)(param_1 + 0x24); if ((uVar2 & 0x10) == 0) { return -1; } if (*(char *)(param_1 + 0x2f) != '\0') { return -1; } if (*(char *)(param_1 + 0x31) != '\0') { return -1; } if (*(int *)(param_1 + 0x34) == 0) { iVar1 = std::_Filebuf_base::_M_page_size + 0xfff; __aeabi_uidivmod(iVar1); iVar1 = FUN_0003437c(param_1,0,iVar1 - extraout_r1); if (iVar1 != 1) { return -1; } uVar2 = *(uint *)(param_1 + 0x24); } if ((uVar2 & 1) != 0) { *(undefined4 *)(param_1 + 0x4c) = 0; } piVar4 = *(int **)(param_1 + 0x34); iVar1 = *(int *)(param_1 + 0x38); *(int **)(param_1 + 0x10) = piVar4; *(int **)(param_1 + 0x14) = piVar4; *(int *)(param_1 + 0x18) = iVar1 + -4; *(undefined1 *)(param_1 + 0x30) = 1; piVar5 = piVar4; } else { piVar4 = *(int **)(param_1 + 0x34); iVar1 = *(int *)(param_1 + 0x38); piVar5 = *(int **)(param_1 + 0x14); } *(int **)(param_1 + 0x10) = piVar4; *(int **)(param_1 + 0x14) = piVar4; *(int *)(param_1 + 0x18) = iVar1 + -4; if (param_2 != -1) { *piVar5 = param_2; piVar5 = piVar5 + 1; } if (piVar4 != piVar5) { do { local_1c = *(int *)(param_1 + 0x3c); local_18 = piVar4; uVar2 = (**(code **)(**(int **)(param_1 + 0x68) + 8)) (*(int **)(param_1 + 0x68),param_1 + 0x4c,piVar4,piVar5,&local_18,local_1c, *(undefined4 *)(param_1 + 0x40),&local_1c); if ((uVar2 & 0xfffffffe) == 2) { LAB_000341b4: *(undefined1 *)(param_1 + 0x30) = 0; *(undefined1 *)(param_1 + 0x31) = 1; *(undefined1 *)(param_1 + 0x2f) = 0; *(undefined4 *)(param_1 + 0x10) = 0; *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x18) = 0; return -1; } if ((local_18 != piVar5) || (pcVar3 = *(char **)(param_1 + 0x3c), local_1c - (int)pcVar3 != ((int)piVar5 - (int)piVar4 >> 2) * *(int *)(param_1 + 0x6c))) { if ((*(char *)(param_1 + 0x2c) != '\0') || (local_18 == piVar4)) goto LAB_000341b4; pcVar3 = *(char **)(param_1 + 0x3c); } iVar1 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 0x20),pcVar3,local_1c - (int)pcVar3); if (iVar1 != 1) goto LAB_000341b4; piVar4 = local_18; } while (local_18 != piVar5); } iVar1 = 0; if (param_2 != -1) { iVar1 = param_2; } return iVar1; } ### FUNC FUN_000341dc @ 000341dc void FUN_000341dc(int param_1,undefined4 param_2) { if (((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && (*(char *)(param_1 + 0x31) == '\0')) { FUN_00033858(param_1,param_2,1); return; } return; } ### FUNC FUN_00034204 @ 00034204 undefined4 * FUN_00034204(undefined4 *param_1) { *param_1 = &PTR_FUN_00034204_1_00069050; std::locale::~locale((locale *)(param_1 + 7)); return param_1; } ### FUNC FUN_00034224 @ 00034224 void FUN_00034224(undefined4 *param_1) { *param_1 = &PTR_FUN_00034204_1_00069050; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_0003427a @ 0003427a int * FUN_0003427a(int *param_1) { char cVar1; bool bVar2; bool bVar3; int iVar4; int iVar5; char *pcVar6; char *local_18; cVar1 = (char)param_1[10]; if ((char)param_1[0xc] == '\0') { bVar2 = cVar1 != '\0'; if (*(char *)((int)param_1 + 0x2f) != '\0') { if ((void *)param_1[0x15] != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_1 + 8),(void *)param_1[0x15],param_1[0x16]); param_1[0x15] = 0; param_1[0x16] = 0; } *(undefined1 *)((int)param_1 + 0x2f) = 0; } } else { bVar2 = false; if (cVar1 != '\0') { iVar4 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); bVar2 = false; if (((iVar4 != -1) && (bVar2 = true, (char)param_1[0xc] != '\0')) && ((char)param_1[0xb] == '\0')) { bVar3 = true; while( true ) { local_18 = (char *)param_1[0xf]; iVar4 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); bVar2 = bVar3; if (((iVar4 == 3) || ((pcVar6 = (char *)param_1[0xf], iVar4 == 0 && (local_18 == pcVar6))) ) || (bVar2 = false, iVar4 == 2)) break; iVar5 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 8),pcVar6,(int)local_18 - (int)pcVar6); if ((iVar5 != 1) || (bVar2 = bVar3, iVar4 != 1)) break; } } } } iVar4 = std::_Filebuf_base::_M_close((_Filebuf_base *)(param_1 + 8)); *(undefined1 *)((int)param_1 + 0x32) = 0; *(undefined1 *)((int)param_1 + 0x31) = 0; *(undefined1 *)(param_1 + 0xc) = 0; *(undefined1 *)((int)param_1 + 0x2f) = 0; param_1[1] = 0; param_1[2] = 0; param_1[3] = 0; param_1[4] = 0; param_1[5] = 0; param_1[6] = 0; __aeabi_memclr4(param_1 + 0x11,0x24); if (iVar4 == 0) { param_1 = (int *)0x0; } if (!bVar2) { param_1 = (int *)0x0; } return param_1; } ### FUNC FUN_0003437c @ 0003437c undefined4 FUN_0003437c(int param_1,int param_2,int param_3) { size_t __size; void *pvVar1; undefined4 uVar2; int iVar3; undefined1 uVar4; size_t sVar5; if (param_2 == 0) { pvVar1 = malloc(param_3 << 2); *(void **)(param_1 + 0x34) = pvVar1; uVar4 = 1; if (pvVar1 == (void *)0x0) { return 0; } } else { *(int *)(param_1 + 0x34) = param_2; uVar4 = 0; } *(undefined1 *)(param_1 + 0x2e) = uVar4; sVar5 = param_3 * *(int *)(param_1 + 0x6c); __size = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); if ((int)__size <= (int)sVar5) { __size = sVar5; } pvVar1 = malloc(__size); *(void **)(param_1 + 0x3c) = pvVar1; if (pvVar1 == (void *)0x0) { pvVar1 = (void *)0x0; if (*(char *)(param_1 + 0x2e) != '\0') { free(*(void **)(param_1 + 0x34)); pvVar1 = *(void **)(param_1 + 0x3c); } free(pvVar1); iVar3 = 0; *(undefined4 *)(param_1 + 0x34) = 0; *(undefined4 *)(param_1 + 0x38) = 0; *(undefined4 *)(param_1 + 0x3c) = 0; uVar2 = 0; } else { *(int *)(param_1 + 0x38) = *(int *)(param_1 + 0x34) + param_3 * 4; iVar3 = (int)pvVar1 + __size; uVar2 = 1; } *(int *)(param_1 + 0x40) = iVar3; return uVar2; } ### FUNC FUN_00034400 @ 00034400 undefined4 FUN_00034400(int *param_1,int param_2) { int iVar1; int iVar2; char *pcVar3; char *local_18; *(undefined1 *)((int)param_1 + 0x31) = 0; if ((char)param_1[0xc] != '\0') { iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); if (param_2 == 1) { if (iVar1 == -1) { LAB_000344be: *(char *)(param_1 + 0xc) = '\0'; *(undefined1 *)((int)param_1 + 0x31) = 1; param_1[4] = 0; param_1[5] = 0; param_1[6] = 0; return 0; } if (((char)param_1[0xc] != '\0') && ((char)param_1[0xb] == '\0')) { do { local_18 = (char *)param_1[0xf]; iVar1 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); if ((iVar1 == 3) || ((pcVar3 = (char *)param_1[0xf], iVar1 == 0 && (local_18 == pcVar3)))) break; if ((iVar1 == 2) || (iVar2 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 8),pcVar3,(int)local_18 - (int)pcVar3), iVar2 != 1)) goto LAB_000344be; } while (iVar1 == 1); } } else if (iVar1 == -1) goto LAB_000344be; } if ((*(char *)((int)param_1 + 0x2f) != '\0') && (*(char *)((int)param_1 + 0x32) != '\0')) { param_1[1] = param_1[0x17]; param_1[2] = param_1[0x18]; param_1[3] = param_1[0x19]; *(undefined1 *)((int)param_1 + 0x32) = 0; } return 1; } ### FUNC FUN_000344d4 @ 000344d4 undefined4 FUN_000344d4(int param_1) { int iVar1; undefined4 uVar2; undefined4 *puVar3; int extraout_r1; if (*(char *)(param_1 + 0x2f) == '\0') { if (*(char *)(param_1 + 0x28) == '\0') { return 0xffffffff; } if (-1 < (int)((uint)*(byte *)(param_1 + 0x24) << 0x1c)) { return 0xffffffff; } if (*(char *)(param_1 + 0x30) != '\0') { return 0xffffffff; } if (*(char *)(param_1 + 0x31) != '\0') { return 0xffffffff; } if (*(int *)(param_1 + 0x34) == 0) { iVar1 = std::_Filebuf_base::_M_page_size + 0xfff; __aeabi_uidivmod(); iVar1 = FUN_0003437c(param_1,0,iVar1 - extraout_r1); if (iVar1 != 1) { return 0xffffffff; } } *(undefined4 *)(param_1 + 0x44) = *(undefined4 *)(param_1 + 0x3c); *(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(param_1 + 0x3c); *(undefined4 *)(param_1 + 0x50) = *(undefined4 *)(param_1 + 0x4c); *(undefined1 *)(param_1 + 0x2f) = 1; } else if (*(char *)(param_1 + 0x32) != '\0') { puVar3 = *(undefined4 **)(param_1 + 0x60); *(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_1 + 0x5c); *(undefined4 **)(param_1 + 8) = puVar3; *(undefined4 **)(param_1 + 0xc) = *(undefined4 **)(param_1 + 100); *(undefined1 *)(param_1 + 0x32) = 0; if (puVar3 != *(undefined4 **)(param_1 + 100)) { return *puVar3; } } uVar2 = FUN_0003457c(param_1); return uVar2; } ### FUNC FUN_0003457c @ 0003457c undefined4 FUN_0003457c(int param_1) { _Filebuf_base *this; undefined4 *puVar1; uint uVar2; int iVar3; int iVar4; char *pcVar5; undefined4 *local_1c; int local_18; *(undefined4 *)(param_1 + 0x4c) = *(undefined4 *)(param_1 + 0x50); pcVar5 = *(char **)(param_1 + 0x3c); uVar2 = *(uint *)(param_1 + 0x44); if ((uVar2 < *(uint *)(param_1 + 0x48)) && (iVar4 = *(uint *)(param_1 + 0x48) - uVar2, iVar4 != 0) ) { __aeabi_memmove(pcVar5,uVar2,iVar4); pcVar5 = pcVar5 + iVar4; } *(char **)(param_1 + 0x48) = pcVar5; this = (_Filebuf_base *)(param_1 + 0x20); iVar4 = std::_Filebuf_base::_M_read(this,pcVar5,*(int *)(param_1 + 0x40) - (int)pcVar5); if (-1 < iVar4) { while( true ) { iVar3 = *(int *)(param_1 + 0x48) + iVar4; *(int *)(param_1 + 0x48) = iVar3; if (*(int *)(param_1 + 0x3c) == iVar3) break; iVar3 = (**(code **)(**(int **)(param_1 + 0x68) + 0xc)) (*(int **)(param_1 + 0x68),param_1 + 0x50,*(int *)(param_1 + 0x3c),iVar3, &local_18,*(undefined4 *)(param_1 + 0x34),*(undefined4 *)(param_1 + 0x38), &local_1c); if (iVar3 == 2) { LAB_0003465e: if (*(void **)(param_1 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap(this,*(void **)(param_1 + 0x54),*(long *)(param_1 + 0x58)); *(undefined4 *)(param_1 + 0x54) = 0; *(undefined4 *)(param_1 + 0x58) = 0; } *(undefined1 *)(param_1 + 0x30) = 0; *(undefined1 *)(param_1 + 0x2f) = 0; *(undefined1 *)(param_1 + 0x31) = 1; *(undefined4 *)(param_1 + 4) = 0; *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0xc) = 0; return 0xffffffff; } if (iVar3 == 3) { return 0xffffffff; } puVar1 = *(undefined4 **)(param_1 + 0x34); if (((local_1c != puVar1) && (local_18 == *(int *)(param_1 + 0x3c))) || ((*(char *)(param_1 + 0x2c) != '\0' && (((int)local_1c - (int)puVar1 >> 2) * *(int *)(param_1 + 0x6c) - (local_18 - *(int *)(param_1 + 0x3c)) != 0)))) goto LAB_0003465e; if (local_1c != puVar1) { *(int *)(param_1 + 0x44) = local_18; *(undefined4 **)(param_1 + 4) = puVar1; *(undefined4 **)(param_1 + 8) = puVar1; *(undefined4 **)(param_1 + 0xc) = local_1c; return *puVar1; } if (*(int *)(param_1 + 0x70) <= local_18 - *(int *)(param_1 + 0x3c)) goto LAB_0003465e; if ((iVar4 < 1) || (iVar4 = std::_Filebuf_base::_M_read (this,*(char **)(param_1 + 0x48), *(int *)(param_1 + 0x40) - (int)*(char **)(param_1 + 0x48)), iVar4 < 0) ) break; } } *(undefined4 *)(param_1 + 4) = 0; *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0xc) = 0; return 0xffffffff; } ### FUNC FUN_0003469c @ 0003469c undefined4 * FUN_0003469c(undefined4 *param_1) { locale alStack_18 [4]; param_1[6] = 0; param_1[5] = 0; param_1[4] = 0; param_1[3] = 0; param_1[2] = 0; param_1[1] = 0; *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::locale((locale *)(param_1 + 7)); *param_1 = &PTR_FUN_000347d0_1_00069094; std::_Filebuf_base::_Filebuf_base((_Filebuf_base *)(param_1 + 8)); *(undefined1 *)((int)param_1 + 0x32) = 0; *(undefined2 *)(param_1 + 0xc) = 0; param_1[0xb] = 0; __aeabi_memclr4(param_1 + 0xd,0x38); param_1[0x1b] = 1; param_1[0x1c] = 1; std::locale::locale(alStack_18); FUN_00034738(param_1,alStack_18,0); std::locale::~locale(alStack_18); return param_1; } ### FUNC FUN_00034738 @ 00034738 void FUN_00034738(int param_1,locale *param_2,int param_3) { undefined1 uVar1; int iVar2; int *piVar3; int iVar4; undefined4 uVar5; iVar2 = std::locale::_M_get_facet(param_2,(id *)&std::codecvt::id); if (iVar2 != 0) { piVar3 = (int *)std::locale::_M_use_facet(param_2,(id *)&std::codecvt::id); *(int **)(param_1 + 0x68) = piVar3; iVar4 = (**(code **)(*piVar3 + 0x14))(); iVar2 = iVar4; if (iVar4 < 2) { iVar2 = 1; } *(int *)(param_1 + 0x6c) = iVar2; uVar5 = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); *(bool *)(param_1 + 0x2c) = 0 < iVar4; *(undefined4 *)(param_1 + 0x70) = uVar5; uVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 0x18))(); *(undefined1 *)(param_1 + 0x2d) = uVar1; return; } *(undefined4 *)(param_1 + 0x68) = 0; *(undefined4 *)(param_1 + 0x6c) = 1; *(undefined4 *)(param_1 + 0x70) = 1; *(undefined2 *)(param_1 + 0x2c) = 0; if (param_3 != 0) { std::locale::_M_use_facet(param_2,(id *)&std::codecvt::id); } return; } ### FUNC FUN_000347d0 @ 000347d0 undefined4 * FUN_000347d0(undefined4 *param_1) { *param_1 = &PTR_FUN_000347d0_1_00069094; FUN_0003519e(param_1); if (*(char *)((int)param_1 + 0x2e) != '\0') { free((void *)param_1[0xd]); } free((void *)param_1[0xf]); param_1[0xd] = 0; param_1[0xe] = 0; param_1[0xf] = 0; param_1[0x10] = 0; *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); return param_1; } ### FUNC FUN_00034840 @ 00034840 void FUN_00034840(undefined4 *param_1) { *param_1 = &PTR_FUN_000347d0_1_00069094; FUN_0003519e(param_1); if (*(char *)((int)param_1 + 0x2e) != '\0') { free((void *)param_1[0xd]); } free((void *)param_1[0xf]); param_1[0xd] = 0; param_1[0xe] = 0; param_1[0xf] = 0; param_1[0x10] = 0; *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_000348b8 @ 000348b8 int FUN_000348b8(int param_1,int param_2,int param_3) { if ((((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && (*(char *)(param_1 + 0x31) == '\0')) && (*(int *)(param_1 + 0x34) == 0)) { if ((param_2 == 0) && (param_3 == 0)) { param_2 = 0; param_3 = 1; } else { if (param_2 == 0) { return param_1; } if (param_3 < 1) { return param_1; } } FUN_000352a0(param_1,param_2,param_3); } return param_1; } ### FUNC FUN_000348fc @ 000348fc int * FUN_000348fc(int *param_1,int param_2,int param_3,int param_4) { int iVar1; int *piVar2; int iVar3; char *pcVar4; _Filebuf_base *p_Var5; int *local_18; if (*(char *)(param_2 + 0x28) == '\0') { *param_1 = -1; param_1[1] = 0; return param_1; } if ((param_3 != 0) && (*(char *)(param_2 + 0x2c) == '\0')) { *param_1 = -1; param_1[1] = 0; return param_1 + 2; } iVar1 = FUN_00035322(param_2,param_4 != 2 || param_3 != 0); if (iVar1 != 0) { if ((param_4 == 4) || (param_4 == 1)) { iVar1 = std::_Filebuf_base::_M_seek ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, param_4); piVar2 = (int *)(iVar1 + 1); if (piVar2 != (int *)0x0) { if (*(char *)(param_2 + 0x2f) != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *(undefined1 *)(param_2 + 0x2f) = 0; } piVar2 = (int *)0x0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *(undefined1 *)(param_2 + 0x2f) = 0; } LAB_000349b4: *param_1 = iVar1; param_1[1] = 0; return piVar2; } pcVar4 = (char *)(param_2 + 0x2f); if (*(char *)(param_2 + 0x2f) == '\0') { iVar1 = std::_Filebuf_base::_M_seek ((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3, param_4); piVar2 = (int *)(iVar1 + 1); if (piVar2 != (int *)0x0) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } piVar2 = (int *)0x0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; } goto LAB_000349b4; } if (*(int *)(param_2 + 0x54) != 0) { iVar1 = (*(int *)(param_2 + 0x54) - *(int *)(param_2 + 8)) + *(int *)(param_2 + 0x58); p_Var5 = (_Filebuf_base *)(param_2 + 0x20); if (param_3 != 0) { iVar1 = std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); piVar2 = (int *)(iVar1 + 1); if (piVar2 != (int *)0x0) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } piVar2 = (int *)0x0; *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; } *param_1 = iVar1; param_1[1] = 0; return piVar2; } iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); piVar2 = (int *)(iVar3 - iVar1); LAB_00034b1e: *param_1 = (int)piVar2; param_1[1] = 0; return piVar2; } if (*(char *)(param_2 + 0x2c) == '\0') { local_18 = *(int **)(param_2 + 0x4c); iVar1 = (**(code **)(**(int **)(param_2 + 0x68) + 0x1c)) (*(int **)(param_2 + 0x68),&local_18,*(undefined4 *)(param_2 + 0x3c), *(undefined4 *)(param_2 + 0x44), *(int *)(param_2 + 8) - *(int *)(param_2 + 4)); iVar3 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),0,2); piVar2 = local_18; if ((iVar3 != -1) && (iVar1 = ((iVar3 + iVar1) - *(int *)(param_2 + 0x48)) + *(int *)(param_2 + 0x3c), -1 < iVar1)) { if (param_3 != 0) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; *param_1 = iVar1; param_1[1] = (int)piVar2; return piVar2; } *param_1 = iVar1; goto LAB_00034bca; } } else { iVar1 = (*(int *)(param_2 + 8) - *(int *)(param_2 + 4)) * *(int *)(param_2 + 0x6c); iVar3 = *(int *)(param_2 + 0x48) - *(int *)(param_2 + 0x3c); if (iVar1 - iVar3 == 0 || iVar1 < iVar3) { iVar1 = *(int *)(param_2 + 0x48) - (*(int *)(param_2 + 0x3c) + iVar1); p_Var5 = (_Filebuf_base *)(param_2 + 0x20); if (param_3 != 0) { piVar2 = (int *)std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2); if (piVar2 != (int *)0xffffffff) { if (*pcVar4 != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap (p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *pcVar4 = '\0'; } *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *pcVar4 = '\0'; } *param_1 = (int)piVar2; param_1[1] = 0; return piVar2; } iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2); piVar2 = (int *)(iVar3 - iVar1); goto LAB_00034b1e; } } } *param_1 = -1; LAB_00034bca: param_1[1] = 0; return param_1; } ### FUNC FUN_00034bea @ 00034bea int * FUN_00034bea(int *param_1,int param_2,int param_3,int param_4) { int iVar1; int iVar2; int iVar3; if (((*(char *)(param_2 + 0x28) == '\0') || (iVar1 = FUN_00035322(param_2,1), param_3 == -1)) || (iVar1 != 1)) { iVar3 = 0; iVar1 = -1; } else { iVar2 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),param_3,1); iVar1 = -1; iVar3 = 0; if (iVar2 != -1) { *(int *)(param_2 + 0x4c) = param_4; if (*(char *)(param_2 + 0x2f) != '\0') { if (*(void **)(param_2 + 0x54) != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54), *(long *)(param_2 + 0x58)); *(undefined4 *)(param_2 + 0x54) = 0; *(undefined4 *)(param_2 + 0x58) = 0; } *(undefined1 *)(param_2 + 0x2f) = 0; } *(undefined4 *)(param_2 + 4) = 0; *(undefined4 *)(param_2 + 8) = 0; *(undefined4 *)(param_2 + 0xc) = 0; *(undefined4 *)(param_2 + 0x10) = 0; *(undefined4 *)(param_2 + 0x14) = 0; *(undefined4 *)(param_2 + 0x18) = 0; *(undefined1 *)(param_2 + 0x32) = 0; *(undefined1 *)(param_2 + 0x31) = 0; *(undefined1 *)(param_2 + 0x30) = 0; *(undefined1 *)(param_2 + 0x2f) = 0; iVar1 = param_3; iVar3 = param_4; } } *param_1 = iVar1; param_1[1] = iVar3; return param_1 + 2; } ### FUNC FUN_00034c8e @ 00034c8e undefined4 FUN_00034c8e(int *param_1) { int iVar1; undefined4 uVar2; uVar2 = 0; if ((char)param_1[0xc] != '\0') { uVar2 = 0; iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); if (iVar1 == -1) { uVar2 = 0xffffffff; } } return uVar2; } ### FUNC FUN_00034cb0 @ 00034cb0 int FUN_00034cb0(int param_1) { int iVar1; int iVar2; undefined4 uStack_1c; uStack_1c = -1; if (((*(char *)(param_1 + 0x28) != '\0') && (*(char *)(param_1 + 0x30) == '\0')) && (*(char *)(param_1 + 0x31) == '\0')) { if (*(char *)(param_1 + 0x32) != '\0') { return *(int *)(param_1 + 0xc) - *(int *)(param_1 + 8); } uStack_1c = 0; if (*(char *)(param_1 + 0x2c) != '\0') { iVar1 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_1 + 0x20),0,2); iVar2 = std::_Filebuf_base::_M_file_size((_Filebuf_base *)(param_1 + 0x20)); uStack_1c = iVar2 - iVar1; if (iVar2 <= iVar1) { uStack_1c = 0; } if (iVar1 < 0) { return 0; } } } return uStack_1c; } ### FUNC FUN_00034d20 @ 00034d20 int FUN_00034d20(int *param_1,undefined1 *param_2,int param_3) { uint uVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; iVar4 = 0; if (0 < param_3) { iVar4 = 0; do { uVar3 = param_1[2]; if (uVar3 < (uint)param_1[3]) { uVar1 = param_1[3] - uVar3; uVar5 = param_3 - iVar4; if (uVar1 <= (uint)(param_3 - iVar4)) { uVar5 = uVar1; } if (uVar5 != 0) { __aeabi_memcpy(param_2,uVar3,uVar5); uVar3 = param_1[2]; } param_1[2] = uVar3 + uVar5; param_2 = param_2 + uVar5; iVar4 = uVar5 + iVar4; } else { iVar2 = (**(code **)(*param_1 + 0x24))(param_1); if (iVar2 == -1) { return iVar4; } *param_2 = (char)iVar2; param_2 = param_2 + 1; iVar4 = iVar4 + 1; } } while (iVar4 < param_3); } return iVar4; } ### FUNC FUN_00034d90 @ 00034d90 void FUN_00034d90(filebuf *param_1) { std::_Underflow>::_M_doit(param_1); return; } ### FUNC FUN_00034d9a @ 00034d9a uint FUN_00034d9a(int *param_1) { int iVar1; uint uVar2; byte *pbVar3; iVar1 = (**(code **)(*param_1 + 0x20))(param_1); uVar2 = 0xffffffff; if (iVar1 != -1) { pbVar3 = (byte *)param_1[2]; param_1[2] = (int)(pbVar3 + 1); uVar2 = (uint)*pbVar3; } return uVar2; } ### FUNC FUN_00034dbc @ 00034dbc uint FUN_00034dbc(int param_1,uint param_2) { int iVar1; int iVar2; byte *pbVar3; if (*(char *)(param_1 + 0x2f) == '\0') { return 0xffffffff; } iVar2 = *(int *)(param_1 + 4); iVar1 = *(int *)(param_1 + 8); if (iVar1 == iVar2) { if (param_2 == 0xffffffff) { return 0xffffffff; } } else { if (param_2 == 0xffffffff) { *(int *)(param_1 + 8) = iVar1 + -1; param_2 = (uint)*(byte *)(iVar1 + -1); LAB_00034e30: return param_2 & 0xff; } pbVar3 = (byte *)(iVar1 + -1); if (((uint)*(byte *)(iVar1 + -1) == (param_2 & 0xff)) || (*(int *)(param_1 + 0x54) == 0)) { *(byte **)(param_1 + 8) = pbVar3; if ((uint)*pbVar3 == (param_2 & 0xff)) goto LAB_00034e30; goto LAB_00034e50; } } if (*(char *)(param_1 + 0x32) == '\0') { *(int *)(param_1 + 0x5c) = iVar2; *(int *)(param_1 + 0x60) = iVar1; *(undefined4 *)(param_1 + 100) = *(undefined4 *)(param_1 + 0xc); pbVar3 = (byte *)(param_1 + 0x7b); *(byte **)(param_1 + 4) = pbVar3; *(byte **)(param_1 + 8) = pbVar3; *(int *)(param_1 + 0xc) = param_1 + 0x7c; *(undefined1 *)(param_1 + 0x32) = 1; } else { if (iVar2 == param_1 + 0x74) { return 0xffffffff; } pbVar3 = (byte *)(*(int *)(param_1 + 0xc) + -1); *(byte **)(param_1 + 4) = pbVar3; *(byte **)(param_1 + 8) = pbVar3; *(int *)(param_1 + 0xc) = param_1 + 0x7c; } LAB_00034e50: *pbVar3 = (byte)param_2; return param_2; } ### FUNC FUN_00034e58 @ 00034e58 int FUN_00034e58(int *param_1,undefined1 *param_2,int param_3) { uint uVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; iVar4 = 0; if (0 < param_3) { iVar4 = 0; do { while( true ) { uVar1 = param_1[5]; if ((uint)param_1[6] <= uVar1) break; uVar3 = param_1[6] - uVar1; uVar5 = param_3 - iVar4; if (uVar3 <= (uint)(param_3 - iVar4)) { uVar5 = uVar3; } if (uVar5 != 0) { __aeabi_memcpy(uVar1,param_2,uVar5); uVar1 = param_1[5]; } param_1[5] = uVar1 + uVar5; param_2 = param_2 + uVar5; iVar4 = uVar5 + iVar4; if (param_3 <= iVar4) { return iVar4; } } iVar2 = (**(code **)(*param_1 + 0x34))(param_1,*param_2); if (iVar2 == -1) { return iVar4; } param_2 = param_2 + 1; iVar4 = iVar4 + 1; } while (iVar4 < param_3); } return iVar4; } ### FUNC FUN_00034ed0 @ 00034ed0 int FUN_00034ed0(int *param_1,undefined4 param_2,int param_3) { uint uVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; iVar4 = 0; if (0 < param_3) { iVar4 = 0; do { while( true ) { uVar1 = param_1[5]; if (uVar1 < (uint)param_1[6]) break; iVar2 = (**(code **)(*param_1 + 0x34))(param_1,param_2); if (iVar2 == -1) { return iVar4; } iVar4 = iVar4 + 1; if (param_3 <= iVar4) { return iVar4; } } uVar3 = param_1[6] - uVar1; uVar5 = param_3 - iVar4; if (uVar3 <= (uint)(param_3 - iVar4)) { uVar5 = uVar3; } __aeabi_memset(uVar1,uVar5,param_2); param_1[5] = param_1[5] + uVar5; iVar4 = uVar5 + iVar4; } while (iVar4 < param_3); } return iVar4; } ### FUNC FUN_00034f2c @ 00034f2c int FUN_00034f2c(int param_1,int param_2) { int iVar1; uint uVar2; char *pcVar3; int extraout_r1; undefined1 *puVar4; char *pcVar5; char *local_20; int local_1c; char *local_18; puVar4 = (undefined1 *)(param_1 + 0x30); if (*(char *)(param_1 + 0x30) == '\0') { if (*(char *)(param_1 + 0x28) == '\0') { return -1; } uVar2 = *(uint *)(param_1 + 0x24); if ((uVar2 & 0x10) == 0) { return -1; } if (*(char *)(param_1 + 0x2f) != '\0') { return -1; } if (*(char *)(param_1 + 0x31) != '\0') { return -1; } if (*(int *)(param_1 + 0x34) == 0) { iVar1 = std::_Filebuf_base::_M_page_size + 0xfff; __aeabi_uidivmod(iVar1); iVar1 = FUN_000352a0(param_1,0,iVar1 - extraout_r1); if (iVar1 != 1) { return -1; } uVar2 = *(uint *)(param_1 + 0x24); } if ((uVar2 & 1) != 0) { *(undefined4 *)(param_1 + 0x4c) = 0; } pcVar5 = *(char **)(param_1 + 0x34); iVar1 = *(int *)(param_1 + 0x38); *(char **)(param_1 + 0x10) = pcVar5; *(char **)(param_1 + 0x14) = pcVar5; *(int *)(param_1 + 0x18) = iVar1 + -1; *puVar4 = 1; local_20 = pcVar5; } else { pcVar5 = *(char **)(param_1 + 0x34); iVar1 = *(int *)(param_1 + 0x38); local_20 = *(char **)(param_1 + 0x14); } *(char **)(param_1 + 0x10) = pcVar5; *(char **)(param_1 + 0x14) = pcVar5; *(int *)(param_1 + 0x18) = iVar1 + -1; if (param_2 != -1) { *local_20 = (char)param_2; local_20 = local_20 + 1; } if (pcVar5 != local_20) { do { local_1c = *(int *)(param_1 + 0x3c); local_18 = pcVar5; iVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 8)) (*(int **)(param_1 + 0x68),param_1 + 0x4c,pcVar5,local_20,&local_18,local_1c ,*(undefined4 *)(param_1 + 0x40),&local_1c); if (iVar1 == 2) { LAB_000350a2: *puVar4 = 0; *(undefined1 *)(param_1 + 0x31) = 1; *(undefined1 *)(param_1 + 0x2f) = 0; *(undefined4 *)(param_1 + 0x10) = 0; *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x18) = 0; return -1; } if (iVar1 == 3) { iVar1 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 0x20),pcVar5,(int)local_20 - (int)pcVar5); if (iVar1 != 1) { LAB_000350d6: *puVar4 = 0; *(undefined1 *)(param_1 + 0x31) = 1; *(undefined1 *)(param_1 + 0x2f) = 0; *(undefined4 *)(param_1 + 0x10) = 0; *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x18) = 0; return -1; } break; } if ((local_18 != local_20) || (pcVar3 = *(char **)(param_1 + 0x3c), local_1c - (int)pcVar3 != ((int)local_20 - (int)pcVar5) * *(int *)(param_1 + 0x6c))) { if ((*(char *)(param_1 + 0x2c) != '\0') || (local_18 == pcVar5)) goto LAB_000350a2; pcVar3 = *(char **)(param_1 + 0x3c); } iVar1 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 0x20),pcVar3,local_1c - (int)pcVar3); if (iVar1 != 1) goto LAB_000350d6; pcVar5 = local_18; } while (local_18 != local_20); } iVar1 = 0; if (param_2 != -1) { iVar1 = param_2; } return iVar1; } ### FUNC FUN_00035100 @ 00035100 void FUN_00035100(int param_1,undefined4 param_2) { if (((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) && (*(char *)(param_1 + 0x31) == '\0')) { FUN_00034738(param_1,param_2,1); return; } return; } ### FUNC FUN_00035128 @ 00035128 undefined4 * FUN_00035128(undefined4 *param_1) { *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); return param_1; } ### FUNC FUN_00035148 @ 00035148 void FUN_00035148(undefined4 *param_1) { *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_0003519e @ 0003519e int * FUN_0003519e(int *param_1) { char cVar1; bool bVar2; bool bVar3; int iVar4; int iVar5; char *pcVar6; char *local_18; cVar1 = (char)param_1[10]; if ((char)param_1[0xc] == '\0') { bVar2 = cVar1 != '\0'; if (*(char *)((int)param_1 + 0x2f) != '\0') { if ((void *)param_1[0x15] != (void *)0x0) { std::_Filebuf_base::_M_unmap ((_Filebuf_base *)(param_1 + 8),(void *)param_1[0x15],param_1[0x16]); param_1[0x15] = 0; param_1[0x16] = 0; } *(undefined1 *)((int)param_1 + 0x2f) = 0; } } else { bVar2 = false; if (cVar1 != '\0') { iVar4 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); bVar2 = false; if (((iVar4 != -1) && (bVar2 = true, (char)param_1[0xc] != '\0')) && ((char)param_1[0xb] == '\0')) { bVar3 = true; while( true ) { local_18 = (char *)param_1[0xf]; iVar4 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); bVar2 = bVar3; if (((iVar4 == 3) || ((pcVar6 = (char *)param_1[0xf], iVar4 == 0 && (local_18 == pcVar6))) ) || (bVar2 = false, iVar4 == 2)) break; iVar5 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 8),pcVar6,(int)local_18 - (int)pcVar6); if ((iVar5 != 1) || (bVar2 = bVar3, iVar4 != 1)) break; } } } } iVar4 = std::_Filebuf_base::_M_close((_Filebuf_base *)(param_1 + 8)); *(undefined1 *)((int)param_1 + 0x32) = 0; *(undefined1 *)((int)param_1 + 0x31) = 0; *(undefined1 *)(param_1 + 0xc) = 0; *(undefined1 *)((int)param_1 + 0x2f) = 0; param_1[1] = 0; param_1[2] = 0; param_1[3] = 0; param_1[4] = 0; param_1[5] = 0; param_1[6] = 0; __aeabi_memclr4(param_1 + 0x11,0x24); if (iVar4 == 0) { param_1 = (int *)0x0; } if (!bVar2) { param_1 = (int *)0x0; } return param_1; } ### FUNC FUN_000352a0 @ 000352a0 undefined4 FUN_000352a0(int param_1,int param_2,size_t param_3) { size_t __size; void *pvVar1; undefined4 uVar2; int iVar3; undefined1 uVar4; size_t sVar5; if (param_2 == 0) { pvVar1 = malloc(param_3); *(void **)(param_1 + 0x34) = pvVar1; uVar4 = 1; if (pvVar1 == (void *)0x0) { return 0; } } else { *(int *)(param_1 + 0x34) = param_2; uVar4 = 0; } *(undefined1 *)(param_1 + 0x2e) = uVar4; sVar5 = param_3 * *(int *)(param_1 + 0x6c); __size = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))(); if ((int)__size <= (int)sVar5) { __size = sVar5; } pvVar1 = malloc(__size); *(void **)(param_1 + 0x3c) = pvVar1; if (pvVar1 == (void *)0x0) { pvVar1 = (void *)0x0; if (*(char *)(param_1 + 0x2e) != '\0') { free(*(void **)(param_1 + 0x34)); pvVar1 = *(void **)(param_1 + 0x3c); } free(pvVar1); iVar3 = 0; *(undefined4 *)(param_1 + 0x34) = 0; *(undefined4 *)(param_1 + 0x38) = 0; *(undefined4 *)(param_1 + 0x3c) = 0; uVar2 = 0; } else { *(size_t *)(param_1 + 0x38) = *(int *)(param_1 + 0x34) + param_3; iVar3 = (int)pvVar1 + __size; uVar2 = 1; } *(int *)(param_1 + 0x40) = iVar3; return uVar2; } ### FUNC FUN_00035322 @ 00035322 undefined4 FUN_00035322(int *param_1,int param_2) { int iVar1; int iVar2; char *pcVar3; char *local_18; *(undefined1 *)((int)param_1 + 0x31) = 0; if ((char)param_1[0xc] != '\0') { iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff); if (param_2 == 1) { if (iVar1 == -1) { LAB_000353e0: *(char *)(param_1 + 0xc) = '\0'; *(undefined1 *)((int)param_1 + 0x31) = 1; param_1[4] = 0; param_1[5] = 0; param_1[6] = 0; return 0; } if (((char)param_1[0xc] != '\0') && ((char)param_1[0xb] == '\0')) { do { local_18 = (char *)param_1[0xf]; iVar1 = (**(code **)(*(int *)param_1[0x1a] + 0x10)) ((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18); if ((iVar1 == 3) || ((pcVar3 = (char *)param_1[0xf], iVar1 == 0 && (local_18 == pcVar3)))) break; if ((iVar1 == 2) || (iVar2 = std::_Filebuf_base::_M_write ((_Filebuf_base *)(param_1 + 8),pcVar3,(int)local_18 - (int)pcVar3), iVar2 != 1)) goto LAB_000353e0; } while (iVar1 == 1); } } else if (iVar1 == -1) goto LAB_000353e0; } if ((*(char *)((int)param_1 + 0x2f) != '\0') && (*(char *)((int)param_1 + 0x32) != '\0')) { param_1[1] = param_1[0x17]; param_1[2] = param_1[0x18]; param_1[3] = param_1[0x19]; *(undefined1 *)((int)param_1 + 0x32) = 0; } return 1; } ### FUNC FUN_000353f8 @ 000353f8 void FUN_000353f8(int param_1,int param_2) { uint uVar1; locale alStack_1c [4]; locale alStack_18 [4]; *(int *)(param_1 + 0x48) = param_2; uVar1 = (uint)(param_2 == 0); *(uint *)(param_1 + 8) = uVar1; if ((*(uint *)(param_1 + 0x14) & uVar1) == 0) { std::locale::locale(alStack_1c); FUN_000354dc(alStack_18,param_1,alStack_1c); std::locale::~locale(alStack_18); std::locale::~locale(alStack_1c); *(undefined1 *)(param_1 + 0x44) = 0x20; *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x4c) = 0; *(uint *)(param_1 + 8) = uVar1; *(undefined4 *)(param_1 + 4) = 0x1008; *(undefined4 *)(param_1 + 0x1c) = 0; *(undefined4 *)(param_1 + 0x18) = 6; return; } /* WARNING: Subroutine does not return */ std::ios_base::_M_throw_failure(); } ### FUNC FUN_00035468 @ 00035468 int FUN_00035468(int param_1) { std::ios_base::~ios_base((ios_base *)(param_1 + 8)); return param_1; } ### FUNC FUN_00035478 @ 00035478 void FUN_00035478(void *param_1) { std::ios_base::~ios_base((ios_base *)((int)param_1 + 8)); operator_delete(param_1); return; } ### FUNC FUN_000354b0 @ 000354b0 void FUN_000354b0(int *param_1) { void *pvVar1; pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 8)); operator_delete(pvVar1); return; } ### FUNC FUN_000354dc @ 000354dc void FUN_000354dc(locale *param_1,int param_2,locale *param_3) { undefined4 uVar1; int *piVar2; locale alStack_18 [4]; std::ios_base::imbue(param_1); piVar2 = *(int **)(param_2 + 0x48); if (piVar2 != (int *)0x0) { (**(code **)(*piVar2 + 0x38))(piVar2,param_3); std::locale::locale(alStack_18,(locale *)(piVar2 + 7)); std::locale::operator=((locale *)(piVar2 + 7),param_3); std::locale::~locale(alStack_18); } uVar1 = std::locale::_M_use_facet(param_3,(id *)&std::ctype::id); *(undefined4 *)(param_2 + 0x40) = uVar1; return; } ### FUNC FUN_00035588 @ 00035588 int FUN_00035588(int param_1) { std::ios_base::~ios_base((ios_base *)(param_1 + 4)); return param_1; } ### FUNC FUN_00035598 @ 00035598 void FUN_00035598(void *param_1) { std::ios_base::~ios_base((ios_base *)((int)param_1 + 4)); operator_delete(param_1); return; } ### FUNC FUN_000355d0 @ 000355d0 void FUN_000355d0(int *param_1) { void *pvVar1; pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 4)); operator_delete(pvVar1); return; } ### FUNC FUN_000355fc @ 000355fc void FUN_000355fc(int param_1,int param_2) { undefined4 uVar1; uint uVar2; locale alStack_1c [4]; locale alStack_18 [4]; *(int *)(param_1 + 0x48) = param_2; uVar2 = (uint)(param_2 == 0); *(uint *)(param_1 + 8) = uVar2; if ((*(uint *)(param_1 + 0x14) & uVar2) == 0) { std::locale::locale(alStack_1c); FUN_000356e4(alStack_18,param_1,alStack_1c); std::locale::~locale(alStack_18); std::locale::~locale(alStack_1c); *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x4c) = 0; *(uint *)(param_1 + 8) = uVar2; *(undefined4 *)(param_1 + 4) = 0x1008; *(undefined4 *)(param_1 + 0x1c) = 0; *(undefined4 *)(param_1 + 0x18) = 6; uVar1 = (**(code **)(**(int **)(param_1 + 0x40) + 0x28))(*(int **)(param_1 + 0x40),0x20); *(undefined4 *)(param_1 + 0x44) = uVar1; return; } /* WARNING: Subroutine does not return */ std::ios_base::_M_throw_failure(); } ### FUNC FUN_00035670 @ 00035670 int FUN_00035670(int param_1) { std::ios_base::~ios_base((ios_base *)(param_1 + 8)); return param_1; } ### FUNC FUN_00035680 @ 00035680 void FUN_00035680(void *param_1) { std::ios_base::~ios_base((ios_base *)((int)param_1 + 8)); operator_delete(param_1); return; } ### FUNC FUN_000356b8 @ 000356b8 void FUN_000356b8(int *param_1) { void *pvVar1; pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 8)); operator_delete(pvVar1); return; } ### FUNC FUN_000356e4 @ 000356e4 void FUN_000356e4(locale *param_1,int param_2,locale *param_3) { undefined4 uVar1; int *piVar2; locale alStack_18 [4]; std::ios_base::imbue(param_1); piVar2 = *(int **)(param_2 + 0x48); if (piVar2 != (int *)0x0) { (**(code **)(*piVar2 + 0x38))(piVar2,param_3); std::locale::locale(alStack_18,(locale *)(piVar2 + 7)); std::locale::operator=((locale *)(piVar2 + 7),param_3); std::locale::~locale(alStack_18); } uVar1 = std::locale::_M_use_facet(param_3,(id *)&std::ctype::id); *(undefined4 *)(param_2 + 0x40) = uVar1; return; } ### FUNC FUN_00035790 @ 00035790 int FUN_00035790(int param_1) { std::ios_base::~ios_base((ios_base *)(param_1 + 4)); return param_1; } ### FUNC FUN_000357a0 @ 000357a0 void FUN_000357a0(void *param_1) { std::ios_base::~ios_base((ios_base *)((int)param_1 + 4)); operator_delete(param_1); return; } ### FUNC FUN_000357d8 @ 000357d8 void FUN_000357d8(int *param_1) { void *pvVar1; pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc)); std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 4)); operator_delete(pvVar1); return; } ### FUNC ~facet @ 00035804 /* std::locale::facet::~facet() */ facet * __thiscall std::locale::facet::~facet(facet *this) { pthread_mutex_destroy((pthread_mutex_t *)(this + 8)); return this; } ### FUNC ~facet @ 00035814 /* std::locale::facet::~facet() */ void __thiscall std::locale::facet::~facet(facet *this) { pthread_mutex_destroy((pthread_mutex_t *)(this + 8)); operator_delete(this); return; } ### FUNC _M_throw_on_null_name @ 00035838 /* std::locale::_M_throw_on_null_name() */ void std::locale::_M_throw_on_null_name(void) { __Named_exception *this; undefined1 auStack_30 [4]; string asStack_2c [24]; this = (__Named_exception *)FUN_00030824(0x108); FUN_00031c38(asStack_2c,&LAB_000358b8,auStack_30); __Named_exception::__Named_exception(this,asStack_2c); *(undefined ***)this = &PTR____Named_exception_00068ec0; /* WARNING: Subroutine does not return */ FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception); } ### FUNC _M_throw_on_combine_error @ 000358e0 /* std::locale::_M_throw_on_combine_error(std::string const&) */ void std::locale::_M_throw_on_combine_error(string *param_1) { size_t sVar1; __Named_exception *this; char *__s; undefined1 auStack_48 [4]; string asStack_44 [24]; undefined1 auStack_2c [20]; undefined4 local_18; FUN_00031c38(auStack_2c,&LAB_000359d4,asStack_44); FUN_00037294(auStack_2c,&LAB_000359ec,&LAB_000359f0); __s = *(char **)(param_1 + 0x14); if (__s == *(char **)(param_1 + 0x10)) { __s = "system"; } sVar1 = strlen(__s); FUN_00037294(auStack_2c,__s,__s + sVar1); FUN_00037294(auStack_2c," locale",""); this = (__Named_exception *)FUN_00030824(0x108); FUN_00031c38(asStack_44,local_18,auStack_48); __Named_exception::__Named_exception(this,asStack_44); *(undefined ***)this = &PTR____Named_exception_00068ec0; /* WARNING: Subroutine does not return */ FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception); } ### FUNC _M_throw_on_creation_failure @ 00035a08 /* std::locale::_M_throw_on_creation_failure(int, char const*, char const*) */ void std::locale::_M_throw_on_creation_failure(int param_1,char *param_2,char *param_3) { size_t sVar1; undefined4 uVar2; __Named_exception *this; undefined1 auStack_48 [4]; string asStack_44 [24]; undefined1 local_2c [16]; undefined1 *local_1c; undefined1 *local_18; local_1c = local_2c; local_2c[0] = 0; local_18 = local_1c; if (param_1 != 4) { if (param_1 == 3) { FUN_00037294(local_2c,&LAB_00035bb8,&LAB_00035bea_1); if (*param_2 == '\0') { param_2 = "system"; } sVar1 = strlen(param_2); FUN_00037294(local_2c,param_2,param_2 + sVar1); FUN_00037294(local_2c," locale",""); } else if (param_1 == 1) { FUN_00037294(local_2c,&LAB_00035bf4,&LAB_00035c18_1); sVar1 = strlen(param_3); FUN_00037294(local_2c,param_3,param_3 + sVar1); FUN_00037294(local_2c," facet category, unable to create facet for ",""); if (*param_2 == '\0') { param_2 = "system"; } sVar1 = strlen(param_2); FUN_00037294(local_2c,param_2,param_2 + sVar1); FUN_00037294(local_2c," locale",""); } else { FUN_00037294(local_2c,&LAB_00035c28,&LAB_00035c3e_1); sVar1 = strlen(param_3); FUN_00037294(local_2c,param_3,param_3 + sVar1); FUN_00037294(local_2c,&LAB_00035c40,&LAB_00035c4c); sVar1 = strlen(param_2); FUN_00037294(local_2c,param_2,param_2 + sVar1); FUN_00037294(local_2c,&LAB_00035c50,&LAB_00035c50_1); } this = (__Named_exception *)FUN_00030824(0x108); FUN_00031c38(asStack_44,local_18,auStack_48); __Named_exception::__Named_exception(this,asStack_44); *(undefined ***)this = &PTR____Named_exception_00068ec0; /* WARNING: Subroutine does not return */ FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception); } FUN_00030824(4); uVar2 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC locale @ 00035c60 /* std::locale::locale() */ locale * __thiscall std::locale::locale(locale *this) { undefined4 *puVar1; undefined4 uVar2; puVar1 = (undefined4 *)FUN_000395ec(); uVar2 = _get_Locale_impl((_Locale_impl *)*puVar1); *(undefined4 *)this = uVar2; return this; } ### FUNC locale @ 00035c7a /* std::locale::locale(std::locale const&) */ locale * __thiscall std::locale::locale(locale *this,locale *param_1) { undefined4 uVar1; uVar1 = _get_Locale_impl(*(_Locale_impl **)param_1); *(undefined4 *)this = uVar1; return this; } ### FUNC _M_insert @ 00035c90 /* std::locale::_M_insert(std::locale::facet*, std::locale::id&) */ void __thiscall std::locale::_M_insert(locale *this,facet *param_1,id *param_2) { int iVar1; _Locale_impl *this_00; if (param_1 != (facet *)0x0) { this_00 = *(_Locale_impl **)this; if (*(int *)param_2 == 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d3c); iVar1 = id::_S_max + 1; *(int *)param_2 = id::_S_max; id::_S_max = iVar1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d3c); } _Locale_impl::insert(this_00,param_1,param_2); } return; } ### FUNC locale @ 00035ce0 /* std::locale::locale(std::_Locale_impl*) */ locale * __thiscall std::locale::locale(locale *this,_Locale_impl *param_1) { undefined4 uVar1; uVar1 = _get_Locale_impl(param_1); *(undefined4 *)this = uVar1; return this; } ### FUNC locale @ 00035cf4 /* WARNING: Removing unreachable block (ram,0x00035e6a) */ /* WARNING: Restarted to delay deadcode elimination for space: stack */ /* std::locale::locale(char const*) */ locale * __thiscall std::locale::locale(locale *this,char *param_1) { char *__s1; _Locale_impl *this_00; _Locale_name_hint *p_Var1; int iVar2; size_t sVar3; undefined4 *puVar4; undefined4 uVar5; int iVar6; char acStack_62c [256]; char *local_52c; char acStack_528 [256]; char *local_428; char acStack_424 [256]; char *local_324; char acStack_320 [256]; char *local_220; char acStack_21c [256]; char *local_11c; char acStack_118 [256]; char *local_18; *(undefined4 *)this = 0; if (param_1 == (char *)0x0) { uVar5 = _M_throw_on_null_name(); operator_delete(this); FUN_000308d8(uVar5); uVar5 = FUN_00030a44(); operator_delete((void *)0x0); FUN_0003094c(); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar5); } if ((*param_1 == 'C') && (param_1[1] == '\0')) { puVar4 = (undefined4 *)FUN_0003956c(); uVar5 = _get_Locale_impl((_Locale_impl *)*puVar4); } else { this_00 = (_Locale_impl *)operator_new(0x2c); _Locale_impl::_Locale_impl(this_00,id::_S_max,param_1); local_52c = param_1; local_428 = param_1; local_324 = param_1; local_11c = param_1; local_220 = param_1; local_18 = param_1; p_Var1 = (_Locale_name_hint *) _Locale_impl::insert_ctype_facets (this_00,&local_18,acStack_118,(_Locale_name_hint *)0x0); p_Var1 = (_Locale_name_hint *) _Locale_impl::insert_numeric_facets(this_00,&local_11c,acStack_21c,p_Var1); p_Var1 = (_Locale_name_hint *) _Locale_impl::insert_time_facets(this_00,&local_220,acStack_320,p_Var1); p_Var1 = (_Locale_name_hint *) _Locale_impl::insert_collate_facets(this_00,&local_324,acStack_424,p_Var1); p_Var1 = (_Locale_name_hint *) _Locale_impl::insert_monetary_facets(this_00,&local_428,acStack_528,p_Var1); _Locale_impl::insert_messages_facets(this_00,&local_52c,acStack_62c,p_Var1); __s1 = local_18; iVar2 = strcmp(local_18,local_11c); if (((iVar2 == 0) && (((iVar2 = strcmp(__s1,local_220), iVar2 == 0 && (iVar2 = strcmp(__s1,local_324), iVar2 == 0)) && (iVar2 = strcmp(__s1,local_428), iVar2 == 0)))) && (iVar2 = strcmp(__s1,local_52c), iVar2 == 0)) { sVar3 = strlen(__s1); iVar6 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); if ((uint)(iVar6 - iVar2) < sVar3) { if (iVar6 != iVar2) { __aeabi_memmove(iVar2,__s1); iVar6 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } FUN_00037294(this_00 + 8,__s1 + (iVar6 - iVar2),__s1 + sVar3); } else { if (sVar3 != 0) { __aeabi_memmove(iVar2,__s1,sVar3); iVar6 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } iVar2 = iVar2 + sVar3; if (iVar2 != iVar6) { __aeabi_memmove(iVar2,iVar6); *(int *)(this_00 + 0x18) = *(int *)(this_00 + 0x18) + (iVar2 - iVar6); } } } uVar5 = _get_Locale_impl(this_00); } *(undefined4 *)this = uVar5; return this; } ### FUNC classic @ 00035ee4 /* std::locale::classic() */ void std::locale::classic(void) { FUN_0003956c(); return; } ### FUNC locale @ 00035ef0 /* WARNING: Removing unreachable block (ram,0x00036698) */ /* WARNING: Removing unreachable block (ram,0x000361de) */ /* WARNING: Removing unreachable block (ram,0x000361ee) */ /* std::locale::locale(std::locale const&, char const*, int) */ locale * __thiscall std::locale::locale(locale *this,locale *param_1,char *param_2,int param_3) { char *__s2; int *piVar1; int iVar2; _Locale_impl *this_00; size_t sVar3; int iVar4; char *__s2_00; char *__s2_01; char *__s2_02; char *__s2_03; undefined4 uVar5; __Named_exception *this_01; _Locale_impl *p_Var6; char *__s1; _Locale_name_hint *p_Var7; int iVar8; char *__s1_00; uint uVar9; char *local_8f8; int local_8f0; char acStack_8e0 [256]; char *local_7e0; char acStack_7dc [256]; char *local_6dc; char acStack_6d8 [256]; char *local_5d8; char acStack_5d4 [256]; char *local_4d4; char acStack_4d0 [256]; char *local_3d0; char acStack_3cc [256]; char *local_2cc; undefined1 auStack_2c8 [4]; int local_2c4 [5]; int *local_2b0; int local_2ac [4]; undefined4 local_29c; int *local_298; undefined1 auStack_294 [4]; int local_290 [5]; int *local_27c; int local_278 [5]; int *local_264; int local_260 [4]; undefined4 local_250; int *local_24c; undefined1 auStack_248 [4]; int local_244 [5]; int *local_230; int local_22c [5]; int *local_218; int local_214 [4]; undefined4 local_204; int *local_200; undefined1 auStack_1fc [4]; int local_1f8 [5]; int *local_1e4; int local_1e0 [5]; int *local_1cc; int local_1c8 [4]; undefined4 local_1b8; int *local_1b4; undefined1 auStack_1b0 [4]; int local_1ac [5]; int *local_198; int local_194 [5]; int *local_180; int local_17c [4]; undefined4 local_16c; int *local_168; undefined1 auStack_164 [4]; int local_160 [5]; int *local_14c; int local_148 [5]; int *local_134; int local_130 [4]; int local_120; int *local_11c; string asStack_118 [256]; undefined1 auStack_18 [4]; p_Var7 = (_Locale_name_hint *)0x0; *(undefined4 *)this = 0; if (param_2 == (char *)0x0) { _M_throw_on_null_name(); LAB_000366a4: this_01 = (__Named_exception *)FUN_00030824(local_8f0 + 8); FUN_00031c38(asStack_118,&LAB_00036a9c,acStack_3cc); __Named_exception::__Named_exception(this_01,asStack_118); *(undefined ***)this_01 = &PTR____Named_exception_00068ec0; /* WARNING: Subroutine does not return */ FUN_000309e0(this_01,&runtime_error::typeinfo,__Named_exception::~__Named_exception); } iVar2 = strcmp("*",param_2); local_8f0 = 0x100; if (iVar2 == 0) goto LAB_000366a4; this_00 = (_Locale_impl *)operator_new(0x2c); _Locale_impl::_Locale_impl(this_00,*(_Locale_impl **)param_1); local_7e0 = param_2; local_6dc = param_2; local_5d8 = param_2; local_4d4 = param_2; local_3d0 = param_2; local_2cc = param_2; if ((param_3 & 0x20U) != 0) { p_Var7 = (_Locale_name_hint *) _Locale_impl::insert_ctype_facets (this_00,&local_2cc,acStack_3cc,(_Locale_name_hint *)0x0); } if ((param_3 & 0x100U) != 0) { p_Var7 = (_Locale_name_hint *) _Locale_impl::insert_numeric_facets(this_00,&local_3d0,acStack_4d0,p_Var7); } if ((param_3 & 0x200U) != 0) { p_Var7 = (_Locale_name_hint *) _Locale_impl::insert_time_facets(this_00,&local_4d4,acStack_5d4,p_Var7); } if ((param_3 & 0x10U) != 0) { p_Var7 = (_Locale_name_hint *) _Locale_impl::insert_collate_facets(this_00,&local_5d8,acStack_6d8,p_Var7); } if ((param_3 & 0x40U) != 0) { p_Var7 = (_Locale_name_hint *) _Locale_impl::insert_monetary_facets(this_00,&local_6dc,acStack_7dc,p_Var7); } if ((param_3 & 0x400U) != 0) { _Locale_impl::insert_messages_facets(this_00,&local_7e0,acStack_8e0,p_Var7); } __s1_00 = local_2cc; __s2_00 = local_3d0; __s2 = local_4d4; __s2_01 = local_5d8; __s2_02 = local_6dc; __s2_03 = local_7e0; __s1 = *(char **)(*(int *)param_1 + 0x1c); if ((param_3 & 0x770U) == 0) { LAB_00036154: sVar3 = strlen(__s1); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); if ((uint)(iVar8 - iVar2) < sVar3) { if (iVar8 != iVar2) { __aeabi_memmove(iVar2,__s1); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } FUN_00037294(this_00 + 8,__s1 + (iVar8 - iVar2),__s1 + sVar3); goto LAB_00036612; } if (sVar3 != 0) { __aeabi_memmove(iVar2,__s1,sVar3); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } iVar2 = iVar2 + sVar3; if (iVar2 == iVar8) goto LAB_00036612; __aeabi_memmove(iVar2,iVar8); iVar4 = *(int *)(this_00 + 0x18); iVar2 = iVar2 - iVar8; } else { local_8f8 = local_4d4; iVar2 = strcmp(__s1,local_2cc); if (((((iVar2 == 0) && (iVar2 = strcmp(__s1,__s2), iVar2 == 0)) && (iVar2 = strcmp(__s1,__s2_00), iVar2 == 0)) && ((iVar2 = strcmp(__s1,__s2_01), iVar2 == 0 && (iVar2 = strcmp(__s1,__s2_02), iVar2 == 0)))) && (iVar2 = strcmp(__s1,__s2_03), iVar2 == 0)) goto LAB_00036154; if ((((param_3 & 0x770U) != 0x770) || (iVar2 = strcmp(__s1_00,__s2), iVar2 != 0)) || ((iVar2 = strcmp(__s1_00,__s2_00), iVar2 != 0 || (((iVar2 = strcmp(__s1_00,__s2_01), iVar2 != 0 || (iVar2 = strcmp(__s1_00,__s2_02), iVar2 != 0)) || (iVar2 = strcmp(__s1_00,__s2_03), iVar2 != 0)))))) { FUN_00031c38(local_160,"LC_CTYPE=",auStack_164); if ((param_3 & 0x20U) == 0) { __s1_00 = __s1; } uVar5 = FUN_0004d9d8(__s1_00,asStack_118,0,auStack_18); FUN_000371e8(local_148,local_160,uVar5); FUN_000371e8(local_130,local_148,&DAT_00036334); piVar1 = local_11c; uVar9 = local_120 - (int)local_11c; iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); p_Var6 = this_00 + 8; if ((uint)(iVar8 - iVar2) < uVar9) { if (iVar8 != iVar2) { __aeabi_memmove(iVar2,local_11c); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } FUN_00037294(p_Var6,(int)piVar1 + (iVar8 - iVar2),local_120); } else { if (uVar9 != 0) { __aeabi_memmove(iVar2,local_11c,uVar9); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } iVar2 = iVar2 + uVar9; if (iVar2 != iVar8) { __aeabi_memmove(iVar2,iVar8); *(int *)(this_00 + 0x18) = *(int *)(this_00 + 0x18) + (iVar2 - iVar8); } } if ((local_11c != local_130) && (local_11c != (int *)0x0)) { if ((uint)(local_130[0] - (int)local_11c) < 0x81) { __node_alloc::_M_deallocate(local_11c,local_130[0] - (int)local_11c); } else { operator_delete(local_11c); } } if ((local_134 != local_148) && (local_134 != (int *)0x0)) { if ((uint)(local_148[0] - (int)local_134) < 0x81) { __node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); } else { operator_delete(local_134); } } if ((local_14c != local_160) && (local_14c != (int *)0x0)) { if ((uint)(local_160[0] - (int)local_14c) < 0x81) { __node_alloc::_M_deallocate(local_14c,local_160[0] - (int)local_14c); } else { operator_delete(local_14c); } } FUN_00031c38(local_1ac,"LC_TIME=",auStack_1b0); if ((param_3 & 0x200U) == 0) { local_8f8 = __s1; } uVar5 = FUN_0004da18(local_8f8,asStack_118,0,auStack_18); FUN_000371e8(local_194,local_1ac,uVar5); FUN_000371e8(local_17c,local_194,&DAT_00036334); FUN_00037294(p_Var6,local_168,local_16c); if ((local_168 != local_17c) && (local_168 != (int *)0x0)) { if ((uint)(local_17c[0] - (int)local_168) < 0x81) { __node_alloc::_M_deallocate(local_168,local_17c[0] - (int)local_168); } else { operator_delete(local_168); } } if ((local_180 != local_194) && (local_180 != (int *)0x0)) { if ((uint)(local_194[0] - (int)local_180) < 0x81) { __node_alloc::_M_deallocate(local_180,local_194[0] - (int)local_180); } else { operator_delete(local_180); } } if ((local_198 != local_1ac) && (local_198 != (int *)0x0)) { if ((uint)(local_1ac[0] - (int)local_198) < 0x81) { __node_alloc::_M_deallocate(local_198,local_1ac[0] - (int)local_198); } else { operator_delete(local_198); } } FUN_00031c38(local_1f8,"LC_NUMERIC=",auStack_1fc); if ((param_3 & 0x100U) == 0) { __s2_00 = __s1; } uVar5 = FUN_0004d9f8(__s2_00,asStack_118,0,auStack_18); FUN_000371e8(local_1e0,local_1f8,uVar5); FUN_000371e8(local_1c8,local_1e0,&DAT_00036780); FUN_00037294(p_Var6,local_1b4,local_1b8); if ((local_1b4 != local_1c8) && (local_1b4 != (int *)0x0)) { if ((uint)(local_1c8[0] - (int)local_1b4) < 0x81) { __node_alloc::_M_deallocate(local_1b4,local_1c8[0] - (int)local_1b4); } else { operator_delete(local_1b4); } } if ((local_1cc != local_1e0) && (local_1cc != (int *)0x0)) { if ((uint)(local_1e0[0] - (int)local_1cc) < 0x81) { __node_alloc::_M_deallocate(local_1cc,local_1e0[0] - (int)local_1cc); } else { operator_delete(local_1cc); } } if ((local_1e4 != local_1f8) && (local_1e4 != (int *)0x0)) { if ((uint)(local_1f8[0] - (int)local_1e4) < 0x81) { __node_alloc::_M_deallocate(local_1e4,local_1f8[0] - (int)local_1e4); } else { operator_delete(local_1e4); } } FUN_00031c38(local_244,"LC_COLLATE=",auStack_248); if ((param_3 & 0x10U) == 0) { __s2_01 = __s1; } uVar5 = FUN_0004da38(__s2_01,asStack_118,0,auStack_18); FUN_000371e8(local_22c,local_244,uVar5); FUN_000371e8(local_214,local_22c,&DAT_00036780); FUN_00037294(p_Var6,local_200,local_204); if ((local_200 != local_214) && (local_200 != (int *)0x0)) { if ((uint)(local_214[0] - (int)local_200) < 0x81) { __node_alloc::_M_deallocate(local_200,local_214[0] - (int)local_200); } else { operator_delete(local_200); } } if ((local_218 != local_22c) && (local_218 != (int *)0x0)) { if ((uint)(local_22c[0] - (int)local_218) < 0x81) { __node_alloc::_M_deallocate(local_218,local_22c[0] - (int)local_218); } else { operator_delete(local_218); } } if ((local_230 != local_244) && (local_230 != (int *)0x0)) { if ((uint)(local_244[0] - (int)local_230) < 0x81) { __node_alloc::_M_deallocate(local_230,local_244[0] - (int)local_230); } else { operator_delete(local_230); } } FUN_00031c38(local_290,"LC_MONETARY=",auStack_294); if ((param_3 & 0x40U) == 0) { __s2_02 = __s1; } uVar5 = FUN_0004da58(__s2_02,asStack_118,0,auStack_18); FUN_000371e8(local_278,local_290,uVar5); FUN_000371e8(local_260,local_278,&DAT_00036780); FUN_00037294(p_Var6,local_24c,local_250); if ((local_24c != local_260) && (local_24c != (int *)0x0)) { if ((uint)(local_260[0] - (int)local_24c) < 0x81) { __node_alloc::_M_deallocate(local_24c,local_260[0] - (int)local_24c); } else { operator_delete(local_24c); } } if ((local_264 != local_278) && (local_264 != (int *)0x0)) { if ((uint)(local_278[0] - (int)local_264) < 0x81) { __node_alloc::_M_deallocate(local_264,local_278[0] - (int)local_264); } else { operator_delete(local_264); } } if ((local_27c != local_290) && (local_27c != (int *)0x0)) { if ((uint)(local_290[0] - (int)local_27c) < 0x81) { __node_alloc::_M_deallocate(local_27c,local_290[0] - (int)local_27c); } else { operator_delete(local_27c); } } FUN_00031c38(local_2c4,"LC_MESSAGES=",auStack_2c8); if ((param_3 & 0x400U) == 0) { __s2_03 = __s1; } uVar5 = FUN_0004da78(__s2_03,asStack_118,0,auStack_18); FUN_000371e8(local_2ac,local_2c4,uVar5); FUN_00037294(p_Var6,local_298,local_29c); if ((local_298 != local_2ac) && (local_298 != (int *)0x0)) { if ((uint)(local_2ac[0] - (int)local_298) < 0x81) { __node_alloc::_M_deallocate(local_298,local_2ac[0] - (int)local_298); } else { operator_delete(local_298); } } if ((local_2b0 != local_2c4) && (local_2b0 != (int *)0x0)) { if ((uint)(local_2c4[0] - (int)local_2b0) < 0x81) { __node_alloc::_M_deallocate(local_2b0,local_2c4[0] - (int)local_2b0); } else { operator_delete(local_2b0); } } goto LAB_00036612; } sVar3 = strlen(__s1_00); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); if ((uint)(iVar8 - iVar2) < sVar3) { if (iVar8 != iVar2) { __aeabi_memmove(iVar2,__s1_00); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } FUN_00037294(this_00 + 8,__s1_00 + (iVar8 - iVar2),__s1_00 + sVar3); goto LAB_00036612; } if (sVar3 != 0) { __aeabi_memmove(iVar2,__s1_00,sVar3); iVar8 = *(int *)(this_00 + 0x18); iVar2 = *(int *)(this_00 + 0x1c); } iVar2 = iVar2 + sVar3; if (iVar2 == iVar8) goto LAB_00036612; __aeabi_memmove(iVar2,iVar8); iVar4 = *(int *)(this_00 + 0x18); iVar2 = iVar2 - iVar8; } *(int *)(this_00 + 0x18) = iVar4 + iVar2; LAB_00036612: uVar5 = _get_Locale_impl(this_00); *(undefined4 *)this = uVar5; return this; } ### FUNC locale @ 00036b08 /* WARNING: Removing unreachable block (ram,0x00036c52) */ /* WARNING: Type propagation algorithm not settling */ /* std::locale::locale(std::locale const&, std::locale const&, int) */ locale * __thiscall std::locale::locale(locale *this,locale *param_1,locale *param_2,int param_3) { bool bVar1; _Locale_impl *this_00; _Locale_impl *p_Var2; size_t sVar3; int iVar4; undefined1 *puVar5; undefined1 *puVar6; undefined4 uVar7; int iVar8; char *__s; int local_44 [4]; int local_34; int *local_30; int local_2c [4]; int local_1c; int *local_18; *(undefined4 *)this = 0; this_00 = (_Locale_impl *)operator_new(0x2c); _Locale_impl::_Locale_impl(this_00,*(_Locale_impl **)param_1); p_Var2 = *(_Locale_impl **)param_2; FUN_00036f1c(local_2c,*(int *)param_1 + 8); if ((local_1c - (int)local_18 != 1) || (bVar1 = false, (char)*local_18 != '*')) { FUN_00036f1c(local_44,*(int *)param_2 + 8); bVar1 = true; if ((local_34 - (int)local_30 == 1) && (bVar1 = true, (char)*local_30 == '*')) { bVar1 = false; } if ((local_30 != local_44) && (local_30 != (int *)0x0)) { if ((uint)(local_44[0] - (int)local_30) < 0x81) { __node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30); } else { operator_delete(local_30); } } } if ((local_18 == local_2c) || (local_18 == (int *)0x0)) { LAB_00036ba4: if (bVar1) goto LAB_00036ba8; LAB_00036c20: if (*(undefined1 **)(this_00 + 0x18) == *(undefined1 **)(this_00 + 0x1c)) { FUN_00037294(this_00 + 8,&DAT_00064e87,&DAT_00064e88); goto LAB_00036c5a; } **(undefined1 **)(this_00 + 0x1c) = 0x2a; puVar5 = *(undefined1 **)(this_00 + 0x18); puVar6 = (undefined1 *)(*(int *)(this_00 + 0x1c) + 1); if (puVar6 == puVar5) goto LAB_00036c5a; *puVar6 = *puVar5; puVar6 = puVar6 + (*(int *)(this_00 + 0x18) - (int)puVar5); } else { if (0x80 < (uint)(local_2c[0] - (int)local_18)) { operator_delete(local_18); goto LAB_00036ba4; } __node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); if (!bVar1) goto LAB_00036c20; LAB_00036ba8: __s = *(char **)(*(int *)param_1 + 0x1c); sVar3 = strlen(__s); iVar8 = *(int *)(this_00 + 0x18); iVar4 = *(int *)(this_00 + 0x1c); if ((uint)(iVar8 - iVar4) < sVar3) { if (iVar8 != iVar4) { __aeabi_memmove(iVar4,__s); iVar8 = *(int *)(this_00 + 0x18); iVar4 = *(int *)(this_00 + 0x1c); } FUN_00037294(this_00 + 8,__s + (iVar8 - iVar4),__s + sVar3); goto LAB_00036c5a; } if (sVar3 != 0) { __aeabi_memmove(iVar4,__s,sVar3); iVar8 = *(int *)(this_00 + 0x18); iVar4 = *(int *)(this_00 + 0x1c); } iVar4 = iVar4 + sVar3; if (iVar4 == iVar8) goto LAB_00036c5a; __aeabi_memmove(iVar4,iVar8); puVar6 = (undefined1 *)(*(int *)(this_00 + 0x18) + (iVar4 - iVar8)); } *(undefined1 **)(this_00 + 0x18) = puVar6; LAB_00036c5a: if (param_3 << 0x1b < 0) { _Locale_impl::insert(this_00,p_Var2,(id *)&collate::id); _Locale_impl::insert(this_00,p_Var2,(id *)&collate::id); } if (param_3 << 0x1a < 0) { _Locale_impl::insert(this_00,p_Var2,(id *)&ctype::id); _Locale_impl::insert(this_00,p_Var2,(id *)&codecvt::id); _Locale_impl::insert(this_00,p_Var2,(id *)&ctype::id); _Locale_impl::insert(this_00,p_Var2,(id *)&codecvt::id); } if (param_3 << 0x19 < 0) { _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d0c); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d10); _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); _Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct::id); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d14); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d18); } if (param_3 << 0x17 < 0) { _Locale_impl::insert(this_00,p_Var2,(id *)&numpunct::id); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d1c); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d20); _Locale_impl::insert(this_00,p_Var2,(id *)&numpunct::id); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d24); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d28); } if (param_3 << 0x16 < 0) { _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d2c); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d30); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d34); _Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d38); } if (param_3 << 0x15 < 0) { _Locale_impl::insert(this_00,p_Var2,(id *)&messages::id); _Locale_impl::insert(this_00,p_Var2,(id *)&messages::id); } uVar7 = _get_Locale_impl(this_00); *(undefined4 *)this = uVar7; return this; } ### FUNC name @ 00036e90 /* std::locale::name() const */ void std::locale::name(void) { undefined4 in_r0; int *in_r1; FUN_00036f1c(in_r0,*in_r1 + 8); return; } ### FUNC ~locale @ 00036e9e /* std::locale::~locale() */ locale * __thiscall std::locale::~locale(locale *this) { if (*(int *)this != 0) { FUN_0003968c(this); } return this; } ### FUNC operator= @ 00036eb8 /* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) */ locale * __thiscall std::locale::operator=(locale *this,locale *param_1) { _Locale_impl *p_Var1; undefined4 uVar2; p_Var1 = *(_Locale_impl **)param_1; if (*(_Locale_impl **)this != p_Var1) { if (*(_Locale_impl **)this != (_Locale_impl *)0x0) { FUN_0003968c(this); p_Var1 = *(_Locale_impl **)param_1; } uVar2 = _get_Locale_impl(p_Var1); *(undefined4 *)this = uVar2; } return this; } ### FUNC _M_get_facet @ 00036ee2 /* std::locale::_M_get_facet(std::locale::id const&) const */ undefined4 __thiscall std::locale::_M_get_facet(locale *this,id *param_1) { undefined4 uVar1; int iVar2; iVar2 = *(int *)(*(int *)this + 0x20); uVar1 = 0; if (*(uint *)param_1 < (uint)(*(int *)(*(int *)this + 0x24) - iVar2 >> 2)) { uVar1 = *(undefined4 *)(iVar2 + *(uint *)param_1 * 4); } return uVar1; } ### FUNC _M_use_facet @ 00036efa /* std::locale::_M_use_facet(std::locale::id const&) const */ undefined4 * __thiscall std::locale::_M_use_facet(locale *this,id *param_1) { int iVar1; undefined4 *puVar2; undefined4 *puVar3; int iVar4; int iVar5; uint uVar6; undefined8 uVar7; uint uStack_20; iVar1 = *(int *)(*(int *)this + 0x20); if ((*(uint *)param_1 < (uint)(*(int *)(*(int *)this + 0x24) - iVar1 >> 2)) && (puVar2 = *(undefined4 **)(iVar1 + *(uint *)param_1 * 4), puVar2 != (undefined4 *)0x0)) { return puVar2; } uVar7 = _Locale_impl::_M_throw_bad_cast(); iVar1 = (int)((ulonglong)uVar7 >> 0x20); puVar2 = (undefined4 *)uVar7; puVar2[4] = puVar2; puVar2[5] = puVar2; iVar5 = *(int *)(iVar1 + 0x10); iVar1 = *(int *)(iVar1 + 0x14); iVar4 = iVar5 - iVar1; uVar6 = iVar4 + 1; if (uVar6 != 0) { puVar3 = puVar2; if (0x10 < uVar6) { uStack_20 = uVar6; if (uVar6 < 0x81) { puVar3 = (undefined4 *)__node_alloc::_M_allocate(&uStack_20); uVar6 = uStack_20; } else { puVar3 = (undefined4 *)operator_new(uVar6); } puVar2[4] = puVar3; puVar2[5] = puVar3; *puVar2 = (undefined1 *)((int)puVar3 + uVar6); } if (iVar5 != iVar1) { __aeabi_memcpy(puVar3); puVar3 = (undefined4 *)((int)puVar3 + iVar4); } puVar2[4] = puVar3; *(undefined1 *)puVar3 = 0; return puVar2; } /* WARNING: Subroutine does not return */ __stl_throw_length_error("basic_string"); } ### FUNC FUN_00036f1c @ 00036f1c undefined4 * FUN_00036f1c(undefined4 *param_1,int param_2) { undefined4 *puVar1; int iVar2; int iVar3; int iVar4; uint uVar5; uint local_18; param_1[4] = param_1; param_1[5] = param_1; iVar4 = *(int *)(param_2 + 0x10); iVar2 = *(int *)(param_2 + 0x14); iVar3 = iVar4 - iVar2; uVar5 = iVar3 + 1; if (uVar5 != 0) { puVar1 = param_1; if (0x10 < uVar5) { local_18 = uVar5; if (uVar5 < 0x81) { puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); uVar5 = local_18; } else { puVar1 = (undefined4 *)operator_new(uVar5); } param_1[4] = puVar1; param_1[5] = puVar1; *param_1 = (undefined1 *)((int)puVar1 + uVar5); } if (iVar4 != iVar2) { __aeabi_memcpy(puVar1); puVar1 = (undefined4 *)((int)puVar1 + iVar3); } param_1[4] = puVar1; *(undefined1 *)puVar1 = 0; return param_1; } /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } ### FUNC operator== @ 00036fbc /* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) const */ undefined4 __thiscall std::locale::operator==(locale *this,locale *param_1) { int iVar1; undefined4 uVar2; int *piVar3; int local_5c [4]; int local_4c; int *local_48; int local_44 [4]; int local_34; int *local_30; int local_2c [4]; int local_1c; int *local_18; if (*(int *)this == *(int *)param_1) { uVar2 = 1; } else { FUN_00036f1c(local_2c,*(int *)this + 8); FUN_00036f1c(local_44,*(int *)param_1 + 8); piVar3 = local_30; uVar2 = 0; if ((local_1c - (int)local_18 == local_34 - (int)local_30) && (iVar1 = memcmp(local_18,local_30,local_1c - (int)local_18), iVar1 == 0)) { FUN_00036f1c(local_5c,*(int *)this + 8); uVar2 = 1; if ((local_4c - (int)local_48 == 1) && (uVar2 = 1, (char)*local_48 == '*')) { uVar2 = 0; } piVar3 = local_30; if ((local_48 != local_5c) && (local_48 != (int *)0x0)) { if ((uint)(local_5c[0] - (int)local_48) < 0x81) { __node_alloc::_M_deallocate(local_48,local_5c[0] - (int)local_48); piVar3 = local_30; } else { operator_delete(local_48); piVar3 = local_30; } } } if ((piVar3 != local_44) && (piVar3 != (int *)0x0)) { if ((uint)(local_44[0] - (int)piVar3) < 0x81) { __node_alloc::_M_deallocate(piVar3,local_44[0] - (int)piVar3); } else { operator_delete(piVar3); } } if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { if ((uint)(local_2c[0] - (int)local_18) < 0x81) { __node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } } return uVar2; } ### FUNC operator!= @ 000370e6 /* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) const */ uint __thiscall std::locale::operator!=(locale *this,locale *param_1) { uint uVar1; uVar1 = operator==(this,param_1); return uVar1 ^ 1; } ### FUNC global @ 000370f4 /* std::locale::global(std::locale const&) */ void __thiscall std::locale::global(locale *this,locale *param_1) { bool bVar1; undefined4 *puVar2; undefined4 uVar3; int *piVar4; int local_44 [5]; int *local_30; int local_2c [4]; int local_1c; int *local_18; puVar2 = (undefined4 *)FUN_000395ec(); uVar3 = _get_Locale_impl((_Locale_impl *)*puVar2); *(undefined4 *)this = uVar3; piVar4 = (int *)FUN_000395ec(); if (*piVar4 != *(int *)param_1) { FUN_000395ec(); FUN_0003968c(); uVar3 = _get_Locale_impl(*(_Locale_impl **)param_1); puVar2 = (undefined4 *)FUN_000395ec(); *puVar2 = uVar3; FUN_00036f1c(local_2c,*(int *)param_1 + 8); bVar1 = true; if ((local_1c - (int)local_18 == 1) && (bVar1 = true, (char)*local_18 == '*')) { bVar1 = false; } if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { if ((uint)(local_2c[0] - (int)local_18) < 0x81) { __node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } if (bVar1) { FUN_00036f1c(local_44,*(int *)param_1 + 8); setlocale(6,(char *)local_30); if ((local_30 != local_44) && (local_30 != (int *)0x0)) { if (0x80 < (uint)(local_44[0] - (int)local_30)) { operator_delete(local_30); return; } __node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30); } } } return; } ### FUNC FUN_000371e8 @ 000371e8 void FUN_000371e8(undefined4 *param_1,int param_2,char *param_3) { size_t sVar1; undefined4 *puVar2; int iVar3; int iVar4; uint uVar5; uint local_1c; undefined1 auStack_18 [4]; sVar1 = strlen(param_3); iVar4 = *(int *)(param_2 + 0x10); iVar3 = *(int *)(param_2 + 0x14); param_1[4] = param_1; param_1[5] = param_1; uVar5 = (sVar1 + iVar4 + 1) - iVar3; if (uVar5 != 0) { puVar2 = param_1; if (0x10 < uVar5) { local_1c = uVar5; if (uVar5 < 0x81) { puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_1c); uVar5 = local_1c; } else { puVar2 = (undefined4 *)operator_new(uVar5); } param_1[4] = puVar2; param_1[5] = puVar2; *param_1 = (undefined1 *)((int)puVar2 + uVar5); } *(undefined1 *)puVar2 = 0; FUN_00037294(param_1,*(undefined4 *)(param_2 + 0x14),*(undefined4 *)(param_2 + 0x10)); FUN_000373cc(param_1,param_3,param_3 + sVar1,auStack_18); return; } /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } ### FUNC FUN_00037294 @ 00037294 int * FUN_00037294(int *param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; undefined1 *puVar2; uint uVar3; uint uVar4; int *piVar5; uint uVar6; uint uVar7; int *piVar8; uint uVar9; undefined1 *puVar10; uint local_28; uint local_18; if (param_2 != param_3) { uVar9 = (int)param_3 - (int)param_2; piVar8 = (int *)param_1[5]; if (piVar8 == param_1) { puVar2 = (undefined1 *)param_1[4]; piVar5 = param_1 + 4; } else { puVar2 = (undefined1 *)param_1[4]; piVar5 = (int *)*param_1; } if (uVar9 < (uint)((int)piVar5 - (int)puVar2)) { puVar1 = param_2 + 1; if (0 < (int)param_3 - (int)puVar1) { param_3 = param_3 + (1 - (int)puVar1); do { puVar2 = puVar2 + 1; *puVar2 = *puVar1; param_3 = param_3 + -1; puVar1 = puVar1 + 1; } while (1 < (int)param_3); puVar2 = (undefined1 *)param_1[4]; } puVar2[uVar9] = 0; *(undefined1 *)param_1[4] = *param_2; param_1[4] = param_1[4] + uVar9; } else { uVar3 = (int)puVar2 - (int)piVar8; if (-uVar3 - 2 < uVar9) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar6 = uVar3; if (uVar3 <= uVar9) { uVar6 = uVar9; } uVar7 = uVar3 + uVar6 + 1; uVar4 = 0xfffffffe; if (uVar3 <= uVar7) { uVar4 = uVar7; } local_28 = 0xfffffffe; if (uVar3 + uVar6 != -2) { local_28 = uVar4; } if (local_28 == 0) { local_28 = 0; puVar1 = (undefined1 *)0x0; } else { local_18 = local_28; if (local_28 < 0x81) { puVar1 = (undefined1 *)std::__node_alloc::_M_allocate(&local_18); local_28 = local_18; } else { puVar1 = (undefined1 *)operator_new(local_28); } puVar2 = (undefined1 *)param_1[4]; piVar8 = (int *)param_1[5]; } puVar10 = puVar1; if (0 < (int)puVar2 - (int)piVar8) { puVar2 = puVar2 + (1 - (int)piVar8); do { *puVar10 = (char)*piVar8; puVar2 = puVar2 + -1; puVar10 = puVar10 + 1; piVar8 = (int *)((int)piVar8 + 1); } while (1 < (int)puVar2); } if (0 < (int)uVar9) { param_3 = param_3 + (1 - (int)param_2); do { *puVar10 = *param_2; param_3 = param_3 + -1; puVar10 = puVar10 + 1; param_2 = param_2 + 1; } while (1 < (int)param_3); } *puVar10 = 0; piVar8 = (int *)param_1[5]; if ((piVar8 != param_1) && (piVar8 != (int *)0x0)) { if ((uint)(*param_1 - (int)piVar8) < 0x81) { std::__node_alloc::_M_deallocate(piVar8,*param_1 - (int)piVar8); } else { operator_delete(piVar8); } } param_1[4] = (int)puVar10; param_1[5] = (int)puVar1; *param_1 = (int)(puVar1 + local_28); } } return param_1; } ### FUNC FUN_000373cc @ 000373cc int * FUN_000373cc(int *param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; int *piVar2; void *pvVar3; int *piVar4; undefined1 *puVar5; undefined1 *puVar6; undefined1 *puVar7; int *piVar8; void *pvVar9; undefined1 *local_18; if (param_2 != param_3) { puVar1 = param_3 + -(int)param_2; piVar4 = (int *)param_1[5]; if (piVar4 == param_1) { piVar2 = (int *)param_1[4]; puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)piVar2)); } else { piVar2 = (int *)param_1[4]; puVar6 = (undefined1 *)(*param_1 - (int)piVar2); } piVar8 = param_1 + 4; if (puVar1 < puVar6) { *(undefined1 *)piVar2 = *param_2; param_2 = param_2 + 1; if (param_2 != param_3) { __aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2); } puVar1[*piVar8] = 0; *piVar8 = (int)(puVar1 + *piVar8); } else { puVar6 = (undefined1 *)((int)piVar2 - (int)piVar4); if ((undefined1 *)(-2 - (int)puVar6) < puVar1) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } puVar7 = puVar6; if (puVar6 <= puVar1) { puVar7 = puVar1; } puVar7 = puVar6 + (int)puVar7; puVar5 = (undefined1 *)0xfffffffe; if (puVar6 <= puVar7 + 1) { puVar5 = puVar7 + 1; } puVar6 = (undefined1 *)0xfffffffe; if (puVar7 != (undefined1 *)0xfffffffe) { puVar6 = puVar5; } puVar7 = (undefined1 *)0x0; if (puVar6 == (undefined1 *)0x0) { pvVar3 = (void *)0x0; } else { local_18 = puVar6; if (puVar6 < (undefined1 *)0x81) { pvVar3 = (void *)std::__node_alloc::_M_allocate((uint *)&local_18); puVar7 = local_18; } else { pvVar3 = operator_new((uint)puVar6); puVar7 = puVar6; } piVar2 = (int *)param_1[4]; piVar4 = (int *)param_1[5]; } pvVar9 = pvVar3; if (piVar2 != piVar4) { __aeabi_memcpy(pvVar3,piVar4,(int)piVar2 - (int)piVar4); pvVar9 = (void *)((int)pvVar3 + ((int)piVar2 - (int)piVar4)); } __aeabi_memcpy(pvVar9,param_2); *(undefined1 *)((int)pvVar9 + (int)puVar1) = 0; piVar4 = (int *)param_1[5]; if ((piVar4 != param_1) && (piVar4 != (int *)0x0)) { if ((uint)(*param_1 - (int)piVar4) < 0x81) { std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4); } else { operator_delete(piVar4); } } param_1[4] = (int)((int)pvVar9 + (int)puVar1); param_1[5] = (int)pvVar3; *param_1 = (int)((int)pvVar3 + (int)puVar7); } } return param_1; } ### FUNC FUN_000374ec @ 000374ec int FUN_000374ec(int param_1) { if (param_1 != 0) { pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8)); *(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1; pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8)); } return param_1; } ### FUNC FUN_00037510 @ 00037510 void FUN_00037510(int *param_1) { int iVar1; int iVar2; iVar2 = *param_1; if (iVar2 != 0) { pthread_mutex_lock((pthread_mutex_t *)(iVar2 + 8)); iVar1 = *(int *)(iVar2 + 4) + -1; *(int *)(iVar2 + 4) = iVar1; pthread_mutex_unlock((pthread_mutex_t *)(iVar2 + 8)); if (iVar1 == 0) { if ((int *)*param_1 != (int *)0x0) { (**(code **)(*(int *)*param_1 + 4))(); } *param_1 = 0; return; } } return; } ### FUNC Init @ 00037554 /* std::_Locale_impl::Init::Init() */ Init * __thiscall std::_Locale_impl::Init::Init(Init *this) { uint uVar1; int iVar2; uVar1 = FUN_00057b68(&DAT_00070d48,0,0); if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) { DAT_00070d40 = 0; pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0); __cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000); FUN_0004e40c(&DAT_00070d48); } pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d44); iVar2 = DAT_00070d40; DAT_00070d40 = DAT_00070d40 + 1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d44); if (iVar2 == 0) { DAT_00070d10 = 9; DAT_00070d0c = 8; DAT_00070d1c = 10; DAT_00070d20 = 0xb; DAT_00070d2c = 0xc; DAT_00070d30 = 0xd; DAT_00070d14 = 0x15; DAT_00070d18 = 0x16; DAT_00070d24 = 0x17; DAT_00070d28 = 0x18; DAT_00070d34 = 0x19; DAT_00070d38 = 0x1a; make_classic_locale(); } return this; } ### FUNC _M_count @ 0003768c /* std::_Locale_impl::Init::_M_count() const */ undefined4 * std::_Locale_impl::Init::_M_count(void) { uint uVar1; int iVar2; uVar1 = FUN_00057b68(&DAT_00070d48,0,0); if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) { DAT_00070d40 = 0; pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0); __cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000); FUN_0004e40c(&DAT_00070d48); } return &DAT_00070d40; } ### FUNC _S_initialize @ 0003770c /* std::_Locale_impl::_S_initialize() */ void std::_Locale_impl::_S_initialize(void) { DAT_00070d10 = 9; DAT_00070d0c = 8; DAT_00070d1c = 10; DAT_00070d20 = 0xb; DAT_00070d2c = 0xc; DAT_00070d30 = 0xd; DAT_00070d14 = 0x15; DAT_00070d18 = 0x16; DAT_00070d24 = 0x17; DAT_00070d28 = 0x18; DAT_00070d34 = 0x19; DAT_00070d38 = 0x1a; make_classic_locale(); return; } ### FUNC ~Init @ 000377a8 /* std::_Locale_impl::Init::~Init() */ Init * __thiscall std::_Locale_impl::Init::~Init(Init *this) { uint uVar1; int iVar2; uVar1 = FUN_00057b68(&DAT_00070d48,0,0); if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) { DAT_00070d40 = 0; pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0); __cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000); FUN_0004e40c(&DAT_00070d48); } pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d44); DAT_00070d40 = DAT_00070d40 + -1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d44); return this; } ### FUNC _S_uninitialize @ 00037844 /* std::_Locale_impl::_S_uninitialize() */ void std::_Locale_impl::_S_uninitialize(void) { return; } ### FUNC FUN_00037846 @ 00037846 int FUN_00037846(int param_1) { pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 4)); return param_1; } ### FUNC _Locale_impl @ 00037858 /* std::_Locale_impl::_Locale_impl(char const*) */ _Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,char *param_1) { undefined4 in_r3; pthread_mutex_t *__mutex; undefined1 auStack_18 [4]; *(undefined4 *)this = 0; __mutex = (pthread_mutex_t *)(this + 4); pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0); FUN_00031c38(this + 8,param_1,auStack_18,in_r3,this + 8,__mutex); *(undefined4 *)(this + 0x20) = 0; *(undefined4 *)(this + 0x24) = 0; *(undefined4 *)(this + 0x28) = 0; FUN_000378f8(this + 0x20,locale::id::_S_max); Init::Init((Init *)&DAT_00070d50); return this; } ### FUNC FUN_000378f8 @ 000378f8 void FUN_000378f8(int *param_1,uint param_2) { void *pvVar1; void *pvVar2; int iVar3; int iVar4; int iVar5; uint local_1c; uint local_18; iVar5 = *param_1; if ((uint)(param_1[2] - iVar5 >> 2) < param_2) { if (param_2 >> 0x1e != 0) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("vector"); } iVar4 = param_1[1]; iVar3 = iVar4 - iVar5; if (iVar5 == 0) { param_2 = param_2 << 2; local_1c = param_2; if (param_2 < 0x81) { pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_1c); } else { pvVar1 = operator_new(param_2); local_1c = param_2; } param_2 = local_1c >> 2; } else { param_2 = param_2 << 2; local_18 = param_2; if (param_2 < 0x81) { pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18); param_2 = local_18; } else { pvVar1 = operator_new(param_2); } param_2 = param_2 >> 2; if (iVar4 != iVar5) { __aeabi_memcpy(pvVar1,iVar5,iVar3); } pvVar2 = (void *)*param_1; if (pvVar2 != (void *)0x0) { if ((uint)(param_1[2] - (int)pvVar2) < 0x81) { std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2); } else { operator_delete(pvVar2); } } } *param_1 = (int)pvVar1; param_1[1] = (int)((int)pvVar1 + (iVar3 >> 2) * 4); param_1[2] = (int)((int)pvVar1 + param_2 * 4); } return; } ### FUNC _Locale_impl @ 000379b8 /* std::_Locale_impl::_Locale_impl(std::_Locale_impl const&) */ _Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,_Locale_impl *param_1) { int *piVar1; int iVar2; int *piVar3; *(undefined4 *)this = 0; pthread_mutex_init((pthread_mutex_t *)(this + 4),(pthread_mutexattr_t *)0x0); FUN_00036f1c(this + 8,param_1 + 8); *(undefined4 *)(this + 0x20) = 0; *(undefined4 *)(this + 0x24) = 0; *(undefined4 *)(this + 0x28) = 0; piVar1 = *(int **)(param_1 + 0x24); for (piVar3 = *(int **)(param_1 + 0x20); piVar3 != piVar1; piVar3 = piVar3 + 1) { iVar2 = *piVar3; if (iVar2 != 0) { pthread_mutex_lock((pthread_mutex_t *)(iVar2 + 8)); *(int *)(iVar2 + 4) = *(int *)(iVar2 + 4) + 1; pthread_mutex_unlock((pthread_mutex_t *)(iVar2 + 8)); } } FUN_00037a88(this + 0x20,param_1 + 0x20); Init::Init((Init *)&DAT_00070d50); return this; } ### FUNC FUN_00037a88 @ 00037a88 int * FUN_00037a88(int *param_1,int *param_2) { int iVar1; int iVar2; void *pvVar3; uint uVar4; void *pvVar5; undefined4 uVar6; int iVar7; uint uVar8; int iVar9; int iVar10; uint uVar11; uint local_18; if (param_2 != param_1) { iVar9 = *param_2; iVar1 = param_2[1]; uVar11 = iVar1 - iVar9; uVar8 = (int)uVar11 >> 2; iVar2 = *param_1; if ((uint)(param_1[2] - iVar2 >> 2) < uVar8) { if (uVar8 >> 0x1e != 0) { FUN_00030824(4); uVar6 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar6,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } local_18 = uVar11; if (uVar11 < 0x81) { pvVar3 = (void *)std::__node_alloc::_M_allocate(&local_18); uVar4 = local_18; } else { pvVar3 = operator_new(uVar11); uVar4 = uVar11; } if (iVar1 != iVar9) { __aeabi_memcpy(pvVar3,iVar9,uVar11); } pvVar5 = (void *)*param_1; if (pvVar5 != (void *)0x0) { if ((uint)(param_1[2] - (int)pvVar5) < 0x81) { std::__node_alloc::_M_deallocate(pvVar5,param_1[2] - (int)pvVar5); } else { operator_delete(pvVar5); } } *param_1 = (int)pvVar3; param_1[2] = (int)pvVar3 + (uVar4 & 0xfffffffc); } else { iVar7 = param_1[1]; iVar10 = iVar7 - iVar2; if ((uint)(iVar10 >> 2) < uVar8) { if (iVar10 != 0) { __aeabi_memmove(iVar2,iVar9,iVar10); iVar9 = *param_2; iVar1 = param_2[1]; iVar2 = *param_1; iVar7 = param_1[1]; } iVar9 = iVar9 + (iVar7 - iVar2); if (iVar1 != iVar9) { __aeabi_memcpy(iVar7,iVar9,iVar1 - iVar9); } } else if (uVar11 != 0) { __aeabi_memmove(iVar2,iVar9,uVar11); } } param_1[1] = *param_1 + uVar8 * 4; } return param_1; } ### FUNC _Locale_impl @ 00037b90 /* std::_Locale_impl::_Locale_impl(unsigned int, char const*) */ _Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,uint param_1,char *param_2) { _Locale_impl *p_Var1; void *pvVar2; undefined4 uVar3; uint uVar4; void *pvVar5; uint uVar6; pthread_mutex_t *__mutex; undefined1 auStack_1c [4]; uint local_18; *(undefined4 *)this = 0; __mutex = (pthread_mutex_t *)(this + 4); pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0); p_Var1 = this + 8; FUN_00031c38(p_Var1,param_2,auStack_1c); *(undefined4 *)(this + 0x20) = 0; *(undefined4 *)(this + 0x24) = 0; *(undefined4 *)(this + 0x28) = 0; if (param_1 >> 0x1e == 0) { if (param_1 == 0) { *(undefined4 *)(this + 0x20) = 0; *(undefined4 *)(this + 0x24) = 0; *(undefined4 *)(this + 0x28) = 0; pvVar5 = (void *)0x0; } else { uVar6 = param_1 * 4; local_18 = uVar6; if (uVar6 < 0x81) { pvVar2 = (void *)__node_alloc::_M_allocate(&local_18); uVar4 = local_18; } else { pvVar2 = operator_new(uVar6); uVar4 = uVar6; } *(void **)(this + 0x20) = pvVar2; *(void **)(this + 0x24) = pvVar2; *(uint *)(this + 0x28) = (int)pvVar2 + (uVar4 & 0xfffffffc); pvVar5 = (void *)((int)pvVar2 + uVar6); if (0 < (int)uVar6) { uVar6 = param_1 ^ 0xffffffff; if ((int)(param_1 ^ 0xffffffff) < -1) { uVar6 = 0xfffffffe; } __aeabi_memclr4(pvVar2,(uVar6 + param_1) * 4 + 8,0xfffffffe,param_1,p_Var1,__mutex); } } *(void **)(this + 0x24) = pvVar5; Init::Init((Init *)&DAT_00070d50); return this; } FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC ~_Locale_impl @ 00037ca0 /* std::_Locale_impl::~_Locale_impl() */ _Locale_impl * __thiscall std::_Locale_impl::~_Locale_impl(_Locale_impl *this) { int *piVar1; _Locale_impl *p_Var2; uint uVar3; int *piVar4; int iVar5; int iVar6; Init::~Init((Init *)&DAT_00070d50); piVar1 = *(int **)(this + 0x20); piVar4 = *(int **)(this + 0x24); if (piVar1 != piVar4) { do { iVar5 = *piVar1; if (iVar5 != 0) { pthread_mutex_lock((pthread_mutex_t *)(iVar5 + 8)); iVar6 = *(int *)(iVar5 + 4) + -1; *(int *)(iVar5 + 4) = iVar6; pthread_mutex_unlock((pthread_mutex_t *)(iVar5 + 8)); if (iVar6 == 0) { if ((int *)*piVar1 != (int *)0x0) { (**(code **)(*(int *)*piVar1 + 4))(); } *piVar1 = 0; } } piVar1 = piVar1 + 1; } while (piVar4 != piVar1); piVar1 = *(int **)(this + 0x20); } if (piVar1 != (int *)0x0) { if ((uint)(*(int *)(this + 0x28) - (int)piVar1) < 0x81) { __node_alloc::_M_deallocate(piVar1,*(int *)(this + 0x28) - (int)piVar1); } else { operator_delete(piVar1); } } p_Var2 = *(_Locale_impl **)(this + 0x1c); if ((p_Var2 != this + 8) && (p_Var2 != (_Locale_impl *)0x0)) { uVar3 = *(int *)(this + 8) - (int)p_Var2; if (uVar3 < 0x81) { __node_alloc::_M_deallocate(p_Var2,uVar3); } else { operator_delete(p_Var2); } } pthread_mutex_destroy((pthread_mutex_t *)(this + 4)); return this; } ### FUNC make_classic_locale @ 00037dac /* std::_Locale_impl::make_classic_locale() */ void std::_Locale_impl::make_classic_locale(void) { undefined4 *puVar1; ctype *this; moneypunct *this_00; moneypunct *this_01; messages *this_02; moneypunct *this_03; moneypunct *this_04; messages *this_05; uint uVar2; int iVar3; undefined4 local_88; undefined4 *local_84; ctype *local_80; undefined4 *local_7c; moneypunct *local_78; moneypunct *local_74; undefined4 *local_70; messages *local_6c; undefined4 *local_68; undefined4 *local_64; undefined4 *local_60; undefined4 *local_5c; undefined4 *local_58; undefined4 *local_54; undefined4 *local_50; undefined4 *local_4c; undefined4 *local_48; moneypunct *local_44; moneypunct *local_40; undefined4 *local_3c; messages *local_38; undefined4 *local_34; undefined4 *local_30; undefined4 *local_2c; undefined4 *local_28; undefined4 *local_24; undefined4 *local_20; undefined4 local_1c; undefined1 auStack_18 [4]; _Locale_impl((_Locale_impl *)&DAT_00070d80,"C"); local_88 = 0; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__collate_00069f98; local_84 = puVar1; this = (ctype *)operator_new(0x14); ctype::ctype(this,(mask *)0x0,false,1); local_80 = this; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__codecvt_00069ee8; local_7c = puVar1; this_00 = (moneypunct *)operator_new(0x14); moneypunct::moneypunct(this_00,1); local_78 = this_00; this_01 = (moneypunct *)operator_new(0x14); moneypunct::moneypunct(this_01,1); local_74 = this_01; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__numpunct_0006a208; local_70 = puVar1; this_02 = (messages *)operator_new(0xc); messages::messages(this_02,1); local_6c = this_02; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069460; local_68 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069484; local_64 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_000694a8; local_60 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_000694f0; local_5c = puVar1; puVar1 = (undefined4 *)operator_new(0x448); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069250; priv::time_init::time_init(); *puVar1 = &PTR_FUN_00039a00_1_000692ec; local_58 = puVar1; puVar1 = (undefined4 *)operator_new(0x448); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069250; priv::time_init::time_init(); *puVar1 = &PTR_FUN_0003aac0_1_0006935c; local_54 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__collate_00069fc0; local_50 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__ctype_0006a018; local_4c = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__codecvt_00069f48; local_48 = puVar1; this_03 = (moneypunct *)operator_new(0x14); moneypunct::moneypunct(this_03,1); local_44 = this_03; this_04 = (moneypunct *)operator_new(0x14); moneypunct::moneypunct(this_04,1); local_40 = this_04; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__numpunct_0006a238; local_3c = puVar1; this_05 = (messages *)operator_new(0xc); messages::messages(this_05,1); local_38 = this_05; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_0006952c; local_34 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069550; local_30 = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069574; local_2c = puVar1; puVar1 = (undefined4 *)operator_new(0xc); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_000695bc; local_28 = puVar1; puVar1 = (undefined4 *)operator_new(0xbc8); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069250; priv::time_init::time_init(); *puVar1 = &PTR_LAB_0003ac9a_1_000693dc; local_24 = puVar1; puVar1 = (undefined4 *)operator_new(0xbc8); puVar1[1] = 1; pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0); *puVar1 = &PTR__facet_00069250; priv::time_init::time_init(); *puVar1 = &PTR_FUN_0003bc38_1_0006944c; local_1c = 0; local_20 = puVar1; FUN_000378f8(&DAT_00070da0,0x1c); FUN_0004a040(&DAT_00070da0,&local_88,auStack_18,auStack_18); uVar2 = FUN_00057b68(&DAT_00070db4,0,0); if (((uVar2 & 1) == 0) && (iVar3 = FUN_0004e3a4(&DAT_00070db4), iVar3 != 0)) { locale::locale((locale *)&DAT_00070db0,(_Locale_impl *)&DAT_00070d80); __cxa_atexit(locale::~locale,&DAT_00070db0,&DAT_0006b000); FUN_0004e40c(&DAT_00070db4); } DAT_00070d68 = &DAT_00070db0; uVar2 = FUN_00057b68(&DAT_00070dbc,0,0); if (((uVar2 & 1) == 0) && (iVar3 = FUN_0004e3a4(&DAT_00070dbc), iVar3 != 0)) { locale::locale((locale *)&DAT_00070db8,(_Locale_impl *)&DAT_00070d80); __cxa_atexit(locale::~locale,&DAT_00070db8,&DAT_0006b000); FUN_0004e40c(&DAT_00070dbc); } DAT_00070d74 = &DAT_00070db8; return; } ### FUNC _M_throw_bad_cast @ 000382c4 /* std::_Locale_impl::_M_throw_bad_cast() */ void std::_Locale_impl::_M_throw_bad_cast(void) { undefined4 uVar1; FUN_00030824(4); uVar1 = FUN_000318b0(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e38,0x318c9); } ### FUNC insert @ 000382ec /* std::_Locale_impl::insert(std::_Locale_impl*, std::locale::id const&) */ void __thiscall std::_Locale_impl::insert(_Locale_impl *this,_Locale_impl *param_1,id *param_2) { uint uVar1; uVar1 = *(uint *)param_2; if ((uVar1 != 0) && (uVar1 < (uint)(*(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(param_1 + 0x20) + uVar1 * 4),param_2); } return; } ### FUNC insert @ 0003830c /* std::_Locale_impl::insert(std::locale::facet*, std::locale::id const&) */ facet * __thiscall std::_Locale_impl::insert(_Locale_impl *this,facet *param_1,id *param_2) { int iVar1; facet *pfVar2; uint uVar3; int iVar4; _Locale_impl *p_Var5; int iVar6; uint uVar7; facet *pfVar8; undefined4 local_20; undefined1 auStack_1c [4]; undefined1 auStack_18 [4]; pfVar2 = (facet *)0x0; if ((param_1 != (facet *)0x0) && (uVar3 = *(uint *)param_2, uVar3 != 0)) { iVar4 = *(int *)(this + 0x20); iVar6 = *(int *)(this + 0x24); uVar7 = iVar6 - iVar4 >> 2; p_Var5 = this + 0x20; if (uVar7 <= uVar3) { local_20 = 0; uVar3 = uVar3 + 1; if (uVar3 < uVar7) { iVar4 = iVar4 + uVar3 * 4; if (iVar4 != iVar6) { *(int *)(this + 0x24) = iVar4; } } else { uVar3 = uVar3 - uVar7; if (uVar3 != 0) { if ((uint)(*(int *)(this + 0x28) - iVar6 >> 2) < uVar3) { FUN_000398e0(p_Var5,iVar6,&local_20,auStack_1c,uVar3,0); } else { FUN_000397e8(p_Var5,iVar6,uVar3,&local_20,auStack_18); } } } iVar4 = *(int *)p_Var5; uVar3 = *(uint *)param_2; } iVar6 = uVar3 * 4; pfVar8 = *(facet **)(iVar4 + iVar6); pfVar2 = param_1; if (pfVar8 != param_1) { if (pfVar8 != (facet *)0x0) { pthread_mutex_lock((pthread_mutex_t *)(pfVar8 + 8)); iVar1 = *(int *)(pfVar8 + 4); *(int *)(pfVar8 + 4) = iVar1 + -1; pthread_mutex_unlock((pthread_mutex_t *)(pfVar8 + 8)); if (iVar1 + -1 == 0) { if (*(int **)(iVar4 + iVar6) != (int *)0x0) { (**(code **)(**(int **)(iVar4 + iVar6) + 4))(); } *(undefined4 *)(iVar4 + iVar6) = 0; } } pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8)); *(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1; pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8)); *(facet **)(*(int *)p_Var5 + *(int *)param_2 * 4) = param_1; } } return pfVar2; } ### FUNC insert_ctype_facets @ 000383f8 /* std::_Locale_impl::insert_ctype_facets(char const*&, char*, _Locale_name_hint*) */ _Locale_name_hint * __thiscall std::_Locale_impl::insert_ctype_facets (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) { char *pcVar1; ctype *this_00; codecvt_byname *this_01; facet *pfVar2; int *piVar3; undefined4 uVar4; facet *pfVar5; int iVar6; _Locale_name_hint *local_20; int local_18; pcVar1 = *param_1; if (*pcVar1 == '\0') { pcVar1 = (char *)FUN_0004d960(param_2); *param_1 = pcVar1; } if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { piVar3 = (int *)locale::classic(); iVar6 = *piVar3; if ((ctype::id != 0) && (ctype::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + ctype::id * 4),(id *)&ctype::id); } if ((codecvt::id != 0) && (codecvt::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + codecvt::id * 4), (id *)&codecvt::id); } if ((ctype::id != 0) && (ctype::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + ctype::id * 4), (id *)&ctype::id); } if ((codecvt::id != 0) && (codecvt::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + codecvt::id * 4), (id *)&codecvt::id); } return param_3; } iVar6 = FUN_0004a144(param_1,param_2,param_3,&local_18); if (iVar6 == 0) { locale::_M_throw_on_creation_failure(local_18,*param_1,"ctype"); pfVar5 = (facet *)param_2; } else { local_20 = param_3; if (param_3 == (_Locale_name_hint *)0x0) { local_20 = (_Locale_name_hint *)FUN_0004da98(iVar6); } this_00 = (ctype *)operator_new(0x418); ctype::ctype(this_00,(mask *)0x0,false,0); *(undefined ***)this_00 = &PTR__ctype_byname_000695f8; *(int *)(this_00 + 0x414) = iVar6; ctype_byname::_M_init((ctype_byname *)this_00); this_01 = (codecvt_byname *)operator_new(0xc); pfVar5 = (facet *)0x0; codecvt_byname::codecvt_byname(this_01,*param_1,0); iVar6 = FUN_0004a144(param_1,param_2,local_20,&local_18); param_3 = local_20; if (iVar6 != 0) { pfVar2 = (facet *)operator_new(0x10); *(undefined4 *)(pfVar2 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar2 + 8),(pthread_mutexattr_t *)0x0); *(int *)(pfVar2 + 0xc) = iVar6; *(undefined ***)pfVar2 = &PTR__ctype_byname_00069628; iVar6 = FUN_0004a334(param_1,param_2,local_20,&local_18); if (iVar6 != 0) { pfVar5 = (facet *)operator_new(0x10); *(undefined4 *)(pfVar5 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar5 + 8),(pthread_mutexattr_t *)0x0); *(int *)(pfVar5 + 0xc) = iVar6; *(undefined ***)pfVar5 = &PTR__codecvt_byname_000696cc; } insert(this,(facet *)this_00,(id *)&ctype::id); insert(this,(facet *)this_01,(id *)&codecvt::id); insert(this,pfVar2,(id *)&ctype::id); if (pfVar5 == (facet *)0x0) { return local_20; } insert(this,pfVar5,(id *)&codecvt::id); return local_20; } } uVar4 = locale::_M_throw_on_creation_failure(local_18,*param_1,"ctype"); operator_delete(pfVar5); FUN_000308d8(uVar4); FUN_0004a590(param_1); (**(code **)(*(int *)param_3 + 4))(param_3); uVar4 = FUN_00030a44(); FUN_0003094c(); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar4); } ### FUNC insert_numeric_facets @ 00038730 /* std::_Locale_impl::insert_numeric_facets(char const*&, char*, _Locale_name_hint*) */ _Locale_name_hint * __thiscall std::_Locale_impl::insert_numeric_facets (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) { char *pcVar1; int *piVar2; facet *pfVar3; facet *pfVar4; undefined4 uVar5; int iVar6; char *local_20; int local_18; if (**param_1 == '\0') { pcVar1 = (char *)FUN_0004d968(param_2); *param_1 = pcVar1; } piVar2 = (int *)locale::classic(); iVar6 = *piVar2; if ((DAT_00070d20 != 0) && (DAT_00070d20 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d20 * 4),(id *)&DAT_00070d20); } if ((DAT_00070d1c != 0) && (DAT_00070d1c < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d1c * 4),(id *)&DAT_00070d1c); } if ((DAT_00070d24 != 0) && (DAT_00070d24 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d24 * 4),(id *)&DAT_00070d24); } if ((DAT_00070d28 != 0) && (DAT_00070d28 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d28 * 4),(id *)&DAT_00070d28); } pcVar1 = *param_1; if (((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) && ((*pcVar1 != 'C' || (pcVar1[1] != '\0')))) { pfVar3 = (facet *)FUN_0004a37c(param_1,param_2,param_3,&local_18); pfVar4 = pfVar3; local_20 = param_2; if (pfVar3 != (facet *)0x0) { if (param_3 == (_Locale_name_hint *)0x0) { param_3 = (_Locale_name_hint *)FUN_0004da9c(pfVar3); } pfVar4 = (facet *)operator_new(0x10); *(undefined4 *)(pfVar4 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar4 + 8),(pthread_mutexattr_t *)0x0); *(facet **)(pfVar4 + 0xc) = pfVar3; *(undefined ***)pfVar4 = &PTR__numpunct_byname_000696f8; iVar6 = FUN_0004a37c(param_1,param_2,param_3,&local_18); if (iVar6 != 0) { pfVar3 = (facet *)operator_new(0x10); *(undefined4 *)(pfVar3 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0); *(int *)(pfVar3 + 0xc) = iVar6; *(undefined ***)pfVar3 = &PTR__numpunct_byname_0006971c; insert(this,pfVar4,(id *)&numpunct::id); insert(this,pfVar3,(id *)&numpunct::id); return param_3; } (**(code **)(*(int *)pfVar4 + 4))(pfVar4); local_20 = (char *)0x0; } uVar5 = locale::_M_throw_on_creation_failure(local_18,*param_1,"numpunct"); operator_delete(param_1); FUN_000308d8(uVar5); FUN_0004a614(local_20); (**(code **)(*(int *)pfVar4 + 4))(pfVar4); uVar5 = FUN_00030a44(); FUN_0003094c(); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar5); } if ((numpunct::id != 0) && (numpunct::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + numpunct::id * 4), (id *)&numpunct::id); } if ((numpunct::id != 0) && (numpunct::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + numpunct::id * 4), (id *)&numpunct::id); } return param_3; } ### FUNC insert_time_facets @ 000389a8 /* std::_Locale_impl::insert_time_facets(char const*&, char*, _Locale_name_hint*) */ _Locale_name_hint * __thiscall std::_Locale_impl::insert_time_facets (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) { char *pcVar1; _Locale_time *p_Var2; facet *pfVar3; facet *pfVar4; facet *pfVar5; facet *pfVar6; int *piVar7; undefined4 uVar8; int iVar9; int local_18; pcVar1 = *param_1; if (*pcVar1 == '\0') { pcVar1 = (char *)FUN_0004d970(param_2); *param_1 = pcVar1; } if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { piVar7 = (int *)locale::classic(); iVar9 = *piVar7; if ((DAT_00070d2c != 0) && (DAT_00070d2c < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d2c * 4),(id *)&DAT_00070d2c); } if ((DAT_00070d30 != 0) && (DAT_00070d30 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d30 * 4),(id *)&DAT_00070d30); } if ((DAT_00070d34 != 0) && (DAT_00070d34 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d34 * 4),(id *)&DAT_00070d34); } if ((DAT_00070d38 != 0) && (DAT_00070d38 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d38 * 4),(id *)&DAT_00070d38); } } else { p_Var2 = (_Locale_time *)FUN_0004a3cc(param_1,param_2,param_3,&local_18); if (p_Var2 == (_Locale_time *)0x0) { if (local_18 == 4) { FUN_00030824(4); uVar8 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar8,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } } else { if (param_3 == (_Locale_name_hint *)0x0) { param_3 = (_Locale_name_hint *)FUN_0004daa0(p_Var2); } pfVar3 = (facet *)operator_new(0x448); *(undefined4 *)(pfVar3 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)pfVar3 = &PTR__facet_00069250; priv::time_init::time_init((time_init *)(pfVar3 + 0xc),p_Var2); *(undefined ***)pfVar3 = &PTR_FUN_00039a00_1_00069280; pfVar4 = (facet *)operator_new(0x448); *(undefined4 *)(pfVar4 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar4 + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)pfVar4 = &PTR__facet_00069250; priv::time_init::time_init((time_init *)(pfVar4 + 0xc),p_Var2); *(undefined ***)pfVar4 = &PTR_FUN_0003aac0_1_00069314; pfVar5 = (facet *)operator_new(0xbc8); *(undefined4 *)(pfVar5 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar5 + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)pfVar5 = &PTR__facet_00069250; priv::time_init::time_init((time_init *)(pfVar5 + 0xc),p_Var2); *(undefined ***)pfVar5 = &PTR_LAB_0003ac9a_1_00069370; pfVar6 = (facet *)operator_new(0xbc8); *(undefined4 *)(pfVar6 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar6 + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)pfVar6 = &PTR__facet_00069250; priv::time_init::time_init((time_init *)(pfVar6 + 0xc),p_Var2); *(undefined ***)pfVar6 = &PTR_FUN_0003bc38_1_00069404; FUN_0004a698(p_Var2); insert(this,pfVar3,(id *)&DAT_00070d2c); insert(this,pfVar4,(id *)&DAT_00070d30); insert(this,pfVar5,(id *)&DAT_00070d34); insert(this,pfVar6,(id *)&DAT_00070d38); } } return param_3; } ### FUNC insert_collate_facets @ 00038d24 /* std::_Locale_impl::insert_collate_facets(char const*&, char*, _Locale_name_hint*) */ _Locale_name_hint * __thiscall std::_Locale_impl::insert_collate_facets (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) { char *pcVar1; facet *pfVar2; facet *pfVar3; int *piVar4; undefined4 uVar5; id *piVar6; int iVar7; int local_18; pcVar1 = *param_1; if (*pcVar1 == '\0') { pcVar1 = (char *)FUN_0004d978(param_2); *param_1 = pcVar1; } if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { piVar4 = (int *)locale::classic(); iVar7 = *piVar4; if ((collate::id != 0) && (collate::id < (uint)(*(int *)(iVar7 + 0x24) - *(int *)(iVar7 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar7 + 0x20) + collate::id * 4), (id *)&collate::id); } if ((collate::id != 0) && (collate::id < (uint)(*(int *)(iVar7 + 0x24) - *(int *)(iVar7 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar7 + 0x20) + collate::id * 4), (id *)&collate::id); } } else { iVar7 = FUN_0004a41c(param_1,param_2,param_3,&local_18); if (iVar7 == 0) { if (local_18 == 4) { FUN_00030824(4); uVar5 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } } else { if (param_3 == (_Locale_name_hint *)0x0) { param_3 = (_Locale_name_hint *)FUN_0004daa4(iVar7); } pfVar2 = (facet *)operator_new(0x10); *(undefined4 *)(pfVar2 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar2 + 8),(pthread_mutexattr_t *)0x0); *(int *)(pfVar2 + 0xc) = iVar7; *(undefined ***)pfVar2 = &PTR__collate_byname_00069668; iVar7 = FUN_0004a41c(param_1,param_2,param_3,&local_18); if ((iVar7 == 0) && (local_18 == 4)) { (**(code **)(*(int *)pfVar2 + 4))(); FUN_00030824(4); uVar5 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } if (iVar7 == 0) { piVar6 = (id *)&collate::id; } else { pfVar3 = (facet *)operator_new(0x10); *(undefined4 *)(pfVar3 + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0); *(int *)(pfVar3 + 0xc) = iVar7; *(undefined ***)pfVar3 = &PTR__collate_byname_00069684; insert(this,pfVar2,(id *)&collate::id); piVar6 = (id *)&collate::id; pfVar2 = pfVar3; } insert(this,pfVar2,piVar6); } } return param_3; } ### FUNC insert_monetary_facets @ 00038f3c /* std::_Locale_impl::insert_monetary_facets(char const*&, char*, _Locale_name_hint*) */ _Locale_name_hint * __thiscall std::_Locale_impl::insert_monetary_facets (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) { char *pcVar1; int *piVar2; _Locale_monetary *p_Var3; moneypunct_byname *this_00; moneypunct_byname *this_01; undefined4 uVar4; moneypunct_byname *this_02; int iVar5; facet *local_20; _Locale_name_hint *local_1c; int local_18; if (**param_1 == '\0') { pcVar1 = (char *)FUN_0004d980(param_2); *param_1 = pcVar1; } piVar2 = (int *)locale::classic(); iVar5 = *piVar2; if ((DAT_00070d0c != 0) && (DAT_00070d0c < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d0c * 4),(id *)&DAT_00070d0c); } if ((DAT_00070d10 != 0) && (DAT_00070d10 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d10 * 4),(id *)&DAT_00070d10); } if ((DAT_00070d14 != 0) && (DAT_00070d14 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d14 * 4),(id *)&DAT_00070d14); } if ((DAT_00070d18 != 0) && (DAT_00070d18 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d18 * 4),(id *)&DAT_00070d18); } pcVar1 = *param_1; if (((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) && ((*pcVar1 != 'C' || (pcVar1[1] != '\0')))) { p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,param_3,&local_18); if (p_Var3 == (_Locale_monetary *)0x0) { if (local_18 == 4) { FUN_00030824(4); uVar4 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } } else { local_1c = param_3; if (param_3 == (_Locale_name_hint *)0x0) { local_1c = (_Locale_name_hint *)FUN_0004daa8(p_Var3); } this_00 = (moneypunct_byname *)operator_new(0x18); moneypunct_byname::moneypunct_byname(this_00,p_Var3); p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18); param_3 = local_1c; if (p_Var3 == (_Locale_monetary *)0x0) { (**(code **)(*(int *)this_00 + 4))(this_00); if (local_18 == 4) { FUN_00030824(4); uVar4 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } } else { this_01 = (moneypunct_byname *)operator_new(0x18); moneypunct_byname::moneypunct_byname(this_01,p_Var3); p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18); if ((p_Var3 == (_Locale_monetary *)0x0) && (local_18 == 4)) { FUN_00030824(4); uVar4 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } if (p_Var3 == (_Locale_monetary *)0x0) { local_20 = (facet *)0x0; this_02 = (moneypunct_byname *)0x0; } else { this_02 = (moneypunct_byname *)operator_new(0x18); moneypunct_byname::moneypunct_byname(this_02,p_Var3); p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18); if (p_Var3 == (_Locale_monetary *)0x0) { (**(code **)(*(int *)this_02 + 4))(); this_02 = (moneypunct_byname *)0x0; local_20 = (facet *)0x0; if (local_18 == 4) { FUN_00030824(4); uVar4 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } } else { local_20 = (facet *)operator_new(0x18); moneypunct_byname::moneypunct_byname ((moneypunct_byname *)local_20,p_Var3); } } insert(this,(facet *)this_00,(id *)&moneypunct::id); insert(this,(facet *)this_01,(id *)&moneypunct::id); if (this_02 != (moneypunct_byname *)0x0) { insert(this,(facet *)this_02,(id *)&moneypunct::id); } if (local_20 != (facet *)0x0) { insert(this,local_20,(id *)&moneypunct::id); } } } return param_3; } if ((moneypunct::id != 0) && (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), (id *)&moneypunct::id); } if ((moneypunct::id != 0) && (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), (id *)&moneypunct::id); } if ((moneypunct::id != 0) && (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), (id *)&moneypunct::id); } if ((moneypunct::id != 0) && (moneypunct::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct::id * 4), (id *)&moneypunct::id); } return param_3; } ### FUNC insert_messages_facets @ 0003938c /* std::_Locale_impl::insert_messages_facets(char const*&, char*, _Locale_name_hint*) */ _Locale_name_hint * __thiscall std::_Locale_impl::insert_messages_facets (_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3) { char *pcVar1; _Locale_messages *p_Var2; messages_byname *this_00; messages_byname *this_01; int *piVar3; undefined4 uVar4; id *piVar5; int iVar6; int local_18; pcVar1 = *param_1; if (*pcVar1 == '\0') { pcVar1 = (char *)FUN_0004d988(param_2); *param_1 = pcVar1; } if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) { piVar3 = (int *)locale::classic(); iVar6 = *piVar3; if ((messages::id != 0) && (messages::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) { insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + messages::id * 4), (id *)&messages::id); } if (messages::id == 0) { return param_3; } if ((uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2) <= messages::id) { return param_3; } this_00 = *(messages_byname **)(*(int *)(iVar6 + 0x20) + messages::id * 4); piVar5 = (id *)&messages::id; } else { p_Var2 = (_Locale_messages *)FUN_0004a4bc(param_1,param_2,param_3,&local_18); if (p_Var2 == (_Locale_messages *)0x0) { if (local_18 != 4) { return param_3; } FUN_00030824(4); uVar4 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } this_00 = (messages_byname *)operator_new(0x10); messages_byname::messages_byname((messages_byname *)this_00,p_Var2); p_Var2 = (_Locale_messages *)FUN_0004a4bc(param_1,param_2,param_3,&local_18); if ((p_Var2 == (_Locale_messages *)0x0) && (local_18 == 4)) { FUN_00030824(4); uVar4 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } if (p_Var2 == (_Locale_messages *)0x0) { piVar5 = (id *)&messages::id; } else { this_01 = (messages_byname *)operator_new(0x10); messages_byname::messages_byname(this_01,p_Var2); insert(this,(facet *)this_00,(id *)&messages::id); piVar5 = (id *)&messages::id; this_00 = this_01; } } insert(this,(facet *)this_00,piVar5); return param_3; } ### FUNC FUN_0003956c @ 0003956c undefined4 FUN_0003956c(void) { uint uVar1; int iVar2; uVar1 = FUN_00057b68(&DAT_00070d64,0,0); if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d64), iVar2 != 0)) { std::_Locale_impl::Init::Init((Init *)&DAT_00070d60); __cxa_atexit(std::_Locale_impl::Init::~Init,&DAT_00070d60,&DAT_0006b000); FUN_0004e40c(&DAT_00070d64); } return DAT_00070d68; } ### FUNC FUN_000395ec @ 000395ec undefined4 FUN_000395ec(void) { uint uVar1; int iVar2; uVar1 = FUN_00057b68(&DAT_00070d70,0,0); if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d70), iVar2 != 0)) { std::_Locale_impl::Init::Init((Init *)&DAT_00070d6c); __cxa_atexit(std::_Locale_impl::Init::~Init,&DAT_00070d6c,&DAT_0006b000); FUN_0004e40c(&DAT_00070d70); } return DAT_00070d74; } ### FUNC _get_Locale_impl @ 0003966c /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::_get_Locale_impl(std::_Locale_impl*) */ _Locale_impl * std::_get_Locale_impl(_Locale_impl *param_1) { pthread_mutex_lock((pthread_mutex_t *)(param_1 + 4)); *(int *)param_1 = *(int *)param_1 + 1; pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 4)); return param_1; } ### FUNC FUN_0003968c @ 0003968c void FUN_0003968c(undefined4 *param_1) { int iVar1; _Locale_impl *this; int *piVar2; piVar2 = (int *)*param_1; pthread_mutex_lock((pthread_mutex_t *)(piVar2 + 1)); iVar1 = *piVar2; *piVar2 = iVar1 + -1; pthread_mutex_unlock((pthread_mutex_t *)(piVar2 + 1)); if (iVar1 + -1 != 0) { return; } this = (_Locale_impl *)*param_1; if ((_Locale_impl *)*DAT_00070d68 == this) { std::_Locale_impl::~_Locale_impl(this); } else if (this != (_Locale_impl *)0x0) { std::_Locale_impl::~_Locale_impl(this); operator_delete(this); } *param_1 = 0; return; } ### FUNC _copy_Nameless_Locale_impl @ 000396f8 /* WARNING: Unknown calling convention -- yet parameter storage is locked */ /* std::_copy_Nameless_Locale_impl(std::_Locale_impl*) */ _Locale_impl * std::_copy_Nameless_Locale_impl(_Locale_impl *param_1) { _Locale_impl *this; undefined1 *puVar1; undefined1 *puVar2; this = (_Locale_impl *)operator_new(0x2c); _Locale_impl::_Locale_impl(this,param_1); if (*(undefined1 **)(this + 0x18) == *(undefined1 **)(this + 0x1c)) { FUN_00037294(this + 8,&DAT_00064ee3,&DAT_00064ee4); } else { **(undefined1 **)(this + 0x1c) = 0x2a; puVar1 = *(undefined1 **)(this + 0x18); puVar2 = (undefined1 *)(*(int *)(this + 0x1c) + 1); if (puVar2 != puVar1) { *puVar2 = *puVar1; *(undefined1 **)(this + 0x18) = puVar2 + (*(int *)(this + 0x18) - (int)puVar1); return this; } } return this; } ### FUNC _GetFacetId @ 00039758 /* std::priv::_GetFacetId(std::money_get > > const*) */ undefined4 * std::priv::_GetFacetId(money_get *param_1) { return &DAT_00070d0c; } ### FUNC _GetFacetId @ 00039764 /* std::priv::_GetFacetId(std::money_put > > const*) */ undefined4 * std::priv::_GetFacetId(money_put *param_1) { return &DAT_00070d10; } ### FUNC _GetFacetId @ 00039770 /* std::priv::_GetFacetId(std::money_get > > const*) */ undefined4 * std::priv::_GetFacetId(money_get *param_1) { return &DAT_00070d14; } ### FUNC _GetFacetId @ 0003977c /* std::priv::_GetFacetId(std::money_put > > const*) */ undefined4 * std::priv::_GetFacetId(money_put *param_1) { return &DAT_00070d18; } ### FUNC _GetFacetId @ 00039788 /* std::priv::_GetFacetId(std::num_get > > const*) */ undefined4 * std::priv::_GetFacetId(num_get *param_1) { return &DAT_00070d1c; } ### FUNC _GetFacetId @ 00039794 /* std::priv::_GetFacetId(std::num_get > > const*) */ undefined4 * std::priv::_GetFacetId(num_get *param_1) { return &DAT_00070d24; } ### FUNC _GetFacetId @ 000397a0 /* std::priv::_GetFacetId(std::num_put > > const*) */ undefined4 * std::priv::_GetFacetId(num_put *param_1) { return &DAT_00070d20; } ### FUNC _GetFacetId @ 000397ac /* std::priv::_GetFacetId(std::num_put > > const*) */ undefined4 * std::priv::_GetFacetId(num_put *param_1) { return &DAT_00070d28; } ### FUNC _GetFacetId @ 000397b8 /* std::priv::_GetFacetId(std::time_get > > const*) */ undefined4 * std::priv::_GetFacetId(time_get *param_1) { return &DAT_00070d2c; } ### FUNC _GetFacetId @ 000397c4 /* std::priv::_GetFacetId(std::time_put > > const*) */ undefined4 * std::priv::_GetFacetId(time_put *param_1) { return &DAT_00070d30; } ### FUNC _GetFacetId @ 000397d0 /* std::priv::_GetFacetId(std::time_get > > const*) */ undefined4 * std::priv::_GetFacetId(time_get *param_1) { return &DAT_00070d34; } ### FUNC _GetFacetId @ 000397dc /* std::priv::_GetFacetId(std::time_put > > const*) */ undefined4 * std::priv::_GetFacetId(time_put *param_1) { return &DAT_00070d38; } ### FUNC FUN_000397e8 @ 000397e8 void FUN_000397e8(uint *param_1,undefined4 *param_2,uint param_3,undefined4 *param_4) { uint uVar1; uint uVar2; undefined4 *puVar3; undefined4 *puVar4; int iVar5; undefined4 *puVar6; undefined1 auStack_1c [4]; undefined4 local_18; puVar4 = (undefined4 *)param_1[1]; if (((undefined4 *)*param_1 <= param_4) && (param_4 < puVar4)) { local_18 = *param_4; FUN_000397e8(param_1,param_2,param_3,&local_18,auStack_1c); return; } uVar1 = (int)puVar4 - (int)param_2; uVar2 = (int)uVar1 >> 2; if (param_3 < uVar2) { puVar3 = puVar4; if (param_3 != 0) { __aeabi_memcpy(puVar4,puVar4 + -param_3,param_3 * 4); puVar3 = (undefined4 *)param_1[1]; } param_1[1] = (uint)(puVar3 + param_3); iVar5 = (int)(puVar4 + -param_3) - (int)param_2; if (0 < iVar5) { __aeabi_memmove((int)puVar4 - iVar5,param_2); } if (0 < (int)(param_3 * 4)) { iVar5 = param_3 + 1; do { *param_2 = *param_4; param_2 = param_2 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); } } else { puVar3 = puVar4 + (param_3 - uVar2); if (0 < (int)((param_3 - uVar2) * 4)) { iVar5 = (param_3 + 1) - uVar2; puVar6 = puVar4; do { *puVar6 = *param_4; puVar6 = puVar6 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); } param_1[1] = (uint)puVar3; if (puVar4 != param_2) { __aeabi_memcpy(puVar3,param_2,uVar1); puVar3 = (undefined4 *)param_1[1]; } param_1[1] = (uint)(puVar3 + uVar2); if (0 < (int)uVar1) { iVar5 = (uVar1 >> 2) + 1; do { *param_2 = *param_4; param_2 = param_2 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); } } return; } ### FUNC FUN_000398e0 @ 000398e0 void FUN_000398e0(int *param_1,int param_2,undefined4 *param_3,undefined4 param_4,uint param_5, int param_6) { undefined4 *puVar1; void *pvVar2; undefined4 uVar3; int iVar4; undefined4 *puVar5; uint uVar6; uint uVar7; uint uVar8; int iVar9; undefined4 *puVar10; uint local_2c; uint local_18; iVar4 = *param_1; uVar6 = param_1[1] - iVar4 >> 2; if (0x3fffffff - uVar6 < param_5) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("vector"); } uVar7 = uVar6; if (uVar6 <= param_5) { uVar7 = param_5; } uVar6 = uVar7 + uVar6; uVar8 = uVar6; if (uVar6 < uVar7) { uVar8 = 0x3fffffff; } local_2c = 0x3fffffff; if (uVar6 < 0x40000000) { local_2c = uVar8; } if (0x3fffffff < local_2c) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } if (local_2c == 0) { puVar1 = (undefined4 *)0x0; local_2c = 0; } else { local_2c = local_2c << 2; local_18 = local_2c; if (local_2c < 0x81) { puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); local_2c = local_18; } else { puVar1 = (undefined4 *)operator_new(local_2c); } iVar4 = *param_1; local_2c = local_2c >> 2; } iVar9 = param_2 - iVar4; puVar10 = puVar1; if (iVar9 != 0) { __aeabi_memmove(puVar1,iVar4,iVar9); puVar10 = (undefined4 *)((int)puVar1 + iVar9); } puVar5 = puVar10; uVar6 = param_5; if (param_5 != 0) { do { *puVar5 = *param_3; uVar6 = uVar6 - 1; puVar5 = puVar5 + 1; } while (uVar6 != 0); puVar10 = puVar10 + param_5; } if ((param_6 == 0) && (iVar4 = param_1[1] - param_2, iVar4 != 0)) { __aeabi_memmove(puVar10,param_2,iVar4); puVar10 = (undefined4 *)((int)puVar10 + iVar4); } pvVar2 = (void *)*param_1; if (pvVar2 != (void *)0x0) { if ((uint)(param_1[2] - (int)pvVar2) < 0x81) { std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2); } else { operator_delete(pvVar2); } } *param_1 = (int)puVar1; param_1[1] = (int)puVar10; param_1[2] = (int)(puVar1 + local_2c); return; } ### FUNC FUN_00039a00 @ 00039a00 void FUN_00039a00(facet *param_1) { FUN_00039fc0(param_1 + 0xc); std::locale::facet::~facet(param_1); return; } ### FUNC FUN_00039a68 @ 00039a68 void FUN_00039a68(undefined4 *param_1,int param_2,int *param_3,uint param_4,int *param_5, uint param_6,undefined4 param_7,uint *param_8,undefined4 param_9) { int iVar1; int iVar2; uint uVar3; iVar1 = *(int *)(param_2 + 0x1c); uVar3 = 0; iVar2 = FUN_0003a344(param_3,param_4,param_5,param_6,*(undefined4 *)(param_2 + 0x20),iVar1,0, param_2 + 0xc,param_7,param_8,param_9); if (iVar2 != iVar1) { uVar3 = 4; } *param_8 = uVar3; if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) { if ((byte *)param_3[2] < (byte *)param_3[3]) { uVar3 = (uint)*(byte *)param_3[2]; } else { uVar3 = (**(code **)(*param_3 + 0x20))(param_3); } param_4 = param_4 & 0xff000000 | uVar3 & 0xff | (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; } if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) { if ((byte *)param_5[2] < (byte *)param_5[3]) { uVar3 = (uint)*(byte *)param_5[2]; } else { uVar3 = (**(code **)(*param_5 + 0x20))(); } param_6 = (uint)(uVar3 == 0xffffffff) << 8; } if ((param_4 >> 8 & 0xff) == (param_6 >> 8 & 0xff)) { *param_8 = *param_8 | 2; } *param_1 = param_3; param_1[1] = param_4; return; } ### FUNC FUN_00039b82 @ 00039b82 undefined4 * FUN_00039b82(undefined4 *param_1,int param_2,int *param_3,uint param_4,int *param_5,uint param_6, undefined4 param_7,uint *param_8,undefined4 param_9) { int iVar1; int iVar2; uint uVar3; iVar1 = *(int *)(param_2 + 0x34); uVar3 = 0; iVar2 = FUN_0003a344(param_3,param_4,param_5,param_6,*(undefined4 *)(param_2 + 0x38),iVar1,0, param_2 + 0xc,param_7,param_8,param_9); if (iVar2 != iVar1) { *param_8 = 4; if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) { if ((byte *)param_3[2] < (byte *)param_3[3]) { uVar3 = (uint)*(byte *)param_3[2]; } else { uVar3 = (**(code **)(*param_3 + 0x20))(param_3); } param_4 = param_4 & 0xff000000 | uVar3 & 0xff | (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; } if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) { if ((byte *)param_5[2] < (byte *)param_5[3]) { uVar3 = (uint)*(byte *)param_5[2]; } else { uVar3 = (**(code **)(*param_5 + 0x20))(); } param_6 = (uint)(uVar3 == 0xffffffff) << 8; } if ((param_4 >> 8 & 0xff) != (param_6 >> 8 & 0xff)) goto LAB_00039ca2; uVar3 = *param_8 | 2; } *param_8 = uVar3; LAB_00039ca2: *param_1 = param_3; param_1[1] = param_4; return param_1 + 2; } ### FUNC FUN_00039caa @ 00039caa void FUN_00039caa(undefined4 *param_1,int param_2,int *param_3,undefined4 param_4,int *param_5, int param_6,undefined4 param_7,uint *param_8,int param_9) { int iVar1; uint uVar2; undefined4 extraout_r1; int *local_28; undefined4 local_24; int *local_20; undefined4 local_1c; local_24 = param_6; local_28 = param_5; local_20 = param_3; local_1c = param_4; iVar1 = FUN_0003a678(&local_20,&local_28,param_2 + 0x84,param_2 + 0x1d4); if (iVar1 == 0xe) { *param_8 = 4; if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar2 = (uint)*(byte *)local_20[2]; } else { uVar2 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar2 == 0xffffffff,(char)uVar2); } if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) { if ((byte *)local_28[2] < (byte *)local_28[3]) { uVar2 = (uint)*(byte *)local_28[2]; } else { uVar2 = (**(code **)(*local_28 + 0x20))(); } local_24 = (uint)(uVar2 == 0xffffffff) << 8; } if (local_1c._1_1_ != local_24._1_1_) goto LAB_00039d62; uVar2 = *param_8 | 2; } else { __aeabi_uidivmod(iVar1,7); *(undefined4 *)(param_9 + 0x18) = extraout_r1; uVar2 = 0; } *param_8 = uVar2; LAB_00039d62: *param_1 = local_20; param_1[1] = local_1c; return; } ### FUNC FUN_00039d6c @ 00039d6c void FUN_00039d6c(undefined4 *param_1,int param_2,int *param_3,undefined4 param_4,int *param_5, int param_6,undefined4 param_7,uint *param_8,int param_9) { int iVar1; uint uVar2; undefined4 extraout_r1; int *local_28; undefined4 local_24; int *local_20; undefined4 local_1c; local_24 = param_6; local_28 = param_5; local_20 = param_3; local_1c = param_4; iVar1 = FUN_0003a678(&local_20,&local_28,param_2 + 0x1d4,param_2 + 0x414); if (iVar1 == 0x18) { *param_8 = 4; if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar2 = (uint)*(byte *)local_20[2]; } else { uVar2 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar2 == 0xffffffff,(char)uVar2); } if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) { if ((byte *)local_28[2] < (byte *)local_28[3]) { uVar2 = (uint)*(byte *)local_28[2]; } else { uVar2 = (**(code **)(*local_28 + 0x20))(); } local_24 = (uint)(uVar2 == 0xffffffff) << 8; } if (local_1c._1_1_ != local_24._1_1_) goto LAB_00039e22; uVar2 = *param_8 | 2; } else { __aeabi_uidivmod(iVar1,0xc); *(undefined4 *)(param_9 + 0x10) = extraout_r1; uVar2 = 0; } *param_8 = uVar2; LAB_00039e22: *param_1 = local_20; param_1[1] = local_1c; return; } ### FUNC FUN_00039e30 @ 00039e30 void FUN_00039e30(undefined4 *param_1,undefined4 param_2,int *param_3,uint param_4,int *param_5, uint param_6,undefined4 param_7,uint *param_8,int param_9) { uint uVar1; int iVar2; uint uVar3; uint uVar4; int *local_28; undefined4 local_24; int *local_20; undefined4 local_1c; local_24 = param_6; local_28 = param_5; uVar4 = param_6 >> 8; uVar3 = param_4 >> 8; local_20 = param_3; local_1c = param_4; if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) { if ((byte *)param_3[2] < (byte *)param_3[3]) { uVar1 = (uint)*(byte *)param_3[2]; } else { uVar1 = (**(code **)(*param_3 + 0x20))(param_3); } local_1c = CONCAT13(local_1c._3_1_,0x10000); uVar3 = (uint)(uVar1 == 0xffffffff); local_1c._0_2_ = CONCAT11(uVar1 == 0xffffffff,(char)uVar1); } if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) { if ((byte *)param_5[2] < (byte *)param_5[3]) { uVar1 = (uint)*(byte *)param_5[2]; } else { uVar1 = (**(code **)(*param_5 + 0x20))(); } local_24 = CONCAT13(local_24._3_1_,0x10000); uVar4 = (uint)(uVar1 == 0xffffffff); local_24._0_2_ = CONCAT11(uVar1 == 0xffffffff,(char)uVar1); } if ((uVar3 & 0xff) == (uVar4 & 0xff)) { *param_8 = 6; } else { uVar3 = 0; iVar2 = FUN_0003a840(&local_20,&local_28,param_9 + 0x14,0); *(int *)(param_9 + 0x14) = *(int *)(param_9 + 0x14) + -0x76c; if (iVar2 == 0) { uVar3 = 4; } *param_8 = uVar3; if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar3 = (uint)*(byte *)local_20[2]; } else { uVar3 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar3 == 0xffffffff,(char)uVar3); } if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) { if ((byte *)local_28[2] < (byte *)local_28[3]) { uVar3 = (uint)*(byte *)local_28[2]; } else { uVar3 = (**(code **)(*local_28 + 0x20))(); } local_24 = (uint)(uVar3 == 0xffffffff) << 8; } if (local_1c._1_1_ == local_24._1_1_) { *param_8 = *param_8 | 2; } } *param_1 = local_20; param_1[1] = local_1c; return; } ### FUNC FUN_00039f7c @ 00039f7c void FUN_00039f7c(facet *param_1) { FUN_00039fc0(param_1 + 0xc); std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_00039fc0 @ 00039fc0 void FUN_00039fc0(int param_1) { int *piVar1; void *pvVar2; uint uVar3; int iVar4; int iVar5; piVar1 = *(int **)(param_1 + 0x434); if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0x420))) { uVar3 = *(int *)(param_1 + 0x420) - (int)piVar1; if (uVar3 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar3); } else { operator_delete(piVar1); } } piVar1 = *(int **)(param_1 + 0x41c); if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0x408))) { uVar3 = *(int *)(param_1 + 0x408) - (int)piVar1; if (uVar3 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar3); } else { operator_delete(piVar1); } } iVar5 = 0; do { pvVar2 = *(void **)(param_1 + 0x404 + iVar5); if ((pvVar2 != (void *)0x0) && ((void *)(param_1 + 0x3f0 + iVar5) != pvVar2)) { uVar3 = *(int *)(param_1 + 0x3f0 + iVar5) - (int)pvVar2; if (uVar3 < 0x81) { std::__node_alloc::_M_deallocate(pvVar2,uVar3); } else { operator_delete(pvVar2); } } iVar5 = iVar5 + -0x18; } while (iVar5 != -0x240); iVar5 = 0; do { iVar4 = param_1 + 0x138 + iVar5; pvVar2 = *(void **)(iVar4 + 0x8c); if ((pvVar2 != (void *)0x0) && ((void *)(iVar4 + 0x78) != pvVar2)) { uVar3 = *(int *)(iVar4 + 0x78) - (int)pvVar2; if (uVar3 < 0x81) { std::__node_alloc::_M_deallocate(pvVar2,uVar3); } else { operator_delete(pvVar2); } } iVar5 = iVar5 + -0x18; } while (iVar5 != -0x150); FUN_0003a204(param_1); return; } ### FUNC FUN_0003a204 @ 0003a204 int * FUN_0003a204(int *param_1) { int *piVar1; uint uVar2; piVar1 = (int *)param_1[0x1d]; if ((piVar1 != param_1 + 0x18) && (piVar1 != (int *)0x0)) { uVar2 = param_1[0x18] - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } piVar1 = (int *)param_1[0x17]; if ((piVar1 != param_1 + 0x12) && (piVar1 != (int *)0x0)) { uVar2 = param_1[0x12] - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } piVar1 = (int *)param_1[0x11]; if ((piVar1 != param_1 + 0xc) && (piVar1 != (int *)0x0)) { uVar2 = param_1[0xc] - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } piVar1 = (int *)param_1[0xb]; if ((piVar1 != param_1 + 6) && (piVar1 != (int *)0x0)) { uVar2 = param_1[6] - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } piVar1 = (int *)param_1[5]; if ((piVar1 != param_1) && (piVar1 != (int *)0x0)) { if (0x80 < (uint)(*param_1 - (int)piVar1)) { operator_delete(piVar1); return param_1; } std::__node_alloc::_M_deallocate(piVar1,*param_1 - (int)piVar1); } return param_1; } ### FUNC FUN_0003a344 @ 0003a344 char * FUN_0003a344(int *param_1,uint param_2,int *param_3,undefined4 param_4,char *param_5, char *param_6,undefined4 param_7,int param_8,int param_9,uint *param_10, int *param_11) { char *pcVar1; locale *this; int *piVar2; int *piVar3; int *piVar4; uint uVar5; int iVar6; uint uVar7; char cVar8; int *piVar9; uint *puVar10; bool bVar11; locale alStack_2c [4]; int *local_28; undefined4 local_24; int *local_20; undefined4 local_1c; local_28 = param_3; local_24 = param_4; local_20 = param_1; local_1c = param_2; this = (locale *)std::locale::locale(alStack_2c,(locale *)(param_9 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); std::locale::~locale(alStack_2c); piVar3 = param_11 + 5; piVar4 = param_11 + 2; puVar10 = (uint *)(param_11 + 4); LAB_0003a3b2: if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar5 = (uint)*(byte *)local_20[2]; } else { uVar5 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5); } if ((local_28 == (int *)0x0) || (local_24._2_1_ != '\0')) { cVar8 = local_24._1_1_; } else { if ((byte *)local_28[2] < (byte *)local_28[3]) { uVar5 = (uint)*(byte *)local_28[2]; } else { uVar5 = (**(code **)(*local_28 + 0x20))(); } local_24 = CONCAT13(local_24._3_1_,0x10000); local_24._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5); cVar8 = uVar5 == 0xffffffff; } if (param_5 == param_6) { return param_5; } if (local_1c._1_1_ == cVar8) { return param_5; } if (*param_5 != '%') { if (local_1c._2_1_ == '\0') { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar5 = (uint)*(byte *)local_20[2]; } else { uVar5 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5); } else { uVar5 = local_1c & 0xff; } if ((uint)local_20[2] < (uint)local_20[3]) { local_20[2] = local_20[2] + 1; } else { (**(code **)(*local_20 + 0x24))(); } local_1c._0_3_ = (uint3)(ushort)local_1c; uVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,*param_5); if ((uVar5 & 0xff) != uVar7) { return param_5; } goto switchD_0003a452_caseD_43; } cVar8 = param_5[1]; pcVar1 = param_5 + 1; if (cVar8 == '#') { cVar8 = param_5[2]; pcVar1 = param_5 + 2; } param_5 = pcVar1; iVar6 = 0; switch(cVar8) { case 'A': iVar6 = 7; case 'a': iVar6 = param_8 + iVar6 * 0x18; iVar6 = FUN_0003a678(&local_20,&local_28,iVar6 + 0x78,iVar6 + 0x120); if (iVar6 == 7) { return param_5; } param_11[6] = iVar6; param_5 = param_5 + 1; goto LAB_0003a3b2; case 'B': iVar6 = 0xc; case 'b': iVar6 = param_8 + iVar6 * 0x18; uVar5 = FUN_0003a678(&local_20,&local_28,iVar6 + 0x1c8,iVar6 + 0x2e8); if (uVar5 == 0xc) { return param_5; } *puVar10 = uVar5; param_5 = param_5 + 1; goto LAB_0003a3b2; default: goto switchD_0003a452_caseD_43; case 'H': case 'I': piVar9 = piVar4; break; case 'M': piVar9 = param_11 + 1; break; case 'S': piVar9 = param_11; break; case 'Y': iVar6 = FUN_0003a840(&local_20,&local_28,piVar3,0); *piVar3 = *piVar3 + -0x76c; goto LAB_0003a622; case 'd': iVar6 = FUN_0003a840(&local_20,&local_28,param_11 + 3,0); if ((iVar6 != 1) || (0x1e < param_11[3] - 1U)) { LAB_0003a650: *param_10 = *param_10 | 4; return param_5; } goto switchD_0003a452_caseD_43; case 'j': piVar9 = param_11 + 7; break; case 'm': iVar6 = FUN_0003a840(&local_20,&local_28,puVar10,0); uVar5 = *puVar10; *puVar10 = uVar5 - 1; if ((0xb < uVar5 - 1) || (iVar6 == 0)) goto LAB_0003a650; goto switchD_0003a452_caseD_43; case 'p': iVar6 = FUN_0003a678(&local_20,&local_28,param_8 + 0x408,param_8 + 0x438); if (iVar6 == 0) { if (*piVar4 != 0xc) goto switchD_0003a452_caseD_43; *piVar4 = 0; param_5 = param_5 + 1; } else { if (iVar6 != 1) { bVar11 = iVar6 == 2; goto LAB_0003a624; } if (*piVar4 == 0xc) goto switchD_0003a452_caseD_43; *piVar4 = *piVar4 + 0xc; param_5 = param_5 + 1; } goto LAB_0003a3b2; case 'y': piVar9 = piVar3; } iVar6 = FUN_0003a840(&local_20,&local_28,piVar9,0); LAB_0003a622: bVar11 = iVar6 == 0; LAB_0003a624: if (bVar11) { return param_5; } switchD_0003a452_caseD_43: param_5 = param_5 + 1; goto LAB_0003a3b2; } ### FUNC FUN_0003a678 @ 0003a678 int FUN_0003a678(int *param_1,int *param_2,int param_3,int param_4) { int *piVar1; uint uVar2; int *piVar3; int iVar4; int iVar5; int iVar6; int iVar7; int iVar8; int local_48; int local_44; int local_3c; char local_2c [24]; local_2c[0x14] = '\0'; local_2c[0x15] = '\0'; local_2c[0x16] = '\0'; local_2c[0x17] = '\0'; local_2c[0x10] = '\0'; local_2c[0x11] = '\0'; local_2c[0x12] = '\0'; local_2c[0x13] = '\0'; local_2c[0xc] = '\0'; local_2c[0xd] = '\0'; local_2c[0xe] = '\0'; local_2c[0xf] = '\0'; local_2c[8] = '\0'; local_2c[9] = '\0'; local_2c[10] = '\0'; local_2c[0xb] = '\0'; local_2c[4] = '\0'; local_2c[5] = '\0'; local_2c[6] = '\0'; local_2c[7] = '\0'; local_2c[0] = '\0'; local_2c[1] = '\0'; local_2c[2] = '\0'; local_2c[3] = '\0'; local_48 = (param_4 - param_3 >> 3) * -0x55555555; iVar8 = 0; iVar5 = 0; iVar7 = local_48; local_3c = local_48; while( true ) { piVar1 = (int *)*param_1; if ((piVar1 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar1[2] < (byte *)piVar1[3]) { uVar2 = (uint)*(byte *)piVar1[2]; } else { uVar2 = (**(code **)(*piVar1 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar2; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; } piVar1 = (int *)*param_2; if ((piVar1 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar1[2] < (byte *)piVar1[3]) { uVar2 = (uint)*(byte *)piVar1[2]; } else { uVar2 = (**(code **)(*piVar1 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; local_44 = iVar7; if (iVar8 < iVar7) { piVar1 = (int *)(param_3 + 0x14 + iVar8 * 0x18); iVar4 = iVar8; iVar6 = iVar8; do { if (local_2c[iVar6] == '\0') { if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar2; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; } else { uVar2 = (uint)*(byte *)(param_1 + 1); } if ((uVar2 & 0xff) == (uint)*(byte *)(*piVar1 + iVar5)) { if (iVar5 == (piVar1[-1] + -1) - *piVar1) { local_2c[iVar6] = '\x01'; iVar8 = iVar4 + 1; if (iVar6 != iVar4) { iVar8 = iVar4; } local_3c = local_3c + -1; iVar4 = iVar8; local_48 = iVar6; if (local_3c == 0) { piVar1 = (int *)*param_1; if ((uint)piVar1[2] < (uint)piVar1[3]) { piVar1[2] = piVar1[2] + 1; } else { (**(code **)(*piVar1 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; return iVar6; } } local_44 = iVar6 + 1; iVar8 = iVar4; } else { local_2c[iVar6] = '\x01'; iVar8 = iVar4 + 1; if (iVar6 != iVar4) { iVar8 = iVar4; } local_3c = local_3c + -1; if (local_3c == 0) { return local_48; } } } else { iVar8 = iVar4 + 1; if (iVar6 != iVar4) { iVar8 = iVar4; } } piVar1 = piVar1 + 6; iVar6 = iVar6 + 1; iVar4 = iVar8; } while (iVar6 < iVar7); } piVar1 = (int *)*param_1; if ((uint)piVar1[2] < (uint)piVar1[3]) { piVar1[2] = piVar1[2] + 1; } else { (**(code **)(*piVar1 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; iVar5 = iVar5 + 1; iVar7 = local_44; } return local_48; } ### FUNC FUN_0003a840 @ 0003a840 undefined4 FUN_0003a840(undefined4 param_1,undefined4 param_2,undefined4 param_3) { undefined4 uVar1; undefined1 auStack_30 [4]; uint local_2c [4]; uint *local_1c; uint *local_18; local_1c = local_2c; local_2c[0] = local_2c[0] & 0xffffff00; local_18 = local_1c; uVar1 = FUN_0003a8bc(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { if (local_2c[0] - (int)local_18 < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } return uVar1; } ### FUNC FUN_0003a8bc @ 0003a8bc undefined4 FUN_0003a8bc(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,uint param_7 ,int param_8) { char cVar1; int iVar2; int *piVar3; uint uVar4; undefined4 uVar5; bool bVar6; int iVar7; int iVar8; int iVar9; int iVar10; int iVar11; undefined4 local_84; int local_6c; char *local_64; int local_58; char acStack_54 [64]; iVar7 = *(int *)(param_8 + 0x10); iVar9 = *(int *)(param_8 + 0x14); local_84 = 1; iVar2 = __divsi3(0x7fffffff,param_3); local_6c = param_5; cVar1 = '\0'; bVar6 = false; local_58 = 0; iVar11 = 0; while( true ) { local_64 = acStack_54 + local_58; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } iVar8 = 0xff; iVar10 = iVar11; if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { *local_64 = cVar1; local_58 = local_58 + 1; cVar1 = '\0'; } else { if (-1 < (char)uVar4) { iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); } if (param_3 <= iVar8) break; cVar1 = cVar1 + '\x01'; local_6c = local_6c + 1; if (iVar2 < iVar11) { bVar6 = true; } else { iVar10 = iVar8 + iVar11 * param_3; bVar6 = (bool)(bVar6 | (iVar11 != 0 && iVar10 <= iVar11)); } } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; iVar11 = iVar10; } if ((iVar9 != iVar7) && (local_58 != 0)) { *local_64 = cVar1; local_64 = acStack_54 + local_58 + 1; } uVar5 = 0; if (0 < local_6c) { if (bVar6) { *param_4 = 0x7fffffff; return 0; } iVar2 = -iVar11; if (param_6 == 0) { iVar2 = iVar11; } *param_4 = iVar2; uVar5 = local_84; if (iVar9 != iVar7) { uVar5 = std::priv::__valid_grouping (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar5; } ### FUNC FUN_0003aac0 @ 0003aac0 void FUN_0003aac0(facet *param_1) { FUN_00039fc0(param_1 + 0xc); std::locale::facet::~facet(param_1); return; } ### FUNC FUN_0003ac64 @ 0003ac64 void FUN_0003ac64(facet *param_1) { FUN_00039fc0(param_1 + 0xc); std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_0003ad04 @ 0003ad04 void FUN_0003ad04(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6 ,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10, undefined4 param_11) { int iVar1; int iVar2; uint uVar3; uint local_38; iVar1 = *(int *)(param_2 + 0x1c); uVar3 = 0; iVar2 = FUN_0003b4cc(param_3,param_4,param_5,param_6,param_7,param_8, *(undefined4 *)(param_2 + 0x20),iVar1,0,param_2 + 0xc,param_9,param_10, param_11); if (iVar2 != iVar1) { uVar3 = 4; } *param_10 = uVar3; if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) { if ((int *)param_3[2] < (int *)param_3[3]) { param_4 = *(int *)param_3[2]; } else { param_4 = (**(code **)(*param_3 + 0x20))(); } param_5 = param_5 & 0xffff0000 | (uint)(param_4 == -1) | 0x100; } local_38 = param_8; if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) { if ((int *)param_6[2] < (int *)param_6[3]) { iVar1 = *(int *)param_6[2]; } else { iVar1 = (**(code **)(*param_6 + 0x20))(param_6); } local_38 = (uint)(iVar1 == -1); } if ((param_5 & 0xff) == (local_38 & 0xff)) { *param_10 = *param_10 | 2; } *param_1 = param_3; param_1[1] = param_4; param_1[2] = param_5; return; } ### FUNC FUN_0003ae38 @ 0003ae38 undefined4 * FUN_0003ae38(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6, undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,undefined4 param_11) { int iVar1; uint uVar2; int iVar3; iVar3 = *(int *)(param_2 + 0x34); uVar2 = 0; iVar1 = FUN_0003b4cc(param_3,param_4,param_5,param_6,param_7,param_8, *(undefined4 *)(param_2 + 0x38),iVar3,0,param_2 + 0xc,param_9,param_10, param_11); if (iVar1 != iVar3) { *param_10 = 4; if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) { if ((int *)param_3[2] < (int *)param_3[3]) { param_4 = *(int *)param_3[2]; } else { param_4 = (**(code **)(*param_3 + 0x20))(); } param_5 = param_5 & 0xffff0000 | (uint)(param_4 == -1) | 0x100; } if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) { if ((int *)param_6[2] < (int *)param_6[3]) { iVar1 = *(int *)param_6[2]; } else { iVar1 = (**(code **)(*param_6 + 0x20))(); } param_8 = (uint)(iVar1 == -1); } if ((param_5 & 0xff) != (param_8 & 0xff)) goto LAB_0003af3c; uVar2 = *param_10 | 2; } *param_10 = uVar2; LAB_0003af3c: *param_1 = param_3; param_1[1] = param_4; param_1[2] = param_5; return param_1 + 3; } ### FUNC FUN_0003af48 @ 0003af48 void FUN_0003af48(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6 ,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,int param_11) { int iVar1; uint uVar2; undefined4 extraout_r1; int *local_2c; undefined4 local_28; undefined4 local_24; int *local_20; int local_1c; undefined4 local_18; local_18 = param_5; local_28 = param_7; local_24 = param_8; local_2c = param_6; local_20 = param_3; local_1c = param_4; iVar1 = FUN_0003b804(&local_20,&local_2c,param_2 + 0x84,param_2 + 0x474); if (iVar1 == 0xe) { *param_10 = 4; if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) { if ((int *)local_2c[2] < (int *)local_2c[3]) { iVar1 = *(int *)local_2c[2]; } else { iVar1 = (**(code **)(*local_2c + 0x20))(); } local_24 = (uint)(iVar1 == -1); } if ((local_18 & 0xff) != (local_24 & 0xff)) goto LAB_0003b00a; uVar2 = *param_10 | 2; } else { __aeabi_uidivmod(iVar1,7); *(undefined4 *)(param_11 + 0x18) = extraout_r1; uVar2 = 0; } *param_10 = uVar2; LAB_0003b00a: *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; return; } ### FUNC FUN_0003b020 @ 0003b020 void FUN_0003b020(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6 ,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,int param_11) { int iVar1; uint uVar2; undefined4 extraout_r1; int *local_2c; undefined4 local_28; undefined4 local_24; int *local_20; int local_1c; undefined4 local_18; local_18 = param_5; local_28 = param_7; local_24 = param_8; local_2c = param_6; local_20 = param_3; local_1c = param_4; iVar1 = FUN_0003b804(&local_20,&local_2c,param_2 + 0x474,param_2 + 0xb34); if (iVar1 == 0x18) { *param_10 = 4; if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) { if ((int *)local_2c[2] < (int *)local_2c[3]) { iVar1 = *(int *)local_2c[2]; } else { iVar1 = (**(code **)(*local_2c + 0x20))(); } local_24 = (uint)(iVar1 == -1); } if ((local_18 & 0xff) != (local_24 & 0xff)) goto LAB_0003b0de; uVar2 = *param_10 | 2; } else { __aeabi_uidivmod(iVar1,0xc); *(undefined4 *)(param_11 + 0x10) = extraout_r1; uVar2 = 0; } *param_10 = uVar2; LAB_0003b0de: *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; return; } ### FUNC FUN_0003b0f8 @ 0003b0f8 void FUN_0003b0f8(undefined4 *param_1,undefined4 param_2,int *param_3,int param_4,uint param_5, int *param_6,int param_7,uint param_8,undefined4 param_9,uint *param_10, int param_11) { int iVar1; uint uVar2; int *local_2c; int local_28; undefined4 local_24; int *local_20; int local_1c; undefined4 local_18; local_18 = param_5; local_28 = param_7; local_24 = param_8; local_2c = param_6; local_20 = param_3; local_1c = param_4; if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) { if ((int *)param_3[2] < (int *)param_3[3]) { local_1c = *(int *)param_3[2]; } else { local_1c = (**(code **)(*param_3 + 0x20))(param_3); } local_18 = CONCAT22(local_18._2_2_,0x100); param_5 = (uint)(local_1c == -1); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) { if ((int *)param_6[2] < (int *)param_6[3]) { local_28 = *(int *)param_6[2]; } else { local_28 = (**(code **)(*param_6 + 0x20))(param_6); } local_24 = CONCAT22(local_24._2_2_,0x100); param_8 = (uint)(local_28 == -1); local_24 = CONCAT31(local_24._1_3_,local_28 == -1); } if ((param_5 & 0xff) == (param_8 & 0xff)) { *param_10 = 6; } else { uVar2 = 0; iVar1 = FUN_0003b9cc(&local_20,&local_2c,param_11 + 0x14,0); *(int *)(param_11 + 0x14) = *(int *)(param_11 + 0x14) + -0x76c; if (iVar1 == 0) { uVar2 = 4; } *param_10 = uVar2; if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) { if ((int *)local_2c[2] < (int *)local_2c[3]) { iVar1 = *(int *)local_2c[2]; } else { iVar1 = (**(code **)(*local_2c + 0x20))(); } local_24 = (uint)(iVar1 == -1); } if ((local_18 & 0xff) == (local_24 & 0xff)) { *param_10 = *param_10 | 2; } } *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; return; } ### FUNC FUN_0003b248 @ 0003b248 void FUN_0003b248(facet *param_1) { FUN_0003b28c(param_1 + 0xc); std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_0003b28c @ 0003b28c void FUN_0003b28c(int param_1) { int *piVar1; uint uVar2; int *piVar3; int iVar4; int iVar5; piVar1 = *(int **)(param_1 + 0xbb4); if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0xb70))) { uVar2 = *(int *)(param_1 + 0xb70) - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } piVar1 = *(int **)(param_1 + 0xb6c); if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0xb28))) { uVar2 = *(int *)(param_1 + 0xb28) - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } iVar5 = 0; do { piVar3 = (int *)(param_1 + 0xae0 + iVar5); piVar1 = *(int **)(param_1 + 0xb24 + iVar5); if ((piVar1 != (int *)0x0) && (piVar3 != piVar1)) { uVar2 = *piVar3 - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } iVar5 = iVar5 + -0x48; } while (iVar5 != -0x6c0); iVar5 = 0; do { iVar4 = param_1 + 0x3a8 + iVar5; piVar1 = *(int **)(iVar4 + 0xbc); piVar3 = (int *)(iVar4 + 0x78); if ((piVar1 != (int *)0x0) && (piVar3 != piVar1)) { uVar2 = *piVar3 - (int)piVar1; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(piVar1,uVar2); } else { operator_delete(piVar1); } } iVar5 = iVar5 + -0x48; } while (iVar5 != -0x3f0); FUN_0003a204(param_1); return; } ### FUNC FUN_0003b4cc @ 0003b4cc char * FUN_0003b4cc(int *param_1,int param_2,undefined4 param_3,int *param_4,int param_5, undefined4 param_6,char *param_7,char *param_8,undefined4 param_9,int param_10, int param_11,uint *param_12,int *param_13) { char *pcVar1; locale *this; int *piVar2; int *piVar3; int *piVar4; int iVar5; int iVar6; uint uVar7; char cVar8; int *piVar9; uint *puVar10; bool bVar11; locale alStack_30 [4]; int *local_2c; int local_28; undefined4 local_24; int *local_20; int local_1c; undefined4 local_18; local_28 = param_5; local_24 = param_6; local_2c = param_4; local_20 = param_1; local_1c = param_2; local_18 = param_3; this = (locale *)std::locale::locale(alStack_30,(locale *)(param_11 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); std::locale::~locale(alStack_30); piVar3 = param_13 + 5; piVar4 = param_13 + 2; puVar10 = (uint *)(param_13 + 4); LAB_0003b53c: if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if ((local_2c == (int *)0x0) || (local_24._1_1_ != '\0')) { cVar8 = (char)local_24; } else { if ((int *)local_2c[2] < (int *)local_2c[3]) { local_28 = *(int *)local_2c[2]; } else { local_28 = (**(code **)(*local_2c + 0x20))(); } local_24 = CONCAT22(local_24._2_2_,0x100); local_24 = CONCAT31(local_24._1_3_,local_28 == -1); cVar8 = local_28 == -1; } if (param_7 == param_8) { return param_7; } if ((byte)local_18 == cVar8) { return param_7; } if (*param_7 != '%') { if (local_18._1_1_ == '\0') { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } iVar5 = local_1c; if ((uint)local_20[2] < (uint)local_20[3]) { local_20[2] = local_20[2] + 4; } else { (**(code **)(*local_20 + 0x24))(); } local_18._0_2_ = (ushort)(byte)local_18; iVar6 = (**(code **)(*piVar2 + 0x28))(piVar2,*param_7); if (iVar5 != iVar6) { return param_7; } goto switchD_0003b5da_caseD_43; } cVar8 = param_7[1]; pcVar1 = param_7 + 1; if (cVar8 == '#') { cVar8 = param_7[2]; pcVar1 = param_7 + 2; } param_7 = pcVar1; iVar5 = 0; switch(cVar8) { case 'A': iVar5 = 7; case 'a': iVar5 = param_10 + iVar5 * 0x48; iVar5 = FUN_0003b804(&local_20,&local_2c,iVar5 + 0x78,iVar5 + 0x270); if (iVar5 == 7) { return param_7; } param_13[6] = iVar5; param_7 = param_7 + 1; goto LAB_0003b53c; case 'B': iVar5 = 0xc; case 'b': iVar5 = param_10 + iVar5 * 0x48; uVar7 = FUN_0003b804(&local_20,&local_2c,iVar5 + 0x468,iVar5 + 0x7c8); if (uVar7 == 0xc) { return param_7; } *puVar10 = uVar7; param_7 = param_7 + 1; goto LAB_0003b53c; default: goto switchD_0003b5da_caseD_43; case 'H': case 'I': piVar9 = piVar4; break; case 'M': piVar9 = param_13 + 1; break; case 'S': piVar9 = param_13; break; case 'Y': iVar5 = FUN_0003b9cc(&local_20,&local_2c,piVar3,0); *piVar3 = *piVar3 + -0x76c; goto LAB_0003b7a4; case 'd': iVar5 = FUN_0003b9cc(&local_20,&local_2c,param_13 + 3,0); if ((iVar5 != 1) || (0x1e < param_13[3] - 1U)) { LAB_0003b7d2: *param_12 = *param_12 | 4; return param_7; } goto switchD_0003b5da_caseD_43; case 'j': piVar9 = param_13 + 7; break; case 'm': iVar5 = FUN_0003b9cc(&local_20,&local_2c,puVar10,0); uVar7 = *puVar10; *puVar10 = uVar7 - 1; if ((0xb < uVar7 - 1) || (iVar5 == 0)) goto LAB_0003b7d2; goto switchD_0003b5da_caseD_43; case 'p': iVar5 = FUN_0003b804(&local_20,&local_2c,param_10 + 0xb28,param_10 + 3000); if (iVar5 == 0) { if (*piVar4 != 0xc) goto switchD_0003b5da_caseD_43; *piVar4 = 0; param_7 = param_7 + 1; } else { if (iVar5 != 1) { bVar11 = iVar5 == 2; goto LAB_0003b7a6; } if (*piVar4 == 0xc) goto switchD_0003b5da_caseD_43; *piVar4 = *piVar4 + 0xc; param_7 = param_7 + 1; } goto LAB_0003b53c; case 'y': piVar9 = piVar3; } iVar5 = FUN_0003b9cc(&local_20,&local_2c,piVar9,0); LAB_0003b7a4: bVar11 = iVar5 == 0; LAB_0003b7a6: if (bVar11) { return param_7; } switchD_0003b5da_caseD_43: param_7 = param_7 + 1; goto LAB_0003b53c; } ### FUNC FUN_0003b804 @ 0003b804 int FUN_0003b804(int *param_1,int *param_2,int param_3,int param_4) { int *piVar1; int iVar2; int *piVar3; int iVar4; int iVar5; int iVar6; int iVar7; bool bVar8; char cVar9; int local_48; int local_44; int local_38; char local_2c [24]; iVar6 = 0; local_2c[0x14] = '\0'; local_2c[0x15] = '\0'; local_2c[0x16] = '\0'; local_2c[0x17] = '\0'; local_2c[0x10] = '\0'; local_2c[0x11] = '\0'; local_2c[0x12] = '\0'; local_2c[0x13] = '\0'; local_2c[0xc] = '\0'; local_2c[0xd] = '\0'; local_2c[0xe] = '\0'; local_2c[0xf] = '\0'; local_2c[8] = '\0'; local_2c[9] = '\0'; local_2c[10] = '\0'; local_2c[0xb] = '\0'; local_2c[4] = '\0'; local_2c[5] = '\0'; local_2c[6] = '\0'; local_2c[7] = '\0'; local_2c[0] = '\0'; local_2c[1] = '\0'; local_2c[2] = '\0'; local_2c[3] = '\0'; bVar8 = *(char *)((int)param_1 + 9) == '\0'; local_48 = (param_4 - param_3 >> 3) * 0x38e38e39; iVar7 = 0; iVar4 = local_48; local_38 = local_48; while( true ) { piVar1 = (int *)*param_1; if ((piVar1 != (int *)0x0) && (bVar8)) { if ((int *)piVar1[2] < (int *)piVar1[3]) { iVar2 = *(int *)piVar1[2]; } else { iVar2 = (**(code **)(*piVar1 + 0x20))(); } param_1[1] = iVar2; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar2 == -1; } piVar1 = (int *)*param_2; if ((piVar1 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar9 = (char)param_2[2]; } else { if ((int *)piVar1[2] < (int *)piVar1[3]) { iVar2 = *(int *)piVar1[2]; } else { iVar2 = (**(code **)(*piVar1 + 0x20))(); } param_2[1] = iVar2; *(undefined1 *)((int)param_2 + 9) = 1; cVar9 = iVar2 == -1; *(char *)(param_2 + 2) = cVar9; } if ((char)param_1[2] == cVar9) break; local_44 = iVar4; if (iVar7 < iVar4) { piVar1 = (int *)(param_3 + 0x44 + iVar7 * 0x48); iVar2 = iVar7; iVar5 = iVar7; do { if (local_2c[iVar5] == '\0') { if (*(char *)((int)param_1 + 9) == '\0') { piVar3 = (int *)*param_1; if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar7 = *(int *)piVar3[2]; } else { iVar7 = (**(code **)(*piVar3 + 0x20))(); } param_1[1] = iVar7; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar7 == -1; } else { iVar7 = param_1[1]; } if (iVar7 == *(int *)(*piVar1 + iVar6 * 4)) { if (iVar6 == (piVar1[-1] - *piVar1 >> 2) + -1) { local_2c[iVar5] = '\x01'; iVar7 = iVar2 + 1; if (iVar5 != iVar2) { iVar7 = iVar2; } local_38 = local_38 + -1; iVar2 = iVar7; local_48 = iVar5; if (local_38 == 0) { piVar1 = (int *)*param_1; if ((uint)piVar1[2] < (uint)piVar1[3]) { piVar1[2] = piVar1[2] + 4; } else { (**(code **)(*piVar1 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; return iVar5; } } local_44 = iVar5 + 1; iVar7 = iVar2; } else { local_2c[iVar5] = '\x01'; iVar7 = iVar2 + 1; if (iVar5 != iVar2) { iVar7 = iVar2; } local_38 = local_38 + -1; if (local_38 == 0) { return local_48; } } } else { iVar7 = iVar2 + 1; if (iVar5 != iVar2) { iVar7 = iVar2; } } piVar1 = piVar1 + 0x12; iVar5 = iVar5 + 1; iVar2 = iVar7; } while (iVar5 < iVar4); } piVar1 = (int *)*param_1; if ((uint)piVar1[2] < (uint)piVar1[3]) { piVar1[2] = piVar1[2] + 4; } else { (**(code **)(*piVar1 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; iVar6 = iVar6 + 1; bVar8 = true; iVar4 = local_44; } return local_48; } ### FUNC FUN_0003b9cc @ 0003b9cc undefined4 FUN_0003b9cc(undefined4 param_1,undefined4 param_2,undefined4 param_3) { undefined4 uVar1; undefined1 auStack_30 [4]; uint local_2c [4]; uint *local_1c; uint *local_18; local_1c = local_2c; local_2c[0] = local_2c[0] & 0xffffff00; local_18 = local_1c; uVar1 = FUN_0003ba48(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { if (local_2c[0] - (int)local_18 < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } return uVar1; } ### FUNC FUN_0003ba48 @ 0003ba48 uint FUN_0003ba48(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6, uint param_7,int param_8) { char cVar1; int iVar2; int iVar3; int *piVar4; int iVar5; uint uVar6; bool bVar7; int iVar8; int iVar9; char *pcVar10; char cVar11; int local_70; uint local_68; int local_5c; int local_58; char acStack_54 [64]; iVar9 = *(int *)(param_8 + 0x10); iVar2 = *(int *)(param_8 + 0x14); local_5c = 0; cVar11 = *(char *)((int)param_1 + 9); local_68 = 1; iVar3 = __divsi3(0x7fffffff,param_3); local_70 = param_5; cVar1 = '\0'; local_58 = 0; bVar7 = false; uVar6 = (uint)(cVar11 == '\0'); while( true ) { pcVar10 = acStack_54 + local_5c; piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar5 == -1; } piVar4 = (int *)*param_2; if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar11 = (char)param_2[2]; } else { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar5; *(undefined1 *)((int)param_2 + 9) = 1; cVar11 = iVar5 == -1; *(char *)(param_2 + 2) = cVar11; } if ((char)param_1[2] == cVar11) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((uint *)piVar4[2] < (uint *)piVar4[3]) { uVar6 = *(uint *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = uVar6; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; } else { uVar6 = param_1[1]; } iVar5 = local_58; if (uVar6 == param_7 && iVar2 != iVar9) { *pcVar10 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { iVar8 = 0xff; if (uVar6 < 0x80) { iVar8 = std::priv::__digit_val_table(uVar6); } if (param_3 <= iVar8) break; cVar1 = cVar1 + '\x01'; local_70 = local_70 + 1; if (iVar3 < local_58) { bVar7 = true; } else { iVar5 = iVar8 + local_58 * param_3; bVar7 = (bool)(bVar7 | (local_58 != 0 && iVar5 <= local_58)); } } piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar6 = local_68; local_58 = iVar5; } if ((iVar2 != iVar9) && (local_5c != 0)) { *pcVar10 = cVar1; pcVar10 = acStack_54 + local_5c + 1; } uVar6 = 0; if (0 < local_70) { if (bVar7) { *param_4 = 0x7fffffff; } else { iVar3 = -local_58; if (param_6 == 0) { iVar3 = local_58; } *param_4 = iVar3; uVar6 = local_68; if (iVar2 != iVar9) { uVar6 = std::priv::__valid_grouping (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) ; } } } return uVar6; } ### FUNC FUN_0003bc38 @ 0003bc38 void FUN_0003bc38(facet *param_1) { FUN_0003b28c(param_1 + 0xc); std::locale::facet::~facet(param_1); return; } ### FUNC FUN_0003bdfc @ 0003bdfc void FUN_0003bdfc(facet *param_1) { FUN_0003b28c(param_1 + 0xc); std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_0003bf80 @ 0003bf80 /* WARNING: Removing unreachable block (ram,0x0003c6ba) */ void FUN_0003bf80(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5, int param_6,int param_7,uint *param_8,uint *param_9,char *param_10) { uint *puVar1; uint *puVar2; uint uVar3; uint uVar4; locale *this; int *piVar5; int *piVar6; int *piVar7; undefined4 uVar8; undefined4 uVar9; int iVar10; undefined4 uVar11; char cVar12; int iVar13; int iVar14; uint uVar15; undefined4 local_104; int local_fc; uint local_c8; int *local_c4 [2]; char local_bc; int *local_b8 [2]; char local_b0; int local_ac [4]; int *local_9c; int *local_98; int *local_94 [2]; char local_8c; int local_88 [4]; undefined4 local_78; int *local_74; uint local_70 [4]; uint *local_60; uint *local_5c; int local_58 [4]; byte *local_48; byte *local_44; int local_40 [4]; byte *local_30; byte *local_2c; undefined4 local_28; locale alStack_24 [4]; int *local_20; undefined4 local_1c; uVar3 = param_3 >> 8; local_20 = param_2; local_1c = param_3; if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar4 = (uint)*(byte *)param_2[2]; } else { uVar4 = (**(code **)(*param_2 + 0x20))(param_2); } local_1c = CONCAT13(local_1c._3_1_,0x10000); uVar3 = (uint)(uVar4 == 0xffffffff); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } if (((param_5 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { if ((byte *)param_4[2] < (byte *)param_4[3]) { uVar4 = (uint)*(byte *)param_4[2]; } else { uVar4 = (**(code **)(*param_4 + 0x20))(param_4); } param_5 = param_5 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000; } if ((uVar3 & 0xff) == (param_5 >> 8 & 0xff)) { *param_8 = *param_8 | 2; *param_1 = local_20; param_1[1] = local_1c; return; } this = (locale *)std::locale::locale(alStack_24,(locale *)(param_7 + 0x20)); piVar5 = (int *)std::locale::_M_use_facet(this,(id *)&std::moneypunct::id); piVar6 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::moneypunct::id); piVar7 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::ctype::id); if (param_6 == 1) { local_28 = (**(code **)(*piVar6 + 0x28))(); (**(code **)(*piVar6 + 0x1c))(local_40); (**(code **)(*piVar6 + 0x18))(local_58); } else { local_28 = (**(code **)(*piVar5 + 0x28))(); (**(code **)(*piVar5 + 0x1c))(local_40); (**(code **)(*piVar5 + 0x18))(local_58); } uVar3 = *(uint *)(param_7 + 4); local_70[0] = local_70[0] & 0xffffff00; local_fc = 1; local_104 = 0; iVar14 = -1; local_c8 = param_5; local_60 = local_70; local_5c = local_70; do { switch(alStack_24[iVar14 + -3]) { case (locale)0x0: cVar12 = local_1c._2_1_; while( true ) { if ((local_20 != (int *)0x0) && (cVar12 == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar4 = (uint)*(byte *)local_20[2]; } else { uVar4 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { if ((byte *)param_4[2] < (byte *)param_4[3]) { uVar4 = (uint)*(byte *)param_4[2]; } else { uVar4 = (**(code **)(*param_4 + 0x20))(param_4); } local_c8 = local_c8 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000; } if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) break; if (local_1c._2_1_ == '\0') { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar4 = (uint)*(byte *)local_20[2]; } else { uVar4 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } else { uVar4 = local_1c & 0xff; } if ((*(byte *)(piVar7[3] + (uVar4 & 0xff) * 4) & 1) == 0) break; uVar4 = local_20[2]; if (uVar4 < (uint)local_20[3]) { LAB_0003c498: local_20[2] = uVar4 + 1; } else { (**(code **)(*local_20 + 0x24))(); } LAB_0003c49c: local_1c._0_3_ = (uint3)(ushort)local_1c; cVar12 = '\0'; } break; case (locale)0x1: if (local_1c._2_1_ == '\0') { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar4 = (uint)*(byte *)local_20[2]; } else { uVar4 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } else { uVar4 = local_1c & 0xff; } uVar15 = 4; if ((*(byte *)(piVar7[3] + (uVar4 & 0xff) * 4) & 1) != 0) { uVar4 = local_20[2]; if (uVar4 < (uint)local_20[3]) goto LAB_0003c498; (**(code **)(*local_20 + 0x24))(); goto LAB_0003c49c; } goto LAB_0003c750; case (locale)0x2: if (param_6 == 1) { (**(code **)(*piVar6 + 0x14))(local_88); } else { (**(code **)(*piVar5 + 0x14))(local_88); } FUN_0003c914(local_94,local_20,local_1c,param_4,local_c8,local_74,local_78); if (((uVar3 & 0x200) != 0) && (local_8c == '\0')) { *param_8 = 4; } local_1c._0_3_ = (uint3)local_94[1]; local_20 = local_94[0]; if ((local_74 != local_88) && (local_74 != (int *)0x0)) { if ((uint)(local_88[0] - (int)local_74) < 0x81) { std::__node_alloc::_M_deallocate(local_74,local_88[0] - (int)local_74); } else { operator_delete(local_74); } } break; case (locale)0x3: if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar4 = (uint)*(byte *)local_20[2]; } else { uVar4 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { if ((byte *)param_4[2] < (byte *)param_4[3]) { uVar4 = (uint)*(byte *)param_4[2]; } else { uVar4 = (**(code **)(*param_4 + 0x20))(param_4); } local_c8 = local_c8 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000 ; } if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) { if (local_44 != local_48) { uVar15 = 4; if (local_2c != local_30) goto LAB_0003c750; *param_10 = '\0'; } } else if (local_44 == local_48) { if (local_2c != local_30) { if (local_1c._2_1_ == '\0') { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar4 = (uint)*(byte *)local_20[2]; } else { uVar4 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } else { uVar4 = local_1c & 0xff; } if ((uVar4 & 0xff) == (uint)*local_2c) { uVar4 = local_20[2]; if (uVar4 < (uint)local_20[3]) goto LAB_0003c480; (**(code **)(*local_20 + 0x24))(); goto LAB_0003c48c; } } } else { if (local_1c._2_1_ == '\0') { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar4 = (uint)*(byte *)local_20[2]; } else { uVar4 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4); } else { uVar4 = local_1c & 0xff; } if ((uVar4 & 0xff) == (uint)*local_44) { if ((uint)local_20[2] < (uint)local_20[3]) { local_20[2] = local_20[2] + 1; } else { (**(code **)(*local_20 + 0x24))(); } local_1c._0_3_ = (uint3)(ushort)local_1c; } else if (local_2c != local_30) { uVar15 = 4; if ((uVar4 & 0xff) != (uint)*local_2c) goto LAB_0003c750; uVar4 = local_20[2]; if (uVar4 < (uint)local_20[3]) { LAB_0003c480: local_20[2] = uVar4 + 1; } else { (**(code **)(*local_20 + 0x24))(); } LAB_0003c48c: local_1c._0_3_ = (uint3)(ushort)local_1c; *param_10 = '\0'; } } break; case (locale)0x4: if (param_6 == 1) { uVar11 = (**(code **)(*piVar6 + 8))(); uVar8 = (**(code **)(*piVar6 + 0x20))(); (**(code **)(*piVar6 + 0x10))(local_ac); } else { uVar11 = (**(code **)(*piVar5 + 8))(); uVar8 = (**(code **)(*piVar5 + 0x20))(); (**(code **)(*piVar5 + 0x10))(local_ac); } local_88[0] = CONCAT31(local_88[0]._1_3_,1); uVar9 = local_104; if (local_98 != local_9c) { if (param_6 == 1) { uVar9 = (**(code **)(*piVar6 + 0xc))(); } else { uVar9 = (**(code **)(*piVar5 + 0xc))(); } } iVar10 = FUN_0003ca78(&local_20,param_4,local_c8,local_70,piVar7,uVar11,uVar8,uVar9,local_ac, local_88); if ((char)local_88[0] == '\0') { *param_8 = *param_8 | 4; } iVar13 = 5; if (iVar10 == 0) { *param_8 = 4; *param_1 = local_20; param_1[1] = local_1c; iVar13 = local_fc; } if ((local_98 != local_ac) && (local_98 != (int *)0x0)) { if ((uint)(local_ac[0] - (int)local_98) < 0x81) { std::__node_alloc::_M_deallocate(local_98,local_ac[0] - (int)local_98); } else { operator_delete(local_98); } } if (iVar13 != 5) goto LAB_0003c75c; } iVar14 = iVar14 + 1; } while (iVar14 < 3); if (*param_10 == '\0') { if (1 < (uint)((int)local_30 - (int)local_2c)) { FUN_0003c914(local_c4,local_20,local_1c,param_4,local_c8,local_2c + 1,local_30); local_1c._0_3_ = (uint3)local_c4[1]; local_20 = local_c4[0]; if (local_bc == '\0') { *param_8 = *param_8 | 4; } } if (-1 < (int)((uint)(byte)*param_8 << 0x1d)) { uVar11 = (**(code **)(*piVar7 + 0x18))(piVar7,0x2d); FUN_0003d0a8(param_9,1,uVar11); FUN_00037294(param_9,local_5c,local_60); } } else { if (1 < (uint)((int)local_48 - (int)local_44)) { FUN_0003c914(local_b8,local_20,local_1c,param_4,local_c8,local_44 + 1,local_48); local_1c._0_3_ = (uint3)local_b8[1]; local_20 = local_b8[0]; if (local_b0 == '\0') { *param_8 = *param_8 | 4; } } puVar2 = local_5c; puVar1 = local_60; if ((local_70 != param_9) && ((*param_8 & 4) == 0)) { uVar15 = (int)local_60 - (int)local_5c; uVar4 = param_9[4]; uVar3 = param_9[5]; if (uVar4 - uVar3 < uVar15) { if (uVar4 != uVar3) { __aeabi_memmove(); uVar4 = param_9[4]; uVar3 = param_9[5]; } FUN_00037294(param_9,(int)puVar2 + (uVar4 - uVar3),puVar1); } else { if (uVar15 != 0) { __aeabi_memmove(uVar3,local_5c,uVar15); uVar4 = param_9[4]; uVar3 = param_9[5]; } uVar3 = uVar3 + uVar15; if (uVar3 != uVar4) { __aeabi_memmove(uVar3,uVar4); param_9[4] = param_9[4] + (uVar3 - uVar4); } } } } if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) { if ((byte *)local_20[2] < (byte *)local_20[3]) { uVar3 = (uint)*(byte *)local_20[2]; } else { uVar3 = (**(code **)(*local_20 + 0x20))(); } local_1c = CONCAT13(local_1c._3_1_,0x10000); local_1c._0_2_ = CONCAT11(uVar3 == 0xffffffff,(char)uVar3); } if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) { if ((byte *)param_4[2] < (byte *)param_4[3]) { uVar3 = (uint)*(byte *)param_4[2]; } else { uVar3 = (**(code **)(*param_4 + 0x20))(); } local_c8 = (uint)(uVar3 == 0xffffffff) << 8; } if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) { uVar15 = *param_8 | 2; LAB_0003c750: *param_8 = uVar15; } *param_1 = local_20; param_1[1] = local_1c; LAB_0003c75c: if ((local_5c != local_70) && (local_5c != (uint *)0x0)) { if (local_70[0] - (int)local_5c < 0x81) { std::__node_alloc::_M_deallocate(local_5c,local_70[0] - (int)local_5c); } else { operator_delete(local_5c); } } if ((local_44 != (byte *)local_58) && (local_44 != (byte *)0x0)) { if ((uint)(local_58[0] - (int)local_44) < 0x81) { std::__node_alloc::_M_deallocate(local_44,local_58[0] - (int)local_44); } else { operator_delete(local_44); } } if ((local_2c != (byte *)local_40) && (local_2c != (byte *)0x0)) { if ((uint)(local_40[0] - (int)local_2c) < 0x81) { std::__node_alloc::_M_deallocate(local_2c,local_40[0] - (int)local_2c); } else { operator_delete(local_2c); } } std::locale::~locale(alStack_24); return; } ### FUNC FUN_0003c898 @ 0003c898 undefined4 FUN_0003c898(undefined4 param_1,undefined4 param_2,undefined4 param_3) { undefined4 uVar1; undefined1 auStack_30 [4]; uint local_2c [4]; uint *local_1c; uint *local_18; local_1c = local_2c; local_2c[0] = local_2c[0] & 0xffffff00; local_18 = local_1c; uVar1 = FUN_0003d350(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { if (local_2c[0] - (int)local_18 < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } return uVar1; } ### FUNC FUN_0003c914 @ 0003c914 void FUN_0003c914(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5, byte *param_6,byte *param_7) { uint uVar1; uint uVar2; bool bVar3; byte *local_18; local_18 = param_6; while( true ) { if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar1 = (uint)*(byte *)param_2[2]; } else { uVar1 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = param_3 & 0xff000000 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; } if ((param_4 != (int *)0x0) && ((param_5 & 0xff0000) == 0)) { if ((byte *)param_4[2] < (byte *)param_4[3]) { uVar1 = (uint)*(byte *)param_4[2]; } else { uVar1 = (**(code **)(*param_4 + 0x20))(param_4); } param_5 = (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; } bVar3 = param_7 == local_18; if ((param_7 == local_18) || ((param_3 >> 8 & 0xff) == (param_5 >> 8 & 0xff))) break; uVar1 = param_3; if ((param_3 & 0xff0000) == 0) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar1 = (uint)*(byte *)param_2[2]; } else { uVar1 = (**(code **)(*param_2 + 0x20))(param_2); } uVar2 = param_3 & 0xff000000; param_3 = uVar1; uVar1 = uVar2 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; } uVar2 = param_3 & 0xff; bVar3 = false; param_3 = uVar1; if (*local_18 != uVar2) break; if ((uint)param_2[2] < (uint)param_2[3]) { param_2[2] = param_2[2] + 1; } else { (**(code **)(*param_2 + 0x24))(param_2); } param_3 = uVar1 & 0xff00ffff; local_18 = local_18 + 1; } *param_1 = param_2; param_1[1] = param_3; *(bool *)(param_1 + 2) = bVar3; return; } ### FUNC FUN_0003ca78 @ 0003ca78 undefined4 FUN_0003ca78(int *param_1,int *param_2,uint param_3,undefined4 *param_4,int param_5,uint param_6, int param_7,uint param_8,int param_9,char *param_10) { char cVar1; int *piVar2; uint uVar3; undefined4 *puVar4; int iVar5; uint uVar6; char *pcVar7; uint uVar8; uint uVar9; char *pcVar10; uint uVar11; char *pcVar12; undefined4 *puVar13; char *pcVar14; char *local_d0; int local_c4; uint local_a0; char local_94 [128]; piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } if (((param_3 << 8) >> 0x18 == 0) && (param_2 != (int *)0x0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar3 = (uint)*(byte *)param_2[2]; } else { uVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; } if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) { return 0; } if (*(char *)((int)param_1 + 6) == '\0') { piVar2 = (int *)*param_1; if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } else { uVar3 = (uint)*(byte *)(param_1 + 1); } if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) { return 0; } local_d0 = (char *)0x0; if (*(int *)(param_9 + 0x14) != *(int *)(param_9 + 0x10)) { local_d0 = local_94; } local_c4 = param_7; puVar4 = param_4 + 4; while( true ) { cVar1 = '\0'; while( true ) { piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } local_a0 = 0xfffffffe; if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar3 = (uint)*(byte *)param_2[2]; } else { uVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; } pcVar7 = local_d0; if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) goto LAB_0003cd28; if (*(char *)((int)param_1 + 6) == '\0') { piVar2 = (int *)*param_1; if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } else { uVar3 = (uint)*(byte *)(param_1 + 1); } if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) break; cVar1 = cVar1 + '\x01'; piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 1; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; if ((undefined4 *)param_4[5] == param_4) { iVar5 = param_4[4]; puVar13 = puVar4; } else { iVar5 = param_4[4]; puVar13 = (undefined4 *)*param_4; } if ((int)puVar13 - iVar5 == 1) { uVar6 = iVar5 - (int)param_4[5]; if (uVar6 == 0xfffffffe) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar8 = uVar6; if (uVar6 < 2) { uVar8 = 1; } uVar9 = uVar6 + uVar8 + 1; uVar11 = 0xfffffffe; if (uVar6 <= uVar9) { uVar11 = uVar9; } if (uVar6 + uVar8 != -2) { local_a0 = uVar11; } FUN_0003d024(param_4,local_a0); iVar5 = param_4[4]; } *(undefined1 *)(iVar5 + 1) = 0; *(char *)param_4[4] = (char)uVar3; param_4[4] = param_4[4] + 1; } pcVar7 = (char *)0x0; if ((local_d0 == (char *)0x0) || (pcVar7 = local_d0, (uVar3 & 0xff) != param_8)) break; *local_d0 = cVar1; local_d0 = local_d0 + 1; piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 1; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; } LAB_0003cd28: pcVar14 = *(char **)(param_9 + 0x10); pcVar12 = *(char **)(param_9 + 0x14); if (pcVar12 == pcVar14) { *param_10 = '\x01'; LAB_0003ce0e: piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 1; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; while( true ) { piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar3 = (uint)*(byte *)param_2[2]; } else { uVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; } if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar2 = (int *)*param_1; if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } else { uVar3 = (uint)*(byte *)(param_1 + 1); } if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) break; piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 1; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; if ((undefined4 *)param_4[5] == param_4) { iVar5 = param_4[4]; puVar13 = puVar4; } else { iVar5 = param_4[4]; puVar13 = (undefined4 *)*param_4; } if ((int)puVar13 - iVar5 == 1) { uVar6 = iVar5 - (int)param_4[5]; if (uVar6 == 0xfffffffe) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar8 = uVar6; if (uVar6 < 2) { uVar8 = 1; } uVar9 = uVar6 + uVar8 + 1; uVar11 = local_a0; if (uVar6 <= uVar9) { uVar11 = uVar9; } uVar9 = local_a0; if (uVar6 + uVar8 != -2) { uVar9 = uVar11; } FUN_0003d024(param_4,uVar9); iVar5 = param_4[4]; } *(undefined1 *)(iVar5 + 1) = 0; *(char *)param_4[4] = (char)uVar3; param_4[4] = param_4[4] + 1; local_c4 = local_c4 + -1; } *param_10 = local_c4 == 0 && *param_10 != '\0'; } else { pcVar10 = local_94; if (pcVar7 != pcVar10) { *pcVar7 = cVar1; pcVar10 = pcVar7 + 1; pcVar14 = *(char **)(param_9 + 0x10); pcVar12 = *(char **)(param_9 + 0x14); } cVar1 = std::priv::__valid_grouping(local_94,pcVar10,pcVar12,pcVar14); *param_10 = cVar1; piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar3 = (uint)*(byte *)param_2[2]; } else { uVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000; } if ((uint)*(byte *)((int)param_1 + 5) != (param_3 >> 8 & 0xff)) { if (*(char *)((int)param_1 + 6) == '\0') { piVar2 = (int *)*param_1; if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } else { uVar3 = (uint)*(byte *)(param_1 + 1); } if ((uVar3 & 0xff) == param_6) goto LAB_0003ce0e; } if (param_7 != 0) { do { if ((undefined4 *)param_4[5] == param_4) { iVar5 = param_4[4]; puVar13 = puVar4; } else { iVar5 = param_4[4]; puVar13 = (undefined4 *)*param_4; } if ((int)puVar13 - iVar5 == 1) { uVar3 = iVar5 - (int)param_4[5]; if (uVar3 == 0xfffffffe) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar6 = uVar3; if (uVar3 < 2) { uVar6 = 1; } uVar11 = uVar3 + uVar6 + 1; uVar8 = local_a0; if (uVar3 <= uVar11) { uVar8 = uVar11; } uVar11 = local_a0; if (uVar3 + uVar6 != -2) { uVar11 = uVar8; } FUN_0003d024(param_4,uVar11); iVar5 = param_4[4]; } *(undefined1 *)(iVar5 + 1) = 0; *(undefined1 *)param_4[4] = 0x30; param_4[4] = param_4[4] + 1; param_7 = param_7 + -1; } while (param_7 != 0); } } return 1; } ### FUNC FUN_0003d024 @ 0003d024 void FUN_0003d024(int *param_1,uint param_2) { undefined1 *puVar1; undefined1 *puVar2; int *piVar3; int iVar4; uint uVar5; undefined1 *puVar6; uint local_18; uVar5 = 0; if (param_2 == 0) { puVar1 = (undefined1 *)0x0; } else { local_18 = param_2; if (param_2 < 0x81) { puVar1 = (undefined1 *)std::__node_alloc::_M_allocate(&local_18); uVar5 = local_18; } else { puVar1 = (undefined1 *)operator_new(param_2); uVar5 = param_2; } } puVar2 = (undefined1 *)param_1[5]; puVar6 = puVar1; if (0 < param_1[4] - (int)puVar2) { iVar4 = (param_1[4] + 1) - (int)puVar2; do { *puVar6 = *puVar2; iVar4 = iVar4 + -1; puVar6 = puVar6 + 1; puVar2 = puVar2 + 1; } while (1 < iVar4); } *puVar6 = 0; piVar3 = (int *)param_1[5]; if ((piVar3 != param_1) && (piVar3 != (int *)0x0)) { if ((uint)(*param_1 - (int)piVar3) < 0x81) { std::__node_alloc::_M_deallocate(piVar3,*param_1 - (int)piVar3); } else { operator_delete(piVar3); } } param_1[4] = (int)puVar6; param_1[5] = (int)puVar1; *param_1 = (int)(puVar1 + uVar5); return; } ### FUNC FUN_0003d0a8 @ 0003d0a8 int * FUN_0003d0a8(int *param_1,uint param_2,undefined4 param_3) { int *piVar1; undefined1 *puVar2; uint uVar3; undefined1 *puVar4; int local_30 [4]; int *local_20; int *local_1c; uint local_18; piVar1 = (int *)param_1[5]; if (param_2 <= (uint)(param_1[4] - (int)piVar1)) { __aeabi_memset(piVar1,param_2,param_3); puVar4 = (undefined1 *)param_1[4]; puVar2 = (undefined1 *)(param_1[5] + param_2); if (puVar2 == puVar4) { return param_1; } *puVar2 = *puVar4; param_1[4] = (int)(puVar2 + (param_1[4] - (int)puVar4)); return param_1; } uVar3 = 0xf; if (piVar1 != param_1) { uVar3 = *param_1 + ((uint)piVar1 ^ 0xffffffff); } if (param_2 < uVar3) { __aeabi_memset(piVar1,param_1[4] - (int)piVar1,param_3); FUN_0003d1e0(param_1,(param_2 - param_1[4]) + param_1[5],param_3); return param_1; } local_20 = local_30; uVar3 = param_2 + 1; local_1c = local_20; if (uVar3 == 0) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (uVar3 < 0x11) { puVar4 = (undefined1 *)((int)local_30 + param_2); } else { local_18 = uVar3; if (uVar3 < 0x81) { local_1c = (int *)std::__node_alloc::_M_allocate(&local_18); uVar3 = local_18; } else { local_1c = (int *)operator_new(uVar3); } local_30[0] = (int)local_1c + uVar3; puVar4 = (undefined1 *)((int)local_1c + param_2); if ((int)param_2 < 1) goto LAB_0003d170; } uVar3 = param_2 ^ 0xffffffff; if ((int)(param_2 ^ 0xffffffff) < -1) { uVar3 = 0xfffffffe; } local_20 = local_1c; __aeabi_memset(local_1c,param_2 + uVar3 + 2,param_3); LAB_0003d170: local_20 = (int *)puVar4; *puVar4 = 0; FUN_0003d298(param_1,local_30); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } return param_1; } ### FUNC FUN_0003d1e0 @ 0003d1e0 undefined4 * FUN_0003d1e0(undefined4 *param_1,uint param_2,undefined4 param_3) { int iVar1; uint uVar2; uint uVar3; undefined4 *puVar4; uint uVar5; uint uVar6; int iVar7; undefined4 *puVar8; if (param_2 != 0) { iVar1 = param_1[4]; puVar4 = (undefined4 *)param_1[5]; if ((uint)((-2 - iVar1) + (int)puVar4) < param_2) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (puVar4 == param_1) { puVar8 = param_1 + 4; } else { puVar8 = (undefined4 *)*param_1; } if ((uint)((int)puVar8 - iVar1) <= param_2) { uVar2 = iVar1 - (int)puVar4; if (-uVar2 - 2 < param_2) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar5 = uVar2; if (uVar2 <= param_2) { uVar5 = param_2; } uVar6 = uVar2 + uVar5 + 1; uVar3 = 0xfffffffe; if (uVar2 <= uVar6) { uVar3 = uVar6; } uVar6 = 0xfffffffe; if (uVar2 + uVar5 != -2) { uVar6 = uVar3; } FUN_0003d024(param_1,uVar6); iVar1 = param_1[4]; } if (0 < (int)(param_2 - 1)) { iVar7 = -param_2; if (param_2 == 2 || iVar7 < -2) { iVar7 = -2; } __aeabi_memset(iVar1 + 1,iVar7 + param_2 + 1,param_3); iVar1 = param_1[4]; } *(undefined1 *)(iVar1 + param_2) = 0; *(char *)param_1[4] = (char)param_3; param_1[4] = param_1[4] + param_2; } return param_1; } ### FUNC FUN_0003d298 @ 0003d298 void FUN_0003d298(undefined4 *param_1,undefined4 *param_2) { undefined4 *puVar1; undefined4 uVar2; undefined4 *puVar3; int iVar4; undefined4 uVar5; undefined4 uVar6; undefined4 uVar7; puVar1 = (undefined4 *)param_2[5]; puVar3 = (undefined4 *)param_1[5]; if (puVar3 == param_1) { if (puVar1 != param_2) { FUN_0003d298(param_2,param_1); return; } uVar2 = *puVar3; uVar6 = puVar3[1]; uVar7 = puVar3[2]; uVar5 = puVar3[3]; puVar3[3] = puVar1[3]; puVar3[2] = puVar1[2]; puVar3[1] = puVar1[1]; *puVar3 = *puVar1; *puVar1 = uVar2; puVar1[1] = uVar6; puVar1[2] = uVar7; puVar1[3] = uVar5; iVar4 = param_1[4]; param_1[4] = param_1[5] + (param_2[4] - param_2[5]); param_2[4] = (int)puVar1 + (iVar4 - param_1[5]); param_1[5] = param_1; param_2[5] = param_2; return; } if (puVar1 != param_2) { uVar2 = *param_1; *param_1 = *param_2; *param_2 = uVar2; uVar2 = param_1[5]; param_1[5] = param_2[5]; param_2[5] = uVar2; uVar2 = param_1[4]; param_1[4] = param_2[4]; param_2[4] = uVar2; return; } param_1[3] = puVar1[3]; param_1[2] = puVar1[2]; param_1[1] = puVar1[1]; uVar2 = *param_1; *param_1 = *puVar1; param_1[5] = param_1; uVar5 = param_1[4]; param_1[4] = (int)param_1 + (param_2[4] - (int)param_2); *param_2 = uVar2; param_2[4] = uVar5; param_2[5] = puVar3; return; } ### FUNC FUN_0003d350 @ 0003d350 undefined4 FUN_0003d350(int *param_1,undefined4 *param_2,int param_3,undefined4 *param_4,int param_5, int param_6,uint param_7,int param_8) { byte bVar1; byte *pbVar2; int iVar3; undefined4 uVar4; char cVar5; char *pcVar6; int iVar7; uint uVar8; int iVar9; uint uVar10; int iVar11; uint uVar12; undefined4 uVar13; undefined8 uVar14; undefined8 uVar15; undefined8 uVar16; undefined8 uVar17; uint local_9c; undefined4 local_7c; undefined4 local_70; int local_60; char local_54 [64]; uVar14 = __floatsidf(param_3); uVar15 = __divdf3(0xffffffff,0x7fefffff); iVar7 = *(int *)(param_8 + 0x10); iVar9 = *(int *)(param_8 + 0x14); pbVar2 = (byte *)*param_1; local_9c = 1; local_60 = param_5; if (pbVar2 == (byte *)*param_2) { uVar12 = 0; pcVar6 = local_54; uVar16 = 0; } else { pcVar6 = local_54; uVar8 = 0; uVar16 = 0; cVar5 = '\0'; uVar10 = uVar8; do { local_70 = (undefined4)((ulonglong)uVar16 >> 0x20); uVar4 = (undefined4)uVar16; bVar1 = *pbVar2; uVar12 = uVar10; if (bVar1 == param_7 && iVar9 != iVar7) { *pcVar6 = cVar5; uVar8 = uVar8 + 1; cVar5 = '\0'; } else { iVar11 = 0xff; if (-1 < (char)bVar1) { iVar11 = std::priv::__digit_val_table((uint)bVar1); } if (param_3 <= iVar11) break; iVar3 = __aeabi_dcmpgt(uVar4,local_70,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20)); cVar5 = cVar5 + '\x01'; local_60 = local_60 + 1; uVar12 = local_9c; if (iVar3 == 0) { uVar16 = __muldf3(uVar4,local_70,(int)uVar14,(int)((ulonglong)uVar14 >> 0x20)); uVar17 = __floatsidf(iVar11); uVar16 = __adddf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, (int)((ulonglong)uVar17 >> 0x20)); iVar11 = __aeabi_dcmple((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),uVar4,local_70); iVar3 = __aeabi_dcmpeq(uVar4,local_70,0,0); uVar12 = uVar10 | (iVar3 == 0 && iVar11 != 0); } } pbVar2 = (byte *)(*param_1 + 1); *param_1 = (int)pbVar2; pcVar6 = local_54 + uVar8; uVar10 = uVar12; } while (pbVar2 != (byte *)*param_2); pcVar6 = local_54 + uVar8; if ((iVar9 != iVar7) && (uVar8 != 0)) { *pcVar6 = cVar5; pcVar6 = local_54 + uVar8 + 1; } } uVar13 = (undefined4)((ulonglong)uVar16 >> 0x20); local_7c = (undefined4)uVar16; uVar4 = 0; if (0 < local_60) { if (uVar12 != 0) { *param_4 = 0xffffffff; param_4[1] = 0x7fefffff; return 0; } uVar14 = __subdf3(0,0x80000000,local_7c,uVar13); uVar4 = (int)((ulonglong)uVar14 >> 0x20); if (param_6 == 0) { uVar4 = uVar13; } param_4[1] = uVar4; uVar4 = (int)uVar14; if (param_6 == 0) { uVar4 = local_7c; } *param_4 = uVar4; uVar4 = 1; if (iVar9 != iVar7) { uVar4 = std::priv::__valid_grouping (local_54,pcVar6,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar4; } ### FUNC FUN_0003d520 @ 0003d520 void FUN_0003d520(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_0003d624 @ 0003d624 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_0003d624(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, int param_7,int param_8) { undefined1 uVar1; locale *this; int *piVar2; int *piVar3; int *piVar4; uint uVar5; undefined4 uVar6; int iVar7; int iVar8; undefined1 **ppuVar9; undefined1 *puVar10; int iVar11; int iVar12; byte *pbVar13; int iVar14; uint uVar15; uint uVar16; undefined1 **ppuVar17; int iVar18; uint uVar19; byte *pbVar20; byte *pbVar21; byte *pbVar22; undefined1 **ppuVar23; byte bVar24; byte *pbVar25; bool bVar26; int local_1d4; undefined4 local_1d0; int local_19c; undefined1 **local_198; uint local_184; undefined1 *local_180 [4]; undefined1 **local_170; undefined1 local_16c; undefined1 auStack_16b [256]; undefined1 auStack_6b [3]; undefined1 **local_68; int local_64 [4]; byte *local_54; byte *local_50; int local_4c [4]; int local_3c; byte *local_38; int local_34 [4]; int *local_24; int *local_20; locale alStack_1c [4]; undefined1 auStack_18 [4]; this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); piVar4 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); uVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2d); uVar6 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2b); iVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,0x20); iVar8 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); if (param_4 == 1) { local_1d4 = (**(code **)(*piVar4 + 8))(); local_1d0 = (**(code **)(*piVar4 + 0xc))(); (**(code **)(*piVar4 + 0x10))(local_34); local_19c = (**(code **)(*piVar4 + 0x20))(piVar4,*(code **)(*piVar4 + 0x20),local_34); (**(code **)(*piVar4 + 0x14))(local_4c,piVar4,*(code **)(*piVar4 + 0x14),local_34); } else { local_1d4 = (**(code **)(*piVar3 + 8))(); local_1d0 = (**(code **)(*piVar3 + 0xc))(); (**(code **)(*piVar3 + 0x10))(local_34); local_19c = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); (**(code **)(*piVar3 + 0x14))(local_4c,piVar3,*(code **)(*piVar3 + 0x14),local_34); } ppuVar9 = *(undefined1 ***)(param_7 + 0x118); ppuVar23 = *(undefined1 ***)(param_7 + 0x10); if (ppuVar9 == ppuVar23) { *param_1 = param_2; param_1[1] = param_3; goto LAB_0003d75e; } uVar19 = (uint)*(byte *)ppuVar9; ppuVar17 = (undefined1 **)((int)ppuVar9 + 1); if (uVar19 != uVar5) { ppuVar17 = ppuVar9; } if (param_4 == 1) { if (uVar19 == uVar5) { (**(code **)(*piVar4 + 0x1c))(local_64); } else { (**(code **)(*piVar4 + 0x18))(local_64); } } else if (uVar19 == uVar5) { (**(code **)(*piVar3 + 0x1c))(local_64); } else { (**(code **)(*piVar3 + 0x18))(local_64); } local_198 = ppuVar23; if (param_8 == 1) { if (ppuVar17 != ppuVar23) { ppuVar9 = ppuVar17; do { local_198 = ppuVar9; if (-1 < (int)((uint)*(byte *)(piVar2[3] + (uint)*(byte *)ppuVar9 * 4) << 0x19)) break; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); local_198 = ppuVar23; } while (ppuVar23 != ppuVar9); } if (local_198 != ppuVar17) goto LAB_0003d7f8; *param_1 = param_2; param_1[1] = param_3; } else { LAB_0003d7f8: __aeabi_memclr(auStack_16b,0x100); local_16c = 0; local_180[0] = auStack_6b; local_170 = (undefined1 **)&local_16c; local_68 = (undefined1 **)&local_16c; if (local_20 != local_24) { if (ppuVar17 != local_198) { FUN_0003dfb8(local_180,ppuVar17,local_198,auStack_18); } FUN_000500f4(local_180,(byte *)((int)local_170 + (-(int)local_68 - local_19c)),local_34, local_1d0,uVar6,uVar5,0); local_198 = local_170; ppuVar17 = local_68; } pbVar25 = local_54 + 1; if (local_19c == 0) { pbVar25 = local_54; } iVar14 = (int)local_198 - (int)ppuVar17; pbVar25 = pbVar25 + (iVar14 - (int)local_50); uVar15 = *(uint *)(param_5 + 4) & 0x200; pbVar20 = *(byte **)(param_5 + 0x1c); if (uVar15 != 0) { pbVar25 = pbVar25 + (local_3c - (int)local_38); } if (param_4 == 1) { if (uVar19 == uVar5) { local_184 = (**(code **)(*piVar4 + 0x28))(); } else { local_184 = (**(code **)(*piVar4 + 0x24))(); } } else if (uVar19 == uVar5) { local_184 = (**(code **)(*piVar3 + 0x28))(piVar3); } else { local_184 = (**(code **)(*piVar3 + 0x24))(piVar3); } pbVar25 = pbVar25 + ((local_184 & 0xff00) == 0x100 || (local_184 & 0xff0000) == 0x10000); iVar18 = (int)pbVar20 - (int)pbVar25; if (pbVar20 <= pbVar25) { iVar18 = 0; } uVar5 = *(uint *)(param_5 + 4); uVar1 = (undefined1)param_6; if ((iVar18 != 0) && ((uVar5 & 5) == 0)) { uVar19 = param_3; if (0 < iVar18) { pbVar21 = pbVar20 + (1 - (int)pbVar25); uVar16 = param_3; do { uVar19 = 0; if ((uVar16 & 0xff) != 0) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = uVar1; iVar11 = param_6; } else { iVar11 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar19 = 1; if (iVar11 == -1) { uVar19 = 0; } } pbVar21 = pbVar21 + -1; uVar16 = uVar19; } while (1 < (int)pbVar21); } param_3 = uVar19 & 0xff | param_3 & 0xffffff00; } pbVar21 = (byte *)((int)local_198 + (1 - (int)ppuVar17)); iVar11 = 0; do { uVar19 = param_3; switch(*(undefined1 *)((int)local_180 + iVar11 + -4)) { case 1: uVar19 = 0; if ((param_3 & 0xff) != 0) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = (char)iVar7; iVar12 = iVar7; } else { iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); } uVar19 = 1; if (iVar12 == -1) { uVar19 = 0; } } param_3 = param_3 & 0xffffff00 | uVar19; case 0: if (iVar18 != 0 && (uVar5 & 7) == 4) { pbVar22 = pbVar20 + (1 - (int)pbVar25); uVar19 = param_3; uVar16 = param_3; if (0 < iVar18) { do { uVar19 = 0; if ((uVar16 & 0xff) != 0) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = uVar1; iVar12 = param_6; } else { iVar12 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar19 = 1; if (iVar12 == -1) { uVar19 = 0; } } pbVar22 = pbVar22 + -1; uVar16 = uVar19; } while (1 < (int)pbVar22); } param_3 = param_3 & 0xffffff00 | uVar19 & 0xff; } break; case 2: if (uVar15 != 0) { if (0 < local_3c - (int)local_38) { iVar12 = (local_3c + 1) - (int)local_38; uVar16 = param_3; pbVar22 = local_38; do { uVar19 = 0; if ((uVar16 & 0xff) != 0) { bVar24 = *pbVar22; uVar16 = (uint)bVar24; pbVar13 = (byte *)param_2[5]; if (pbVar13 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar13 + 1); *pbVar13 = bVar24; } else { uVar16 = (**(code **)(*param_2 + 0x34))(param_2); } uVar19 = 1; if (uVar16 == 0xffffffff) { uVar19 = 0; } } iVar12 = iVar12 + -1; pbVar22 = pbVar22 + 1; uVar16 = uVar19; } while (1 < iVar12); } LAB_0003dbac: param_3 = param_3 & 0xffffff00 | uVar19 & 0xff; } break; case 3: if (local_50 != local_54) { uVar19 = 0; if ((param_3 & 0xff) != 0) { bVar24 = *local_50; uVar16 = (uint)bVar24; pbVar22 = (byte *)param_2[5]; if (pbVar22 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar22 + 1); *pbVar22 = bVar24; } else { uVar16 = (**(code **)(*param_2 + 0x34))(param_2); } uVar19 = 1; if (uVar16 == 0xffffffff) { uVar19 = 0; } } param_3 = param_3 & 0xffffff00 | uVar19; } break; case 4: if (local_19c == 0) { pbVar22 = pbVar21; uVar16 = param_3; ppuVar9 = ppuVar17; if (0 < iVar14) { do { uVar19 = 0; if ((uVar16 & 0xff) != 0) { bVar24 = *(byte *)ppuVar9; uVar16 = (uint)bVar24; pbVar13 = (byte *)param_2[5]; if (pbVar13 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar13 + 1); *pbVar13 = bVar24; } else { uVar16 = (**(code **)(*param_2 + 0x34))(param_2); } uVar19 = 1; if (uVar16 == 0xffffffff) { uVar19 = 0; } } pbVar22 = pbVar22 + -1; uVar16 = uVar19; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); } while (1 < (int)pbVar22); } goto LAB_0003dbac; } if (local_19c < iVar14) { pbVar22 = (byte *)((int)local_198 + ((1 - local_19c) - (int)ppuVar17)); uVar16 = param_3; ppuVar9 = ppuVar17; if (0 < (int)((int)local_198 + (-(int)ppuVar17 - local_19c))) { do { uVar19 = 0; if ((uVar16 & 0xff) != 0) { bVar24 = *(byte *)ppuVar9; uVar16 = (uint)bVar24; pbVar13 = (byte *)param_2[5]; if (pbVar13 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar13 + 1); *pbVar13 = bVar24; } else { uVar16 = (**(code **)(*param_2 + 0x34))(param_2); } uVar19 = 1; if (uVar16 == 0xffffffff) { uVar19 = 0; } } pbVar22 = pbVar22 + -1; uVar16 = uVar19; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); } while (1 < (int)pbVar22); } bVar24 = 0; if ((uVar19 & 0xff) != 0) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = (char)local_1d4; iVar12 = local_1d4; } else { iVar12 = (**(code **)(*param_2 + 0x34))(param_2,local_1d4); } bVar24 = 1; if (iVar12 == -1) { bVar24 = 0; } } iVar12 = local_19c; if (0 < local_19c) { do { bVar26 = bVar24 != 0; bVar24 = 0; if (bVar26) { bVar24 = *(byte *)((int)local_198 - iVar12); uVar19 = (uint)bVar24; pbVar22 = (byte *)param_2[5]; if (pbVar22 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar22 + 1); *pbVar22 = bVar24; } else { uVar19 = (**(code **)(*param_2 + 0x34))(param_2); } bVar24 = 1; if (uVar19 == 0xffffffff) { bVar24 = 0; } } bVar26 = 1 < iVar12; iVar12 = iVar12 + -1; } while (bVar26); } param_3 = param_3 & 0xffffff00 | (uint)bVar24; } else { bVar24 = 0; if ((param_3 & 0xff) != 0) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = (char)iVar8; } else { iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); if (iVar12 == -1) goto LAB_0003dd1a; } puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = (char)local_1d4; iVar12 = local_1d4; } else { iVar12 = (**(code **)(*param_2 + 0x34))(param_2,local_1d4); } bVar24 = 1; if (iVar12 == -1) { bVar24 = 0; } } LAB_0003dd1a: pbVar22 = (byte *)((int)local_198 + (-(int)ppuVar17 - local_19c)); if (local_19c != iVar14) { do { bVar26 = bVar24 != 0; bVar24 = 0; if (bVar26) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = (char)iVar8; iVar12 = iVar8; } else { iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); } bVar24 = 1; if (iVar12 == -1) { bVar24 = 0; } } pbVar22 = pbVar22 + 1; } while (pbVar22 != (byte *)0x0); } pbVar22 = pbVar21; ppuVar9 = ppuVar17; if (0 < iVar14) { do { bVar26 = bVar24 != 0; bVar24 = 0; if (bVar26) { bVar24 = *(byte *)ppuVar9; uVar19 = (uint)bVar24; pbVar13 = (byte *)param_2[5]; if (pbVar13 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar13 + 1); *pbVar13 = bVar24; } else { uVar19 = (**(code **)(*param_2 + 0x34))(param_2); } bVar24 = 1; if (uVar19 == 0xffffffff) { bVar24 = 0; } } pbVar22 = pbVar22 + -1; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); } while (1 < (int)pbVar22); } param_3 = param_3 & 0xffffff00 | (uint)bVar24; } } bVar26 = iVar11 < 3; iVar11 = iVar11 + 1; } while (bVar26); if (1 < (uint)((int)local_54 - (int)local_50)) { pbVar21 = local_50 + 1; uVar19 = param_3; if (0 < (int)local_54 - (int)pbVar21) { pbVar22 = local_54 + (1 - (int)pbVar21); uVar15 = param_3; do { uVar19 = 0; if ((uVar15 & 0xff) != 0) { bVar24 = *pbVar21; uVar15 = (uint)bVar24; pbVar13 = (byte *)param_2[5]; if (pbVar13 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar13 + 1); *pbVar13 = bVar24; } else { uVar15 = (**(code **)(*param_2 + 0x34))(param_2); } uVar19 = 1; if (uVar15 == 0xffffffff) { uVar19 = 0; } } pbVar22 = pbVar22 + -1; pbVar21 = pbVar21 + 1; uVar15 = uVar19; } while (1 < (int)pbVar22); } param_3 = uVar19 & 0xff | param_3 & 0xffffff00; } if ((iVar18 != 0) && ((uVar5 & 6) == 0)) { uVar5 = param_3; if (0 < iVar18) { pbVar20 = pbVar20 + (1 - (int)pbVar25); uVar19 = param_3; do { uVar5 = 0; if ((uVar19 & 0xff) != 0) { puVar10 = (undefined1 *)param_2[5]; if (puVar10 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar10 + 1); *puVar10 = uVar1; iVar7 = param_6; } else { iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar5 = 1; if (iVar7 == -1) { uVar5 = 0; } } pbVar20 = pbVar20 + -1; uVar19 = uVar5; } while (1 < (int)pbVar20); } param_3 = uVar5 & 0xff | param_3 & 0xffffff00; } *param_1 = param_2; param_1[1] = param_3; if (((local_68 != local_180) && (local_68 != (undefined1 **)0x0)) && ((undefined1 **)&local_16c != local_68)) { if ((uint)((int)local_180[0] - (int)local_68) < 0x81) { std::__node_alloc::_M_deallocate(local_68,(int)local_180[0] - (int)local_68); } else { operator_delete(local_68); } } } if ((local_50 != (byte *)local_64) && (local_50 != (byte *)0x0)) { if ((uint)(local_64[0] - (int)local_50) < 0x81) { std::__node_alloc::_M_deallocate(local_50,local_64[0] - (int)local_50); } else { operator_delete(local_50); } } LAB_0003d75e: if ((local_38 != (byte *)local_4c) && (local_38 != (byte *)0x0)) { if ((uint)(local_4c[0] - (int)local_38) < 0x81) { std::__node_alloc::_M_deallocate(local_38,local_4c[0] - (int)local_38); } else { operator_delete(local_38); } } if ((local_20 != local_34) && (local_20 != (int *)0x0)) { if ((uint)(local_34[0] - (int)local_20) < 0x81) { std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); } else { operator_delete(local_20); } } std::locale::~locale(alStack_1c); return; } ### FUNC FUN_0003dfb8 @ 0003dfb8 int * FUN_0003dfb8(int *param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; int *piVar2; int *piVar3; int *piVar4; undefined1 *puVar5; undefined1 *puVar6; undefined1 *puVar7; int *piVar8; int *local_1c; if (param_2 != param_3) { puVar1 = param_3 + -(int)param_2; piVar4 = (int *)param_1[0x46]; piVar2 = param_1 + 0x46; if (piVar4 == param_1) { local_1c = (int *)param_1[4]; puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)local_1c)); } else { local_1c = (int *)param_1[4]; puVar6 = (undefined1 *)(*param_1 - (int)local_1c); } piVar8 = param_1 + 4; if (puVar1 < puVar6) { *(undefined1 *)local_1c = *param_2; param_2 = param_2 + 1; if (param_2 != param_3) { __aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2); } puVar1[*piVar8] = 0; *piVar8 = (int)(puVar1 + *piVar8); } else { puVar6 = (undefined1 *)((int)local_1c - (int)piVar4); if ((undefined1 *)(-2 - (int)puVar6) < puVar1) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } puVar7 = puVar6; if (puVar6 <= puVar1) { puVar7 = puVar1; } puVar7 = puVar6 + (int)puVar7; puVar5 = (undefined1 *)0xfffffffe; if (puVar6 <= puVar7 + 1) { puVar5 = puVar7 + 1; } puVar6 = (undefined1 *)0xfffffffe; if (puVar7 != (undefined1 *)0xfffffffe) { puVar6 = puVar5; } if ((uint)puVar6 >> 1 < 0x81) { piVar3 = param_1 + 5; } else { piVar3 = (int *)operator_new((uint)puVar6); local_1c = (int *)*piVar8; piVar4 = (int *)*piVar2; } piVar8 = piVar3; if (local_1c != piVar4) { __aeabi_memcpy(piVar3,piVar4,(int)local_1c - (int)piVar4); piVar8 = (int *)((int)piVar3 + ((int)local_1c - (int)piVar4)); } __aeabi_memcpy(piVar8,param_2); *(undefined1 *)((int)piVar8 + (int)puVar1) = 0; piVar4 = (int *)*piVar2; if (((piVar4 != param_1) && (piVar4 != (int *)0x0)) && (param_1 + 5 != piVar4)) { if ((uint)(*param_1 - (int)piVar4) < 0x81) { std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4); } else { operator_delete(piVar4); } } param_1[4] = (int)((int)piVar8 + (int)puVar1); *param_1 = (int)((int)piVar3 + (int)puVar6); *piVar2 = (int)piVar3; } } return param_1; } ### FUNC FUN_0003e0e0 @ 0003e0e0 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_0003e0e0(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, int param_7,int param_8) { undefined1 uVar1; locale *this; int *piVar2; int *piVar3; int *piVar4; uint uVar5; undefined4 uVar6; int iVar7; int iVar8; undefined1 **ppuVar9; byte *pbVar10; int iVar11; undefined1 *puVar12; int iVar13; int iVar14; byte *pbVar15; int iVar16; uint uVar17; uint uVar18; undefined1 **ppuVar19; uint uVar20; undefined1 **ppuVar21; byte *pbVar22; byte *pbVar23; byte *pbVar24; byte bVar25; bool bVar26; int local_1c8; undefined4 local_1b4; int local_1a0; uint local_198; undefined1 **local_194; uint local_184; undefined1 *local_180 [4]; undefined1 **local_170; undefined1 local_16c; undefined1 auStack_16b [256]; undefined1 auStack_6b [3]; undefined1 **local_68; int local_64 [4]; byte *local_54; byte *local_50; int local_4c [4]; int local_3c; byte *local_38; int local_34 [4]; int *local_24; int *local_20; locale alStack_1c [4]; undefined1 auStack_18 [4]; this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); piVar4 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); uVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2d); uVar6 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2b); iVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,0x20); iVar8 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); if (param_4 == 1) { local_1c8 = (**(code **)(*piVar4 + 8))(piVar4); local_1b4 = (**(code **)(*piVar4 + 0xc))(piVar4); (**(code **)(*piVar4 + 0x10))(local_34,piVar4); local_1a0 = (**(code **)(*piVar4 + 0x20))(piVar4); (**(code **)(*piVar4 + 0x14))(local_4c,piVar4); } else { local_1c8 = (**(code **)(*piVar3 + 8))(); local_1b4 = (**(code **)(*piVar3 + 0xc))(); (**(code **)(*piVar3 + 0x10))(local_34); local_1a0 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); (**(code **)(*piVar3 + 0x14))(local_4c,piVar3,*(code **)(*piVar3 + 0x14),local_34); } ppuVar19 = *(undefined1 ***)(param_7 + 0x10); ppuVar9 = *(undefined1 ***)(param_7 + 0x14); if (ppuVar9 == ppuVar19) { *param_1 = param_2; param_1[1] = param_3; goto LAB_0003e20c; } uVar20 = (uint)*(byte *)ppuVar9; ppuVar21 = (undefined1 **)((int)ppuVar9 + 1); if (uVar20 != uVar5) { ppuVar21 = ppuVar9; } if (param_4 == 1) { if (uVar20 == uVar5) { (**(code **)(*piVar4 + 0x1c))(local_64,piVar4); } else { (**(code **)(*piVar4 + 0x18))(local_64,piVar4); } } else if (uVar20 == uVar5) { (**(code **)(*piVar3 + 0x1c))(local_64); } else { (**(code **)(*piVar3 + 0x18))(local_64); } local_194 = ppuVar19; if (param_8 == 1) { if (ppuVar21 != ppuVar19) { ppuVar9 = ppuVar21; do { local_194 = ppuVar9; if (-1 < (int)((uint)*(byte *)(piVar2[3] + (uint)*(byte *)ppuVar9 * 4) << 0x19)) break; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); local_194 = ppuVar19; } while (ppuVar19 != ppuVar9); } if (local_194 != ppuVar21) goto LAB_0003e2b2; *param_1 = param_2; param_1[1] = param_3; } else { LAB_0003e2b2: __aeabi_memclr(auStack_16b,0x100); local_16c = 0; local_180[0] = auStack_6b; local_170 = (undefined1 **)&local_16c; local_68 = (undefined1 **)&local_16c; if (local_20 != local_24) { if (ppuVar21 != local_194) { FUN_0003dfb8(local_180,ppuVar21,local_194,auStack_18); } FUN_000500f4(local_180,(byte *)((int)local_170 + (-(int)local_68 - local_1a0)),local_34, local_1b4,uVar6,uVar5,0); local_194 = local_170; ppuVar21 = local_68; } pbVar22 = local_54 + 1; if (local_1a0 == 0) { pbVar22 = local_54; } iVar16 = (int)local_194 - (int)ppuVar21; pbVar22 = pbVar22 + (iVar16 - (int)local_50); uVar17 = *(uint *)(param_5 + 4) & 0x200; pbVar10 = *(byte **)(param_5 + 0x1c); if (uVar17 != 0) { pbVar22 = pbVar22 + (local_3c - (int)local_38); } if (param_4 == 1) { if (uVar20 == uVar5) { local_184 = (**(code **)(*piVar4 + 0x28))(piVar4); } else { local_184 = (**(code **)(*piVar4 + 0x24))(piVar4); } } else if (uVar20 == uVar5) { local_184 = (**(code **)(*piVar3 + 0x28))(); } else { local_184 = (**(code **)(*piVar3 + 0x24))(); } pbVar22 = pbVar22 + ((local_184 & 0xff00) == 0x100 || (local_184 & 0xff0000) == 0x10000); iVar11 = (int)pbVar10 - (int)pbVar22; if (pbVar10 <= pbVar22) { iVar11 = 0; } uVar5 = *(uint *)(param_5 + 4); uVar1 = (undefined1)param_6; local_198 = param_3; if ((iVar11 != 0) && ((uVar5 & 5) == 0)) { uVar20 = param_3; if (0 < iVar11) { pbVar23 = pbVar10 + (1 - (int)pbVar22); uVar18 = param_3; do { uVar20 = 0; if ((uVar18 & 0xff) != 0) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = uVar1; iVar13 = param_6; } else { iVar13 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar20 = 1; if (iVar13 == -1) { uVar20 = 0; } } pbVar23 = pbVar23 + -1; uVar18 = uVar20; } while (1 < (int)pbVar23); } local_198 = uVar20 & 0xff | param_3 & 0xffffff00; } pbVar23 = (byte *)((int)local_194 + (1 - (int)ppuVar21)); iVar13 = 0; do { uVar20 = local_198; switch(*(undefined1 *)((int)local_180 + iVar13 + -4)) { case 1: uVar20 = 0; if ((local_198 & 0xff) != 0) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = (char)iVar7; iVar14 = iVar7; } else { iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); } uVar20 = 1; if (iVar14 == -1) { uVar20 = 0; } } local_198 = local_198 & 0xffffff00 | uVar20; case 0: if (iVar11 != 0 && (uVar5 & 7) == 4) { pbVar24 = pbVar10 + (1 - (int)pbVar22); uVar20 = local_198; uVar18 = local_198; if (0 < iVar11) { do { uVar20 = 0; if ((uVar18 & 0xff) != 0) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = uVar1; iVar14 = param_6; } else { iVar14 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar20 = 1; if (iVar14 == -1) { uVar20 = 0; } } pbVar24 = pbVar24 + -1; uVar18 = uVar20; } while (1 < (int)pbVar24); } local_198 = local_198 & 0xffffff00 | uVar20 & 0xff; } break; case 2: if (uVar17 != 0) { if (0 < local_3c - (int)local_38) { iVar14 = (local_3c + 1) - (int)local_38; uVar18 = local_198; pbVar24 = local_38; do { uVar20 = 0; if ((uVar18 & 0xff) != 0) { bVar25 = *pbVar24; uVar18 = (uint)bVar25; pbVar15 = (byte *)param_2[5]; if (pbVar15 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar15 + 1); *pbVar15 = bVar25; } else { uVar18 = (**(code **)(*param_2 + 0x34))(param_2); } uVar20 = 1; if (uVar18 == 0xffffffff) { uVar20 = 0; } } iVar14 = iVar14 + -1; pbVar24 = pbVar24 + 1; uVar18 = uVar20; } while (1 < iVar14); } LAB_0003e66e: local_198 = local_198 & 0xffffff00 | uVar20 & 0xff; } break; case 3: if (local_50 != local_54) { uVar20 = 0; if ((local_198 & 0xff) != 0) { bVar25 = *local_50; uVar18 = (uint)bVar25; pbVar24 = (byte *)param_2[5]; if (pbVar24 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar24 + 1); *pbVar24 = bVar25; } else { uVar18 = (**(code **)(*param_2 + 0x34))(param_2); } uVar20 = 1; if (uVar18 == 0xffffffff) { uVar20 = 0; } } local_198 = local_198 & 0xffffff00 | uVar20; } break; case 4: if (local_1a0 == 0) { pbVar24 = pbVar23; uVar18 = local_198; ppuVar9 = ppuVar21; if (0 < iVar16) { do { uVar20 = 0; if ((uVar18 & 0xff) != 0) { bVar25 = *(byte *)ppuVar9; uVar18 = (uint)bVar25; pbVar15 = (byte *)param_2[5]; if (pbVar15 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar15 + 1); *pbVar15 = bVar25; } else { uVar18 = (**(code **)(*param_2 + 0x34))(param_2); } uVar20 = 1; if (uVar18 == 0xffffffff) { uVar20 = 0; } } pbVar24 = pbVar24 + -1; uVar18 = uVar20; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); } while (1 < (int)pbVar24); } goto LAB_0003e66e; } if (local_1a0 < iVar16) { pbVar24 = (byte *)((int)local_194 + ((1 - local_1a0) - (int)ppuVar21)); uVar18 = local_198; ppuVar9 = ppuVar21; if (0 < (int)((int)local_194 + (-(int)ppuVar21 - local_1a0))) { do { uVar20 = 0; if ((uVar18 & 0xff) != 0) { bVar25 = *(byte *)ppuVar9; uVar18 = (uint)bVar25; pbVar15 = (byte *)param_2[5]; if (pbVar15 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar15 + 1); *pbVar15 = bVar25; } else { uVar18 = (**(code **)(*param_2 + 0x34))(param_2); } uVar20 = 1; if (uVar18 == 0xffffffff) { uVar20 = 0; } } pbVar24 = pbVar24 + -1; uVar18 = uVar20; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); } while (1 < (int)pbVar24); } bVar25 = 0; if ((uVar20 & 0xff) != 0) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = (char)local_1c8; iVar14 = local_1c8; } else { iVar14 = (**(code **)(*param_2 + 0x34))(param_2,local_1c8); } bVar25 = 1; if (iVar14 == -1) { bVar25 = 0; } } iVar14 = local_1a0; if (0 < local_1a0) { do { bVar26 = bVar25 != 0; bVar25 = 0; if (bVar26) { bVar25 = *(byte *)((int)local_194 - iVar14); uVar20 = (uint)bVar25; pbVar24 = (byte *)param_2[5]; if (pbVar24 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar24 + 1); *pbVar24 = bVar25; } else { uVar20 = (**(code **)(*param_2 + 0x34))(param_2); } bVar25 = 1; if (uVar20 == 0xffffffff) { bVar25 = 0; } } bVar26 = 1 < iVar14; iVar14 = iVar14 + -1; } while (bVar26); } local_198 = local_198 & 0xffffff00 | (uint)bVar25; } else { bVar25 = 0; if ((local_198 & 0xff) != 0) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = (char)iVar8; } else { iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); if (iVar14 == -1) goto LAB_0003e7dc; } puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = (char)local_1c8; iVar14 = local_1c8; } else { iVar14 = (**(code **)(*param_2 + 0x34))(param_2,local_1c8); } bVar25 = 1; if (iVar14 == -1) { bVar25 = 0; } } LAB_0003e7dc: pbVar24 = (byte *)((int)local_194 + (-(int)ppuVar21 - local_1a0)); if (local_1a0 != iVar16) { do { bVar26 = bVar25 != 0; bVar25 = 0; if (bVar26) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = (char)iVar8; iVar14 = iVar8; } else { iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar8); } bVar25 = 1; if (iVar14 == -1) { bVar25 = 0; } } pbVar24 = pbVar24 + 1; } while (pbVar24 != (byte *)0x0); } pbVar24 = pbVar23; ppuVar9 = ppuVar21; if (0 < iVar16) { do { bVar26 = bVar25 != 0; bVar25 = 0; if (bVar26) { bVar25 = *(byte *)ppuVar9; uVar20 = (uint)bVar25; pbVar15 = (byte *)param_2[5]; if (pbVar15 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar15 + 1); *pbVar15 = bVar25; } else { uVar20 = (**(code **)(*param_2 + 0x34))(param_2); } bVar25 = 1; if (uVar20 == 0xffffffff) { bVar25 = 0; } } pbVar24 = pbVar24 + -1; ppuVar9 = (undefined1 **)((int)ppuVar9 + 1); } while (1 < (int)pbVar24); } local_198 = local_198 & 0xffffff00 | (uint)bVar25; } } bVar26 = iVar13 < 3; iVar13 = iVar13 + 1; } while (bVar26); if (1 < (uint)((int)local_54 - (int)local_50)) { pbVar23 = local_50 + 1; uVar20 = local_198; if (0 < (int)local_54 - (int)pbVar23) { pbVar24 = local_54 + (1 - (int)pbVar23); uVar17 = local_198; do { uVar20 = 0; if ((uVar17 & 0xff) != 0) { bVar25 = *pbVar23; uVar17 = (uint)bVar25; pbVar15 = (byte *)param_2[5]; if (pbVar15 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar15 + 1); *pbVar15 = bVar25; } else { uVar17 = (**(code **)(*param_2 + 0x34))(param_2); } uVar20 = 1; if (uVar17 == 0xffffffff) { uVar20 = 0; } } pbVar24 = pbVar24 + -1; pbVar23 = pbVar23 + 1; uVar17 = uVar20; } while (1 < (int)pbVar24); } local_198 = uVar20 & 0xff | local_198 & 0xffffff00; } if ((iVar11 != 0) && ((uVar5 & 6) == 0)) { uVar5 = local_198; if (0 < iVar11) { pbVar10 = pbVar10 + (1 - (int)pbVar22); uVar20 = local_198; do { uVar5 = 0; if ((uVar20 & 0xff) != 0) { puVar12 = (undefined1 *)param_2[5]; if (puVar12 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar12 + 1); *puVar12 = uVar1; iVar7 = param_6; } else { iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar5 = 1; if (iVar7 == -1) { uVar5 = 0; } } pbVar10 = pbVar10 + -1; uVar20 = uVar5; } while (1 < (int)pbVar10); } local_198 = uVar5 & 0xff | local_198 & 0xffffff00; } *param_1 = param_2; param_1[1] = local_198; if (((local_68 != local_180) && (local_68 != (undefined1 **)0x0)) && ((undefined1 **)&local_16c != local_68)) { if ((uint)((int)local_180[0] - (int)local_68) < 0x81) { std::__node_alloc::_M_deallocate(local_68,(int)local_180[0] - (int)local_68); } else { operator_delete(local_68); } } } if ((local_50 != (byte *)local_64) && (local_50 != (byte *)0x0)) { if ((uint)(local_64[0] - (int)local_50) < 0x81) { std::__node_alloc::_M_deallocate(local_50,local_64[0] - (int)local_50); } else { operator_delete(local_50); } } LAB_0003e20c: if ((local_38 != (byte *)local_4c) && (local_38 != (byte *)0x0)) { if ((uint)(local_4c[0] - (int)local_38) < 0x81) { std::__node_alloc::_M_deallocate(local_38,local_4c[0] - (int)local_38); } else { operator_delete(local_38); } } if ((local_20 != local_34) && (local_20 != (int *)0x0)) { if ((uint)(local_34[0] - (int)local_20) < 0x81) { std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); } else { operator_delete(local_20); } } std::locale::~locale(alStack_1c); return; } ### FUNC FUN_0003eb0c @ 0003eb0c void FUN_0003eb0c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_0003f01c(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003eb3a @ 0003eb3a void FUN_0003eb3a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_0003f894(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003eb68 @ 0003eb68 void FUN_0003eb68(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_0003fc94(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003eb96 @ 0003eb96 void FUN_0003eb96(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_00040090(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003ebc4 @ 0003ebc4 void FUN_0003ebc4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_0004048c(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003ebf2 @ 0003ebf2 void FUN_0003ebf2(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_00040dac(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003ec20 @ 0003ec20 void FUN_0003ec20(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,byte *param_8, undefined4 *param_9) { undefined4 local_28 [2]; undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; local_1c = param_6; local_20 = param_5; local_18 = param_3; local_14 = param_4; FUN_00040f24(param_1,&local_18,&local_20,param_7,param_8,local_28,0); if (-1 < (int)((uint)*param_8 << 0x1d)) { *param_9 = local_28[0]; } return; } ### FUNC FUN_0003ec5a @ 0003ec5a void FUN_0003ec5a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_0004139c(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003ec88 @ 0003ec88 void FUN_0003ec88(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_00041514(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003ecb6 @ 0003ecb6 void FUN_0003ecb6(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9) { undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_14 = param_6; local_18 = param_5; local_10 = param_3; local_c = param_4; FUN_00040f24(param_1,&local_10,&local_18,param_7,param_8,param_9,0); return; } ### FUNC FUN_0003ece4 @ 0003ece4 void FUN_0003ece4(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 param_6) { bool bVar1; bool bVar2; locale *this; int *piVar3; uint uVar4; int iVar5; bool bVar6; uint uVar7; bool bVar8; int local_44 [4]; int local_34; int *local_30; int local_2c [4]; int local_1c; int *local_18; this = (locale *)std::locale::locale((locale *)local_2c,(locale *)(param_4 + 0x20)); piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_2c); (**(code **)(*piVar3 + 0x14))(local_2c,piVar3); (**(code **)(*piVar3 + 0x18))(local_44,piVar3); bVar1 = true; uVar7 = 0; bVar8 = true; while( true ) { piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) goto code_r0x0003ee7a; if (*(char *)((int)param_2 + 6) == '\0') { piVar3 = (int *)*param_2; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_2 + 1); } bVar6 = false; if (bVar1) { bVar6 = (uVar4 & 0xff) == (uint)*(byte *)((int)local_18 + uVar7); } bVar1 = bVar6; bVar6 = false; if ((bVar8) && (bVar6 = true, (uVar4 & 0xff) != (uint)*(byte *)((int)local_30 + uVar7))) { bVar6 = false; } uVar4 = uVar7 + 1; bVar2 = false; bVar8 = false; if (!(bool)(bVar1 | bVar6)) goto LAB_0003ee90; if ((bVar1) && ((uint)(local_1c - (int)local_18) <= uVar4)) break; if ((bVar6) && (bVar2 = bVar1, bVar8 = true, (uint)(local_34 - (int)local_30) <= uVar4)) goto LAB_0003ee90; piVar3 = (int *)*param_2; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_2 + 6) = 0; uVar7 = uVar4; bVar8 = bVar6; } bVar2 = true; bVar8 = bVar6; LAB_0003ee90: uVar7 = uVar7 + 1; piVar3 = (int *)*param_2; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_2 + 6) = 0; bVar1 = bVar2; code_r0x0003ee7a: bVar1 = bVar1 && (uint)(local_1c - (int)local_18) <= uVar7; bVar6 = false; if ((bVar8) && (bVar6 = true, uVar7 < (uint)(local_34 - (int)local_30))) { bVar6 = false; } if ((bVar1) || (bVar6)) { *param_5 = 0; *(bool *)param_6 = bVar1; } else { *param_5 = 4; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar7 = (uint)*(byte *)piVar3[2]; } else { uVar7 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar7; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar7 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar7 = (uint)*(byte *)piVar3[2]; } else { uVar7 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar7; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar7 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; if ((local_30 != local_44) && (local_30 != (int *)0x0)) { if ((uint)(local_44[0] - (int)local_30) < 0x81) { std::__node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30); } else { operator_delete(local_30); } } if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { if (0x80 < (uint)(local_2c[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } return; } ### FUNC FUN_0003f01c @ 0003f01c void FUN_0003f01c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { uVar4 = 4; if ((uVar2 & 1) != 0) { uVar4 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar5 = FUN_0003f68a(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar4 = 0; if (iVar5 == 0) { uVar4 = 4; } } *param_5 = uVar4; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar2; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; std::locale::~locale(alStack_18); return; } ### FUNC FUN_0003f220 @ 0003f220 uint FUN_0003f220(int *param_1,int *param_2,uint param_3,int *param_4) { bool bVar1; undefined4 uVar2; int iVar3; uint uVar4; int *piVar5; uint uVar6; uint uVar7; uint local_24; byte local_1c; byte local_1b; byte local_1a; byte local_19; byte local_18; uVar2 = std::priv::__narrow_atoms(); iVar3 = std::priv::__narrow_atoms(); (**(code **)(*param_4 + 0x1c))(param_4,uVar2,iVar3 + 5,&local_1c); if (*(char *)((int)param_1 + 6) == '\0') { piVar5 = (int *)*param_1; if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } if ((uVar4 & 0xff) == (uint)local_1b) { piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; uVar7 = 2; } else { (**(code **)(*piVar5 + 0x24))(); uVar7 = 2; } LAB_0003f2c8: bVar1 = false; *(undefined1 *)((int)param_1 + 6) = 0; } else { uVar7 = 0; bVar1 = true; if ((uVar4 & 0xff) == (uint)local_1c) { piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; } else { (**(code **)(*piVar5 + 0x24))(); } uVar7 = 0; goto LAB_0003f2c8; } } param_3 = param_3 & 0x38; local_24 = 0; if (param_3 == 0x20) { uVar4 = 0x20; goto LAB_0003f67e; } if (param_3 != 0x10) { if (param_3 == 8) { uVar4 = 0x28; goto LAB_0003f67e; } piVar5 = (int *)*param_1; if ((piVar5 != (int *)0x0) && (!bVar1)) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar5 = (int *)*param_2; if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } uVar4 = 0x28; if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) goto LAB_0003f67e; if (*(char *)((int)param_1 + 6) == '\0') { piVar5 = (int *)*param_1; if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } else { uVar6 = (uint)*(byte *)(param_1 + 1); } if ((uVar6 & 0xff) != (uint)local_1a) goto LAB_0003f67e; piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; *(undefined1 *)((int)param_1 + 6) = 0; LAB_0003f50a: if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { (**(code **)(*piVar5 + 0x24))(); *(undefined1 *)((int)param_1 + 6) = 0; piVar5 = (int *)*param_1; if (piVar5 != (int *)0x0) goto LAB_0003f50a; } piVar5 = (int *)*param_2; if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } local_24 = 1; if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) { uVar4 = 0x20; } else { if (*(char *)((int)param_1 + 6) == '\0') { piVar5 = (int *)*param_1; if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } else { uVar6 = (uint)*(byte *)(param_1 + 1); } if (((uVar6 & 0xff) == (uint)local_19) || (uVar4 = 0x20, (uVar6 & 0xff) == (uint)local_18)) { piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; } else { (**(code **)(*piVar5 + 0x24))(); } local_24 = 0; *(undefined1 *)((int)param_1 + 6) = 0; uVar4 = 0x40; } } goto LAB_0003f67e; } piVar5 = (int *)*param_1; if ((piVar5 != (int *)0x0) && (!bVar1)) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar5 = (int *)*param_2; if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar4 = (uint)*(byte *)piVar5[2]; } else { uVar4 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } uVar4 = 0x40; if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) goto LAB_0003f67e; if (*(char *)((int)param_1 + 6) == '\0') { piVar5 = (int *)*param_1; if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } else { uVar6 = (uint)*(byte *)(param_1 + 1); } if ((uVar6 & 0xff) != (uint)local_1a) goto LAB_0003f67e; piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; *(undefined1 *)((int)param_1 + 6) = 0; LAB_0003f472: if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } else { (**(code **)(*piVar5 + 0x24))(); *(undefined1 *)((int)param_1 + 6) = 0; piVar5 = (int *)*param_1; if (piVar5 != (int *)0x0) goto LAB_0003f472; } piVar5 = (int *)*param_2; if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar6; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff; } local_24 = 1; if (*(char *)((int)param_1 + 5) != *(char *)((int)param_2 + 5)) { if (*(char *)((int)param_1 + 6) == '\0') { piVar5 = (int *)*param_1; if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } else { uVar6 = (uint)*(byte *)(param_1 + 1); } if (((uVar6 & 0xff) == (uint)local_19) || ((uVar6 & 0xff) == (uint)local_18)) { piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; } else { (**(code **)(*piVar5 + 0x24))(); } local_24 = 0; *(undefined1 *)((int)param_1 + 6) = 0; } } LAB_0003f67e: return uVar4 | uVar7 | local_24; } ### FUNC FUN_0003f68a @ 0003f68a undefined4 FUN_0003f68a(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,uint param_7 ,int param_8) { char cVar1; int iVar2; int *piVar3; uint uVar4; undefined4 uVar5; bool bVar6; int iVar7; int iVar8; int iVar9; int iVar10; int iVar11; int local_98; undefined4 local_84; int local_6c; char *local_64; int local_58; char acStack_54 [64]; iVar7 = *(int *)(param_8 + 0x10); iVar9 = *(int *)(param_8 + 0x14); local_84 = 1; local_98 = -0x80000000; iVar2 = __divsi3(0x80000000,param_3); local_6c = param_5; cVar1 = '\0'; bVar6 = false; local_58 = 0; iVar11 = 0; while( true ) { local_64 = acStack_54 + local_58; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } iVar8 = 0xff; iVar10 = iVar11; if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { *local_64 = cVar1; local_58 = local_58 + 1; cVar1 = '\0'; } else { if (-1 < (char)uVar4) { iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); } if (param_3 <= iVar8) break; cVar1 = cVar1 + '\x01'; local_6c = local_6c + 1; if (iVar11 < iVar2) { bVar6 = true; } else { iVar10 = iVar11 * param_3 - iVar8; bVar6 = (bool)(bVar6 | (iVar11 != 0 && iVar11 <= iVar10)); } } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; iVar11 = iVar10; } if ((iVar9 != iVar7) && (local_58 != 0)) { *local_64 = cVar1; local_64 = acStack_54 + local_58 + 1; } uVar5 = 0; if (0 < local_6c) { if (bVar6) { if (param_6 == 0) { local_98 = 0x7fffffff; } *param_4 = local_98; return 0; } if (param_6 == 0) { iVar11 = -iVar11; } *param_4 = iVar11; uVar5 = local_84; if (iVar9 != iVar7) { uVar5 = std::priv::__valid_grouping (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar5; } ### FUNC FUN_0003f894 @ 0003f894 void FUN_0003f894(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined2 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { uVar4 = 4; if ((uVar2 & 1) != 0) { uVar4 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar5 = FUN_0003fa98(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar4 = 0; if (iVar5 == 0) { uVar4 = 4; } } *param_5 = uVar4; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar2; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; std::locale::~locale(alStack_18); return; } ### FUNC FUN_0003fa98 @ 0003fa98 uint FUN_0003fa98(int *param_1,int *param_2,uint param_3,short *param_4,int param_5,int param_6, uint param_7,int param_8) { uint uVar1; short sVar2; uint uVar3; uint uVar4; int *piVar5; uint uVar6; uint uVar7; int iVar8; int iVar9; char cVar10; int iVar11; char *pcVar12; uint uVar13; uint local_84; uint local_78; int local_6c; int local_58; char local_54 [64]; iVar8 = *(int *)(param_8 + 0x10); iVar11 = *(int *)(param_8 + 0x14); local_58 = 0; local_84 = 1; uVar3 = __udivsi3(0xffff,param_3 & 0xffff); local_6c = param_5; cVar10 = '\0'; uVar4 = 0; local_78 = 0; while( true ) { sVar2 = (short)uVar4; pcVar12 = local_54 + local_58; piVar5 = (int *)*param_1; if ((piVar5 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } piVar5 = (int *)*param_2; if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar6; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar5 = (int *)*param_1; if ((byte *)piVar5[2] < (byte *)piVar5[3]) { uVar6 = (uint)*(byte *)piVar5[2]; } else { uVar6 = (**(code **)(*piVar5 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar6; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff; } else { uVar6 = (uint)*(byte *)(param_1 + 1); } iVar9 = 0xff; if ((uVar6 & 0xff) == param_7 && iVar11 != iVar8) { *pcVar12 = cVar10; local_58 = local_58 + 1; cVar10 = '\0'; uVar6 = local_78; } else { if (-1 < (char)uVar6) { iVar9 = std::priv::__digit_val_table(uVar6 & 0xff); } if ((int)param_3 <= iVar9) break; uVar7 = uVar4 & 0xffff; cVar10 = cVar10 + '\x01'; local_6c = local_6c + 1; uVar6 = local_84; if ((uVar7 <= uVar3) && (uVar13 = iVar9 + uVar7 * param_3, uVar1 = uVar4 & 0xffff, uVar4 = uVar13, uVar6 = local_78 , uVar1 != 0)) { uVar6 = local_78 | (uVar13 & 0xffff) <= uVar7; } } local_78 = uVar6; piVar5 = (int *)*param_1; if ((uint)piVar5[2] < (uint)piVar5[3]) { piVar5[2] = piVar5[2] + 1; } else { (**(code **)(*piVar5 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; } if ((iVar11 != iVar8) && (local_58 != 0)) { *pcVar12 = cVar10; pcVar12 = local_54 + local_58 + 1; } uVar4 = 0; if (0 < local_6c) { if (local_78 != 0) { *param_4 = -1; return 0; } if (param_6 == 1) { sVar2 = -sVar2; } *param_4 = sVar2; uVar4 = local_84; if (iVar11 != iVar8) { uVar4 = std::priv::__valid_grouping (local_54,pcVar12,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar4; } ### FUNC FUN_0003fc94 @ 0003fc94 void FUN_0003fc94(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { uVar4 = 4; if ((uVar2 & 1) != 0) { uVar4 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar5 = FUN_0003fe98(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar4 = 0; if (iVar5 == 0) { uVar4 = 4; } } *param_5 = uVar4; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar2; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; std::locale::~locale(alStack_18); return; } ### FUNC FUN_0003fe98 @ 0003fe98 undefined4 FUN_0003fe98(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { char cVar1; uint uVar2; int *piVar3; uint uVar4; undefined4 uVar5; bool bVar6; int iVar7; int iVar8; int iVar9; uint uVar10; undefined4 local_84; int local_6c; char *local_64; int local_5c; char acStack_54 [64]; iVar7 = *(int *)(param_8 + 0x10); iVar9 = *(int *)(param_8 + 0x14); local_84 = 1; uVar2 = __udivsi3(0xffffffff,param_3); local_6c = param_5; cVar1 = '\0'; uVar10 = 0; local_5c = 0; bVar6 = false; while( true ) { local_64 = acStack_54 + local_5c; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } iVar8 = 0xff; if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { *local_64 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { if (-1 < (char)uVar4) { iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); } if (param_3 <= iVar8) break; cVar1 = cVar1 + '\x01'; local_6c = local_6c + 1; if (uVar2 < uVar10) { bVar6 = true; } else { uVar4 = iVar8 + uVar10 * param_3; bVar6 = (bool)(bVar6 | (uVar10 != 0 && uVar4 <= uVar10)); uVar10 = uVar4; } } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; } if ((iVar9 != iVar7) && (local_5c != 0)) { *local_64 = cVar1; local_64 = acStack_54 + local_5c + 1; } uVar5 = 0; if (0 < local_6c) { if (bVar6) { *param_4 = 0xffffffff; return 0; } uVar2 = -uVar10; if (param_6 == 0) { uVar2 = uVar10; } *param_4 = uVar2; uVar5 = local_84; if (iVar9 != iVar7) { uVar5 = std::priv::__valid_grouping (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar5; } ### FUNC FUN_00040090 @ 00040090 void FUN_00040090(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { uVar4 = 4; if ((uVar2 & 1) != 0) { uVar4 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar5 = FUN_00040294(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar4 = 0; if (iVar5 == 0) { uVar4 = 4; } } *param_5 = uVar4; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar2; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00040294 @ 00040294 undefined4 FUN_00040294(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { char cVar1; uint uVar2; int *piVar3; uint uVar4; undefined4 uVar5; bool bVar6; int iVar7; int iVar8; int iVar9; uint uVar10; undefined4 local_84; int local_6c; char *local_64; int local_5c; char acStack_54 [64]; iVar7 = *(int *)(param_8 + 0x10); iVar9 = *(int *)(param_8 + 0x14); local_84 = 1; uVar2 = __udivsi3(0xffffffff,param_3); local_6c = param_5; cVar1 = '\0'; uVar10 = 0; local_5c = 0; bVar6 = false; while( true ) { local_64 = acStack_54 + local_5c; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } iVar8 = 0xff; if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) { *local_64 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { if (-1 < (char)uVar4) { iVar8 = std::priv::__digit_val_table(uVar4 & 0xff); } if (param_3 <= iVar8) break; cVar1 = cVar1 + '\x01'; local_6c = local_6c + 1; if (uVar2 < uVar10) { bVar6 = true; } else { uVar4 = iVar8 + uVar10 * param_3; bVar6 = (bool)(bVar6 | (uVar10 != 0 && uVar4 <= uVar10)); uVar10 = uVar4; } } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; } if ((iVar9 != iVar7) && (local_5c != 0)) { *local_64 = cVar1; local_64 = acStack_54 + local_5c + 1; } uVar5 = 0; if (0 < local_6c) { if (bVar6) { *param_4 = 0xffffffff; return 0; } uVar2 = -uVar10; if (param_6 == 0) { uVar2 = uVar10; } *param_4 = uVar2; uVar5 = local_84; if (iVar9 != iVar7) { uVar5 = std::priv::__valid_grouping (acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar5; } ### FUNC FUN_0004048c @ 0004048c /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_0004048c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,float *param_6) { locale *this; undefined4 uVar1; undefined4 uVar2; int iVar3; int *piVar4; uint uVar5; undefined1 *local_134 [4]; undefined1 **local_124; undefined1 local_120; undefined1 auStack_11f [256]; undefined1 auStack_1f [3]; undefined1 **local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); __aeabi_memclr(auStack_11f,0x100); local_120 = 0; local_134[0] = auStack_1f; local_124 = (undefined1 **)&local_120; local_1c = (undefined1 **)&local_120; iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2); uVar5 = 4; if (iVar3 == 1) { uVar5 = 0; std::priv::__string_to_float((__basic_iostring *)local_134,param_6); } *param_5 = uVar5; piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar5; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar5; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar3 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar3; if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && ((undefined1 **)&local_120 != local_1c)) { if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); } else { operator_delete(local_1c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_00040604 @ 00040604 undefined4 FUN_00040604(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,int *param_5) { uint uVar1; undefined4 uVar2; uint uVar3; int *piVar4; uint uVar5; uint uVar6; int local_44; undefined1 uStack_3e; undefined4 local_40; undefined1 auStack_3c [12]; undefined1 local_30 [4]; int local_2c [4]; int *local_1c; int *local_18; (**(code **)(*param_5 + 0x10))(local_2c,param_5); local_30[0] = 1; uVar1 = (**(code **)(*param_5 + 8))(param_5); uVar2 = (**(code **)(*param_5 + 0xc))(param_5); FUN_000408f4(&local_44,*param_2,param_2[1],*param_3,param_3[1],param_1,0x2b,0x2d); *(short *)(param_2 + 1) = (short)local_40; *param_2 = local_44; *(undefined1 *)((int)param_2 + 6) = uStack_3e; if (local_18 == local_1c) { uVar3 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c); } else { uVar3 = FUN_00040a50(param_2,*param_3,param_3[1],param_1,auStack_3c,uVar2,local_2c,local_30); } piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar5; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar5; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; } uVar2 = 0; uVar5 = 0; if (*(char *)((int)param_2 + 5) != *(char *)((int)param_3 + 5)) { if (*(char *)((int)param_2 + 6) == '\0') { piVar4 = (int *)*param_2; if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar6 = (uint)*(byte *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar6; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff; } else { uVar6 = (uint)*(byte *)(param_2 + 1); } uVar5 = 0; if ((uVar6 & 0xff) == uVar1) { FUN_00040cb0(param_1,0x2e); piVar4 = (int *)*param_2; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 1; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_2 + 6) = 0; uVar5 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c); } } if ((uVar3 | uVar5) == 1) { piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar1 = (uint)*(byte *)piVar4[2]; } else { uVar1 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar1; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar1 == 0xffffffff; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar1 = (uint)*(byte *)piVar4[2]; } else { uVar1 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar1; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar1 == 0xffffffff; } uVar2 = 1; if (*(char *)((int)param_2 + 5) != *(char *)((int)param_3 + 5)) { if (*(char *)((int)param_2 + 6) == '\0') { piVar4 = (int *)*param_2; if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar1 = (uint)*(byte *)piVar4[2]; } else { uVar1 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar1; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar1 == 0xffffffff; } else { uVar1 = (uint)*(byte *)(param_2 + 1); } if ((uVar1 & 0xff | 0x20) == 0x65) { FUN_00040cb0(param_1,0x65); piVar4 = (int *)*param_2; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 1; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_2 + 6) = 0; FUN_000408f4(&local_44,*param_2,param_2[1],*param_3,param_3[1],param_1,0x2b,0x2d); *(short *)(param_2 + 1) = (short)local_40; *param_2 = local_44; *(undefined1 *)((int)param_2 + 6) = uStack_3e; uVar2 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c); } } } if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { if ((uint)(local_2c[0] - (int)local_18) < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } return uVar2; } ### FUNC FUN_000408f4 @ 000408f4 undefined4 * FUN_000408f4(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5, undefined4 param_6,uint param_7,uint param_8) { uint uVar1; uint uVar2; if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar1 = (uint)*(byte *)param_2[2]; } else { uVar1 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = param_3 & 0xff000000 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; } if ((param_4 != (int *)0x0) && ((param_5 & 0xff0000) == 0)) { if ((byte *)param_4[2] < (byte *)param_4[3]) { uVar1 = (uint)*(byte *)param_4[2]; } else { uVar1 = (**(code **)(*param_4 + 0x20))(param_4); } param_5 = (uint)(uVar1 == 0xffffffff) << 8; } uVar1 = param_3; if ((param_3 >> 8 & 0xff) == (param_5 >> 8 & 0xff)) goto LAB_00040a44; if ((param_3 & 0xff0000) == 0) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar1 = (uint)*(byte *)param_2[2]; } else { uVar1 = (**(code **)(*param_2 + 0x20))(param_2); } uVar2 = param_3 & 0xff000000; param_3 = uVar1; uVar1 = uVar2 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000; } if ((param_3 & 0xff) == param_7) { uVar2 = param_2[2]; if ((uint)param_2[3] <= uVar2) { (**(code **)(*param_2 + 0x24))(param_2); uVar1 = uVar1 & 0xff00ffff; goto LAB_00040a44; } LAB_00040a32: param_2[2] = uVar2 + 1; } else { if ((param_3 & 0xff) != param_8) goto LAB_00040a44; FUN_00040cb0(param_6,0x2d); uVar2 = param_2[2]; if (uVar2 < (uint)param_2[3]) goto LAB_00040a32; (**(code **)(*param_2 + 0x24))(param_2); } uVar1 = uVar1 & 0xff00ffff; LAB_00040a44: *param_1 = param_2; param_1[1] = uVar1; return param_1 + 2; } ### FUNC FUN_00040a50 @ 00040a50 undefined4 FUN_00040a50(int *param_1,int *param_2,uint param_3,undefined4 param_4,undefined4 param_5, uint param_6,int param_7,undefined1 *param_8) { char cVar1; undefined1 uVar2; int *piVar3; uint uVar4; char *pcVar5; int iVar6; undefined4 local_6c; char local_54 [64]; iVar6 = 0; cVar1 = '\0'; local_6c = 0; while( true ) { pcVar5 = local_54 + iVar6; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar4 = (uint)*(byte *)param_2[2]; } else { uVar4 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = (uint)(uVar4 == 0xffffffff) << 8 | 0x10000; } if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } if ((uVar4 & 0xff) == param_6) { *pcVar5 = cVar1; iVar6 = iVar6 + 1; cVar1 = '\0'; } else { if (9 < (uVar4 - 0x30 & 0xff)) break; FUN_00040cb0(param_4); cVar1 = cVar1 + '\x01'; local_6c = 1; } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; } if (iVar6 != 0) { *pcVar5 = cVar1; pcVar5 = local_54 + iVar6 + 1; } uVar2 = std::priv::__valid_grouping (local_54,pcVar5,*(char **)(param_7 + 0x14),*(char **)(param_7 + 0x10)); *param_8 = uVar2; return local_6c; } ### FUNC FUN_00040bac @ 00040bac undefined4 FUN_00040bac(int *param_1,int *param_2,uint param_3,undefined4 param_4) { int *piVar1; uint uVar2; undefined4 local_1c; local_1c = 0; while( true ) { piVar1 = (int *)*param_1; if ((piVar1 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar1[2] < (byte *)piVar1[3]) { uVar2 = (uint)*(byte *)piVar1[2]; } else { uVar2 = (**(code **)(*piVar1 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar2; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; } if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) { if ((byte *)param_2[2] < (byte *)param_2[3]) { uVar2 = (uint)*(byte *)param_2[2]; } else { uVar2 = (**(code **)(*param_2 + 0x20))(param_2); } param_3 = (uint)(uVar2 == 0xffffffff) << 8 | 0x10000; } if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) { return local_1c; } if (*(char *)((int)param_1 + 6) == '\0') { piVar1 = (int *)*param_1; if ((byte *)piVar1[2] < (byte *)piVar1[3]) { uVar2 = (uint)*(byte *)piVar1[2]; } else { uVar2 = (**(code **)(*piVar1 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar2; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff; } else { uVar2 = (uint)*(byte *)(param_1 + 1); } if (9 < (uVar2 - 0x30 & 0xff)) break; FUN_00040cb0(param_4,uVar2 & 0xff); piVar1 = (int *)*param_1; if ((uint)piVar1[2] < (uint)piVar1[3]) { piVar1[2] = piVar1[2] + 1; } else { (**(code **)(*piVar1 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; local_1c = 1; } return local_1c; } ### FUNC FUN_00040cb0 @ 00040cb0 void FUN_00040cb0(int *param_1,undefined1 param_2) { uint uVar1; uint uVar2; undefined1 *puVar3; int *piVar4; int *piVar5; uint uVar6; uint uVar7; int *piVar8; int *piVar9; int *piVar10; piVar10 = (int *)param_1[0x46]; piVar5 = param_1 + 0x46; if (piVar10 == param_1) { piVar8 = (int *)param_1[4]; piVar4 = param_1 + 4; } else { piVar8 = (int *)param_1[4]; piVar4 = (int *)*param_1; } if ((int)piVar4 - (int)piVar8 == 1) { uVar2 = (int)piVar8 - (int)piVar10; if (uVar2 == 0xfffffffe) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar6 = uVar2; if (uVar2 < 2) { uVar6 = 1; } uVar7 = uVar2 + uVar6 + 1; uVar1 = 0xfffffffe; if (uVar2 <= uVar7) { uVar1 = uVar7; } uVar7 = 0xfffffffe; if (uVar2 + uVar6 != -2) { uVar7 = uVar1; } if (uVar7 >> 1 < 0x81) { piVar4 = param_1 + 5; } else { piVar4 = (int *)operator_new(uVar7); piVar8 = (int *)param_1[4]; piVar10 = (int *)*piVar5; } piVar9 = piVar4; if (0 < (int)piVar8 - (int)piVar10) { puVar3 = (undefined1 *)((int)piVar8 + (1 - (int)piVar10)); do { *(char *)piVar9 = (char)*piVar10; puVar3 = puVar3 + -1; piVar9 = (int *)((int)piVar9 + 1); piVar10 = (int *)((int)piVar10 + 1); } while (1 < (int)puVar3); } *(undefined1 *)piVar9 = 0; piVar10 = (int *)*piVar5; if (((piVar10 != param_1) && (piVar10 != (int *)0x0)) && (param_1 + 5 != piVar10)) { if ((uint)(*param_1 - (int)piVar10) < 0x81) { std::__node_alloc::_M_deallocate(piVar10,*param_1 - (int)piVar10); } else { operator_delete(piVar10); } } param_1[4] = (int)piVar9; *param_1 = (int)((int)piVar4 + uVar7); *piVar5 = (int)piVar4; piVar8 = piVar9; } param_1 = param_1 + 4; *(undefined1 *)((int)piVar8 + 1) = 0; *(undefined1 *)*param_1 = param_2; *param_1 = *param_1 + 1; return; } ### FUNC FUN_00040dac @ 00040dac /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_00040dac(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,double *param_6) { locale *this; undefined4 uVar1; undefined4 uVar2; int iVar3; int *piVar4; uint uVar5; undefined1 *local_134 [4]; undefined1 **local_124; undefined1 local_120; undefined1 auStack_11f [256]; undefined1 auStack_1f [3]; undefined1 **local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); __aeabi_memclr(auStack_11f,0x100); local_120 = 0; local_134[0] = auStack_1f; local_124 = (undefined1 **)&local_120; local_1c = (undefined1 **)&local_120; iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2); uVar5 = 4; if (iVar3 == 1) { uVar5 = 0; std::priv::__string_to_float((__basic_iostring *)local_134,param_6); } *param_5 = uVar5; piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar5; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar5; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar3 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar3; if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && ((undefined1 **)&local_120 != local_1c)) { if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); } else { operator_delete(local_1c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_00040f24 @ 00040f24 void FUN_00040f24(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { uVar4 = 4; if ((uVar2 & 1) != 0) { uVar4 = 0; *param_6 = 0; param_6[1] = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar5 = FUN_00041128(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar4 = 0; if (iVar5 == 0) { uVar4 = 4; } } *param_5 = uVar4; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar2; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00041128 @ 00041128 undefined4 FUN_00041128(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { bool bVar1; longlong lVar2; int *piVar3; uint uVar4; uint uVar5; undefined4 uVar6; char cVar7; bool bVar8; int iVar9; int iVar10; undefined8 uVar11; longlong lVar12; undefined4 local_94; int local_78; char *local_70; uint local_64; uint local_60; uint local_5c; int local_58; char acStack_54 [64]; iVar9 = *(int *)(param_8 + 0x10); iVar10 = *(int *)(param_8 + 0x14); local_94 = 1; uVar11 = __aeabi_uldivmod(0xffffffff,0xffffffff,param_3); uVar5 = (uint)((ulonglong)uVar11 >> 0x20); local_58 = 0; local_78 = param_5; cVar7 = '\0'; bVar8 = false; lVar2 = 0; while( true ) { local_5c = (uint)((ulonglong)lVar2 >> 0x20); local_60 = (uint)lVar2; local_70 = acStack_54 + local_58; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar3 = (int *)*param_1; if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar4; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff; } else { uVar4 = (uint)*(byte *)(param_1 + 1); } local_64 = 0xff; lVar12 = lVar2; if ((uVar4 & 0xff) == param_7 && iVar10 != iVar9) { *local_70 = cVar7; local_58 = local_58 + 1; cVar7 = '\0'; } else { if (-1 < (char)uVar4) { local_64 = std::priv::__digit_val_table(uVar4 & 0xff); } if (param_3 <= (int)local_64) break; bVar1 = (uint)uVar11 < local_60; if (local_5c != uVar5) { bVar1 = uVar5 < local_5c; } cVar7 = cVar7 + '\x01'; local_78 = local_78 + 1; if (bVar1) { bVar8 = true; } else { lVar12 = __muldi3(local_60,local_5c,param_3,param_3 >> 0x1f); lVar12 = lVar12 + (ulonglong)local_64; uVar4 = (uint)((ulonglong)lVar12 >> 0x20); bVar1 = local_60 < (uint)lVar12; if (uVar4 != local_5c) { bVar1 = local_5c < uVar4; } bVar8 = (bool)(bVar8 | (lVar2 != 0 && !bVar1)); } } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 1; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; lVar2 = lVar12; } if ((iVar10 != iVar9) && (local_58 != 0)) { *local_70 = cVar7; local_70 = acStack_54 + local_58 + 1; } uVar6 = 0; if (0 < local_78) { if (bVar8) { *param_4 = 0xffffffff; param_4[1] = 0xffffffff; return 0; } uVar5 = -local_60; if (param_6 == 0) { uVar5 = local_60; } *param_4 = uVar5; uVar5 = -(uint)(local_60 != 0) - local_5c; if (param_6 == 0) { uVar5 = local_5c; } param_4[1] = uVar5; uVar6 = local_94; if (iVar10 != iVar9) { uVar6 = std::priv::__valid_grouping (acStack_54,local_70,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar6; } ### FUNC FUN_0004139c @ 0004139c /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_0004139c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, longdouble *param_6) { locale *this; undefined4 uVar1; undefined4 uVar2; int iVar3; int *piVar4; uint uVar5; undefined1 *local_134 [4]; undefined1 **local_124; undefined1 local_120; undefined1 auStack_11f [256]; undefined1 auStack_1f [3]; undefined1 **local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); __aeabi_memclr(auStack_11f,0x100); local_120 = 0; local_134[0] = auStack_1f; local_124 = (undefined1 **)&local_120; local_1c = (undefined1 **)&local_120; iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2); uVar5 = 4; if (iVar3 == 1) { uVar5 = 0; std::priv::__string_to_float((__basic_iostring *)local_134,param_6); } *param_5 = uVar5; piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar5; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar4[2] < (byte *)piVar4[3]) { uVar5 = (uint)*(byte *)piVar4[2]; } else { uVar5 = (**(code **)(*piVar4 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar5; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar3 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar3; if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && ((undefined1 **)&local_120 != local_1c)) { if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); } else { operator_delete(local_1c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_00041514 @ 00041514 void FUN_00041514(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar4; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar4 = (uint)*(byte *)piVar3[2]; } else { uVar4 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar4; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { uVar4 = 4; if ((uVar2 & 1) != 0) { uVar4 = 0; *param_6 = 0; param_6[1] = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar5 = FUN_00041718(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar4 = 0; if (iVar5 == 0) { uVar4 = 4; } } *param_5 = uVar4; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar2; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) { if ((byte *)piVar3[2] < (byte *)piVar3[3]) { uVar2 = (uint)*(byte *)piVar3[2]; } else { uVar2 = (**(code **)(*piVar3 + 0x20))(); } *(char *)(param_3 + 1) = (char)uVar2; *(undefined1 *)((int)param_3 + 6) = 1; *(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff; } if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) { *param_5 = *param_5 | 2; } iVar5 = param_2[1]; *param_1 = *param_2; param_1[1] = iVar5; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00041718 @ 00041718 undefined4 FUN_00041718(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { bool bVar1; int *piVar2; uint uVar3; undefined4 uVar4; char cVar5; bool bVar6; int iVar7; int iVar8; uint uVar9; uint uVar10; uint uVar11; uint uVar12; undefined8 uVar13; undefined8 uVar14; uint local_a4; undefined4 local_90; int local_70; char *local_68; uint local_60; uint local_5c; int local_58; char acStack_54 [64]; iVar7 = *(int *)(param_8 + 0x10); iVar8 = *(int *)(param_8 + 0x14); local_90 = 1; local_a4 = 0x80000000; uVar13 = __aeabi_ldivmod(0); uVar9 = (uint)((ulonglong)uVar13 >> 0x20); local_70 = param_5; cVar5 = '\0'; local_5c = 0; bVar6 = false; local_58 = 0; local_60 = 0; while( true ) { local_68 = acStack_54 + local_58; piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) { if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } piVar2 = (int *)*param_2; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) { if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_2 + 1) = (char)uVar3; *(undefined1 *)((int)param_2 + 6) = 1; *(bool *)((int)param_2 + 5) = uVar3 == 0xffffffff; } if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break; if (*(char *)((int)param_1 + 6) == '\0') { piVar2 = (int *)*param_1; if ((byte *)piVar2[2] < (byte *)piVar2[3]) { uVar3 = (uint)*(byte *)piVar2[2]; } else { uVar3 = (**(code **)(*piVar2 + 0x20))(); } *(char *)(param_1 + 1) = (char)uVar3; *(undefined1 *)((int)param_1 + 6) = 1; *(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff; } else { uVar3 = (uint)*(byte *)(param_1 + 1); } uVar11 = 0xff; uVar10 = local_60; uVar12 = local_5c; if ((uVar3 & 0xff) == param_7 && iVar8 != iVar7) { *local_68 = cVar5; local_58 = local_58 + 1; cVar5 = '\0'; } else { if (-1 < (char)uVar3) { uVar11 = std::priv::__digit_val_table(uVar3 & 0xff); } if (param_3 <= (int)uVar11) break; bVar1 = local_5c < (uint)uVar13; if (local_60 != uVar9) { bVar1 = (int)local_60 < (int)uVar9; } cVar5 = cVar5 + '\x01'; local_70 = local_70 + 1; if (bVar1) { bVar6 = true; } else { uVar14 = __muldi3(local_5c,local_60,param_3,param_3 >> 0x1f); uVar12 = (uint)uVar14 - uVar11; uVar10 = (int)((ulonglong)uVar14 >> 0x20) - (uint)((uint)uVar14 < uVar11); bVar1 = uVar12 < local_5c; if (uVar10 != local_60) { bVar1 = (int)uVar10 < (int)local_60; } bVar6 = (bool)(bVar6 | ((local_5c != 0 || local_60 != 0) && !bVar1)); } } piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 1; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 6) = 0; local_60 = uVar10; local_5c = uVar12; } if ((iVar8 != iVar7) && (local_58 != 0)) { *local_68 = cVar5; local_68 = acStack_54 + local_58 + 1; } uVar4 = 0; if (0 < local_70) { if (bVar6) { uVar9 = 0; if (param_6 == 0) { uVar9 = 0xffffffff; } *param_4 = uVar9; if (param_6 == 0) { local_a4 = 0x7fffffff; } param_4[1] = local_a4; return 0; } uVar9 = local_5c; if (param_6 == 0) { uVar9 = -local_5c; } *param_4 = uVar9; if (param_6 == 0) { local_60 = -(uint)(local_5c != 0) - local_60; } param_4[1] = local_60; uVar4 = local_90; if (iVar8 != iVar7) { uVar4 = std::priv::__valid_grouping (acStack_54,local_68,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar4; } ### FUNC FUN_00041986 @ 00041986 void FUN_00041986(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_000419e8 @ 000419e8 void FUN_000419e8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_00041ecc(auStack_16,uVar2,param_7); FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00041a22 @ 00041a22 void FUN_00041a22(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_000424fc(auStack_16,uVar2,param_7); FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00041a5c @ 00041a5c void FUN_00041a5c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6) { FUN_000425e8(param_1,param_3,param_4,param_5,param_6); return; } ### FUNC FUN_00041a80 @ 00041a80 void FUN_00041a80(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6) { FUN_00042a64(param_1,param_3,param_4,param_5,param_6); return; } ### FUNC FUN_00041aa4 @ 00041aa4 void FUN_00041aa4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_00042c10(auStack_16,uVar2,param_7,param_8); FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00041ae0 @ 00041ae0 void FUN_00041ae0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_00042d68(auStack_16,uVar2,param_7,param_8); FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00041b1c @ 00041b1c void FUN_00041b1c(undefined4 param_1,undefined4 param_2,int *param_3,uint param_4,int param_5, undefined4 param_6,int param_7) { bool bVar1; locale *this; int *piVar2; undefined4 uVar3; int iVar4; int iVar5; undefined1 *puVar6; undefined4 uVar7; uint uVar8; undefined4 uVar9; uint local_28; locale alStack_24 [14]; undefined1 auStack_16 [2]; this = (locale *)std::locale::locale(alStack_24,(locale *)(param_5 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); std::locale::~locale(alStack_24); uVar3 = 10; *(undefined4 *)(param_5 + 0x1c) = 10; uVar8 = *(uint *)(param_5 + 4); *(uint *)(param_5 + 4) = uVar8 & 0xfffffdc0 | 0x214; local_28 = param_4; if (param_7 == 0) { if ((int)(uVar8 << 0x11) < 0) { iVar4 = std::priv::__hex_char_table_hi(); } else { iVar4 = std::priv::__hex_char_table_lo(); } iVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); bVar1 = true; if ((param_4 & 0xff) != 0) { puVar6 = (undefined1 *)param_3[5]; if (puVar6 < (undefined1 *)param_3[6]) { param_3[5] = (int)(puVar6 + 1); *puVar6 = (char)iVar5; } else { iVar5 = (**(code **)(*param_3 + 0x34))(param_3); } bVar1 = true; if (iVar5 != -1) { bVar1 = false; } } iVar4 = (**(code **)(*piVar2 + 0x18))(piVar2,*(undefined1 *)(iVar4 + 0x10)); local_28 = 0; if (!bVar1) { puVar6 = (undefined1 *)param_3[5]; if (puVar6 < (undefined1 *)param_3[6]) { param_3[5] = (int)(puVar6 + 1); *puVar6 = (char)iVar4; } else { iVar4 = (**(code **)(*param_3 + 0x34))(param_3); } local_28 = 1; if (iVar4 == -1) { local_28 = 0; } } local_28 = param_4 & 0xffffff00 | local_28; uVar3 = 8; } *(undefined4 *)(param_5 + 0x1c) = uVar3; uVar3 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30); uVar9 = *(undefined4 *)(param_5 + 4); uVar7 = FUN_000424fc(auStack_16,uVar9,param_7); FUN_00042010(param_1,uVar7,auStack_16,param_3,local_28,param_5,uVar9,uVar3); *(uint *)(param_5 + 4) = uVar8; return; } ### FUNC FUN_00041c48 @ 00041c48 void FUN_00041c48(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6) { byte bVar1; locale *this; int *piVar2; uint uVar3; uint uVar4; byte *pbVar5; undefined1 *puVar6; code *pcVar7; int iVar8; byte *pbVar9; uint uVar10; uint uVar11; byte *local_30; int local_2c [4]; int local_1c; byte *local_18; this = (locale *)std::locale::locale((locale *)local_2c,(locale *)(param_4 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_2c); if (param_6 == 1) { pcVar7 = *(code **)(*piVar2 + 0x14); } else { pcVar7 = *(code **)(*piVar2 + 0x18); } (*pcVar7)(local_2c,piVar2); pbVar9 = local_18; uVar10 = *(uint *)(param_4 + 0x1c); local_30 = (byte *)0x0; *(undefined4 *)(param_4 + 0x1c) = 0; uVar3 = local_1c - (int)local_18; if (uVar3 < uVar10) { if ((*(uint *)(param_4 + 4) & 7) == 1) { uVar4 = param_3; if (0 < (int)uVar3) { iVar8 = (local_1c + 1) - (int)local_18; local_30 = local_18; uVar11 = param_3; do { uVar4 = 0; if ((uVar11 & 0xff) != 0) { bVar1 = *local_30; uVar4 = (uint)bVar1; pbVar5 = (byte *)param_2[5]; if (pbVar5 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar5 + 1); *pbVar5 = bVar1; } else { uVar4 = (**(code **)(*param_2 + 0x34))(param_2); } uVar4 = (uint)(uVar4 != 0xffffffff); } iVar8 = iVar8 + -1; local_30 = local_30 + 1; uVar11 = uVar4; } while (1 < iVar8); } param_3 = uVar4 & 0xff | param_3 & 0xffffff00; if (0 < (int)(uVar10 - uVar3)) { pbVar9 = pbVar9 + ((uVar10 + 1) - local_1c); do { uVar3 = 0; if ((param_3 & 0xff) != 0) { puVar6 = (undefined1 *)param_2[5]; if (puVar6 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar6 + 1); *puVar6 = (char)param_5; iVar8 = param_5; } else { iVar8 = (**(code **)(*param_2 + 0x34))(param_2,param_5); } uVar3 = 1; if (iVar8 == -1) { uVar3 = 0; } } param_3 = param_3 & 0xffffff00 | uVar3; pbVar9 = pbVar9 + -1; } while (1 < (int)pbVar9); } } else { uVar4 = param_3; if (0 < (int)(uVar10 - uVar3)) { pbVar9 = local_18 + ((uVar10 + 1) - local_1c); uVar3 = param_3; do { uVar4 = 0; if ((uVar3 & 0xff) != 0) { puVar6 = (undefined1 *)param_2[5]; if (puVar6 < (undefined1 *)param_2[6]) { param_2[5] = (int)(puVar6 + 1); *puVar6 = (char)param_5; iVar8 = param_5; } else { iVar8 = (**(code **)(*param_2 + 0x34))(param_2,param_5); } uVar4 = 1; if (iVar8 == -1) { uVar4 = 0; } } pbVar9 = pbVar9 + -1; uVar3 = uVar4; } while (1 < (int)pbVar9); } param_3 = uVar4 & 0xff | param_3 & 0xffffff00; if (0 < local_1c - (int)local_18) { iVar8 = (local_1c + 1) - (int)local_18; pbVar9 = local_18; do { uVar3 = 0; if ((param_3 & 0xff) != 0) { bVar1 = *pbVar9; uVar3 = (uint)bVar1; pbVar5 = (byte *)param_2[5]; if (pbVar5 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar5 + 1); *pbVar5 = bVar1; } else { uVar3 = (**(code **)(*param_2 + 0x34))(param_2); } uVar3 = (uint)(uVar3 != 0xffffffff); } param_3 = param_3 & 0xffffff00 | uVar3; iVar8 = iVar8 + -1; pbVar9 = pbVar9 + 1; } while (1 < iVar8); } } } else if (0 < (int)uVar3) { iVar8 = (local_1c + 1) - (int)local_18; do { pbVar5 = local_30; if ((param_3 & 0xff) != 0) { bVar1 = *pbVar9; uVar3 = (uint)bVar1; pbVar5 = (byte *)param_2[5]; if (pbVar5 < (byte *)param_2[6]) { param_2[5] = (int)(pbVar5 + 1); *pbVar5 = bVar1; } else { uVar3 = (**(code **)(*param_2 + 0x34))(param_2); } pbVar5 = (byte *)(uint)(uVar3 != 0xffffffff); } param_3 = param_3 & 0xffffff00 | (uint)pbVar5; iVar8 = iVar8 + -1; pbVar9 = pbVar9 + 1; } while (1 < iVar8); } *param_1 = param_2; param_1[1] = param_3; if ((local_18 != (byte *)local_2c) && (local_18 != (byte *)0x0)) { if (0x80 < (uint)(local_2c[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } return; } ### FUNC FUN_00041ecc @ 00041ecc byte * FUN_00041ecc(byte *param_1,uint param_2,uint param_3) { ulonglong uVar1; byte bVar2; byte *pbVar3; byte *pbVar4; int iVar5; uint uVar6; undefined8 uVar7; if (param_3 == 0) { param_1[-1] = 0x30; if ((param_2 & 0x830) != 0x800) { return param_1 + -1; } param_1[-2] = 0x2b; return param_1 + -2; } if ((param_2 & 0x38) == 0x10) { if ((int)(param_2 << 0x11) < 0) { iVar5 = std::priv::__hex_char_table_hi(); } else { iVar5 = std::priv::__hex_char_table_lo(); } pbVar4 = param_1 + -2; do { pbVar3 = pbVar4; pbVar3[1] = *(byte *)(iVar5 + (param_3 & 0xf)); pbVar4 = pbVar3 + -1; param_3 = param_3 >> 4; } while (param_3 != 0); if ((param_2 & 0x200) == 0) { return pbVar3 + 1; } bVar2 = *(byte *)(iVar5 + 0x10); *pbVar4 = 0x30; *pbVar3 = bVar2; return pbVar4; } if ((param_2 & 0x38) != 0x20) { uVar6 = -param_3; iVar5 = -(uint)(param_3 != 0) - ((int)param_3 >> 0x1f); if (-1 < (int)param_3) { uVar6 = param_3; iVar5 = (int)param_3 >> 0x1f; } uVar7 = CONCAT44(iVar5,uVar6); if (uVar6 != 0 || iVar5 != 0) { do { uVar1 = (ulonglong)uVar7 >> 0x20; uVar6 = (uint)uVar7; bVar2 = 10; uVar7 = __aeabi_uldivmod(); param_1[-1] = bVar2 | 0x30; param_1 = param_1 + -1; } while ((int)uVar1 != 0 || 9 < uVar6); } if ((int)param_3 < 0) { bVar2 = 0x2d; } else { if ((param_2 & 0x800) == 0) { return param_1; } bVar2 = 0x2b; } param_1[-1] = bVar2; return param_1 + -1; } pbVar4 = param_1 + -1; do { pbVar3 = pbVar4; *pbVar3 = (byte)param_3 & 7 | 0x30; pbVar4 = pbVar3 + -1; param_3 = param_3 >> 3; } while (param_3 != 0); if ((param_2 & 0x200) == 0) { return pbVar3; } *pbVar4 = 0x30; return pbVar4; } ### FUNC FUN_00042010 @ 00042010 void FUN_00042010(undefined4 param_1,undefined1 *param_2,int param_3,undefined4 param_4, undefined4 param_5,int param_6,uint param_7,undefined4 param_8) { locale *this; int *piVar1; undefined4 uVar2; undefined1 uVar3; undefined1 *local_70; int local_6c [4]; int *local_5c; int *local_58; undefined1 auStack_54 [64]; this = (locale *)std::locale::locale((locale *)local_6c,(locale *)(param_6 + 0x20)); param_3 = param_3 - (int)param_2; piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_6c); (**(code **)(*piVar1 + 0x10))(local_6c,piVar1); local_70 = param_2; if (local_58 != local_5c) { uVar3 = 0; if ((int)(param_7 << 0x16) < 0) { uVar3 = 2; if ((param_7 & 0x38) != 0x10) { uVar3 = (param_7 & 0x38) == 0x20; } } if (param_3 != 0) { __aeabi_memcpy(auStack_54,param_2,param_3); } uVar2 = (**(code **)(*piVar1 + 0xc))(piVar1); local_70 = auStack_54; param_3 = FUN_00050058(local_70,local_70 + param_3,local_6c,uVar2,0x2b,0x2d,uVar3); } uVar2 = *(undefined4 *)(param_6 + 0x1c); *(undefined4 *)(param_6 + 0x1c) = 0; FUN_00042144(param_1,local_70,param_3,param_4,param_5,param_7,uVar2,param_8,0x2b,0x2d); if ((local_58 != local_6c) && (local_58 != (int *)0x0)) { if (0x80 < (uint)(local_6c[0] - (int)local_58)) { operator_delete(local_58); return; } std::__node_alloc::_M_deallocate(local_58,local_6c[0] - (int)local_58); } return; } ### FUNC FUN_00042144 @ 00042144 undefined4 * FUN_00042144(undefined4 *param_1,byte *param_2,int param_3,int *param_4,uint param_5,uint param_6, int param_7,int param_8,uint param_9,uint param_10) { byte bVar1; undefined1 uVar2; uint uVar3; byte *pbVar4; undefined1 *puVar5; uint uVar6; int iVar7; int iVar8; int local_28; byte *local_18; if (param_7 <= param_3) { if (0 < param_3) { param_3 = param_3 + 1; do { uVar3 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; uVar6 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar3 = 1; if (uVar6 == 0xffffffff) { uVar3 = 0; } } param_5 = param_5 & 0xffffff00 | uVar3; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < param_3); } goto LAB_00042256; } iVar7 = param_7 - param_3; uVar2 = (undefined1)param_8; if ((param_6 & 7) == 1) { uVar3 = param_5; if (0 < param_3) { iVar8 = param_3 + 1; uVar6 = param_5; local_18 = param_2; do { uVar3 = 0; if ((uVar6 & 0xff) != 0) { bVar1 = *local_18; uVar6 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar3 = 1; if (uVar6 == 0xffffffff) { uVar3 = 0; } } iVar8 = iVar8 + -1; local_18 = local_18 + 1; uVar6 = uVar3; } while (1 < iVar8); } param_5 = param_5 & 0xffffff00 | uVar3 & 0xff; if (0 < iVar7) { param_3 = (param_7 + 1) - param_3; do { uVar3 = 0; if ((param_5 & 0xff) != 0) { puVar5 = (undefined1 *)param_4[5]; if (puVar5 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar5 + 1); *puVar5 = uVar2; iVar7 = param_8; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar3 = 1; if (iVar7 == -1) { uVar3 = 0; } } param_5 = param_5 & 0xffffff00 | uVar3; param_3 = param_3 + -1; } while (1 < param_3); } goto LAB_00042256; } if ((param_3 != 0) && ((param_6 & 7) == 4)) { bVar1 = *param_2; uVar3 = (uint)bVar1; if ((uVar3 == param_9) || (uVar3 == param_10)) { uVar6 = 0; if ((param_5 & 0xff) != 0) { pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar3 = (**(code **)(*param_4 + 0x34))(param_4); } uVar6 = 1; if (uVar3 == 0xffffffff) { uVar6 = 0; } } if (0 < iVar7) { iVar7 = (param_7 + 1) - param_3; uVar3 = uVar6; do { uVar6 = 0; if (uVar3 != 0) { puVar5 = (undefined1 *)param_4[5]; if (puVar5 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar5 + 1); *puVar5 = uVar2; iVar8 = param_8; } else { iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar6 = 1; if (iVar8 == -1) { uVar6 = 0; } } iVar7 = iVar7 + -1; uVar3 = uVar6; } while (1 < iVar7); } param_5 = param_5 & 0xffffff00 | uVar6; local_28 = param_3; if (0 < param_3 + -1) { do { param_2 = param_2 + 1; uVar3 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; uVar6 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar3 = 1; if (uVar6 == 0xffffffff) { uVar3 = 0; } } param_5 = param_5 & 0xffffff00 | uVar3; local_28 = local_28 + -1; } while (1 < local_28); } goto LAB_00042256; } } if ((param_3 < 2) || ((param_6 & 0x23f) != 0x214)) { uVar3 = param_5; if (0 < iVar7) { iVar7 = (param_7 + 1) - param_3; uVar6 = param_5; do { uVar3 = 0; if ((uVar6 & 0xff) != 0) { puVar5 = (undefined1 *)param_4[5]; if (puVar5 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar5 + 1); *puVar5 = uVar2; iVar8 = param_8; } else { iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar3 = 1; if (iVar8 == -1) { uVar3 = 0; } } iVar7 = iVar7 + -1; uVar6 = uVar3; } while (1 < iVar7); } param_5 = param_5 & 0xffffff00 | uVar3 & 0xff; if (0 < param_3) { param_3 = param_3 + 1; do { uVar3 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; uVar6 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar3 = 1; if (uVar6 == 0xffffffff) { uVar3 = 0; } } param_5 = param_5 & 0xffffff00 | uVar3; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < param_3); } goto LAB_00042256; } uVar3 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { iVar8 = (**(code **)(*param_4 + 0x34))(param_4); if (iVar8 == -1) goto LAB_00042398; } pbVar4 = (byte *)param_4[5]; bVar1 = param_2[1]; uVar6 = (uint)bVar1; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar3 = 1; if (uVar6 == 0xffffffff) { uVar3 = 0; } } LAB_00042398: if (0 < iVar7) { iVar7 = (param_7 + 1) - param_3; uVar6 = uVar3; do { uVar3 = 0; if (uVar6 != 0) { puVar5 = (undefined1 *)param_4[5]; if (puVar5 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar5 + 1); *puVar5 = uVar2; iVar8 = param_8; } else { iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar3 = 1; if (iVar8 == -1) { uVar3 = 0; } } iVar7 = iVar7 + -1; uVar6 = uVar3; } while (1 < iVar7); } param_5 = param_5 & 0xffffff00 | uVar3; if (0 < param_3 + -2) { param_3 = param_3 + -1; param_2 = param_2 + 2; do { uVar3 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; uVar6 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar3 = 1; if (uVar6 == 0xffffffff) { uVar3 = 0; } } param_5 = param_5 & 0xffffff00 | uVar3; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < param_3); } LAB_00042256: *param_1 = param_4; param_1[1] = param_5; return param_1 + 2; } ### FUNC FUN_000424fc @ 000424fc byte * FUN_000424fc(int param_1,uint param_2,uint param_3) { bool bVar1; byte bVar2; int iVar3; uint uVar4; byte extraout_r1; byte *pbVar5; byte *pbVar6; byte *pbVar7; if (param_3 == 0) { *(undefined1 *)(param_1 + -1) = 0x30; pbVar7 = (byte *)(param_1 + -1); if ((param_2 & 0x830) == 0x800) { *(undefined1 *)(param_1 + -2) = 0x2b; pbVar7 = (byte *)(param_1 + -2); } } else if ((param_2 & 0x38) == 0x10) { if ((int)(param_2 << 0x11) < 0) { iVar3 = std::priv::__hex_char_table_hi(); } else { iVar3 = std::priv::__hex_char_table_lo(); } pbVar5 = (byte *)(param_1 + -2); do { pbVar6 = pbVar5; pbVar6[1] = *(byte *)(iVar3 + (param_3 & 0xf)); pbVar5 = pbVar6 + -1; param_3 = param_3 >> 4; } while (param_3 != 0); pbVar7 = pbVar6 + 1; if ((param_2 & 0x200) != 0) { bVar2 = *(byte *)(iVar3 + 0x10); *pbVar5 = 0x30; *pbVar6 = bVar2; pbVar7 = pbVar5; } } else if ((param_2 & 0x38) == 0x20) { pbVar5 = (byte *)(param_1 + -1); do { pbVar7 = pbVar5; *pbVar7 = (byte)param_3 & 7 | 0x30; pbVar5 = pbVar7 + -1; param_3 = param_3 >> 3; } while (param_3 != 0); if ((param_2 & 0x200) != 0) { *pbVar5 = 0x30; pbVar7 = pbVar5; } } else { pbVar5 = (byte *)(param_1 + -1); do { pbVar7 = pbVar5; uVar4 = __aeabi_uidivmod(param_3,10); *pbVar7 = extraout_r1 | 0x30; pbVar5 = pbVar7 + -1; bVar1 = 9 < param_3; param_3 = uVar4; } while (bVar1); if ((param_2 & 0x800) != 0) { *pbVar5 = 0x2b; pbVar7 = pbVar5; } } return pbVar7; } ### FUNC FUN_000425e8 @ 000425e8 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_000425e8(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) { undefined1 uVar1; uint uVar2; locale *this; int *piVar3; undefined4 uVar4; int local_148 [4]; int *local_138; int *local_134; undefined1 *local_130 [4]; undefined1 **local_120; undefined1 local_11c; undefined1 auStack_11b [256]; undefined1 auStack_1b [3]; undefined1 **local_18; __aeabi_memclr(auStack_11b,0x100); local_11c = 0; local_130[0] = auStack_1b; local_120 = (undefined1 **)&local_11c; local_18 = (undefined1 **)&local_11c; uVar2 = FUN_00051490(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_148); uVar1 = (**(code **)(*piVar3 + 8))(piVar3); uVar4 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_148,piVar3); if ((uVar2 < (uint)((int)local_120 - (int)local_18)) && (*(char *)((int)local_18 + uVar2) == '.')) { *(undefined1 *)((int)local_18 + uVar2) = uVar1; } if (local_134 != local_138) { FUN_000500f4(local_130,uVar2,local_148,uVar4); } *(undefined4 *)(param_4 + 0x1c) = 0; FUN_00042794(param_1,local_18,local_120,param_2); if ((local_134 != local_148) && (local_134 != (int *)0x0)) { if ((uint)(local_148[0] - (int)local_134) < 0x81) { std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); } else { operator_delete(local_134); } } if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) && ((undefined1 **)&local_11c != local_18)) { if (0x80 < (uint)((int)local_130[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18); } return; } ### FUNC FUN_00042794 @ 00042794 undefined4 * FUN_00042794(undefined4 *param_1,byte *param_2,byte *param_3,int *param_4,uint param_5,uint param_6, int param_7,int param_8,uint param_9,uint param_10) { byte bVar1; undefined1 uVar2; undefined1 *puVar3; byte *pbVar4; int iVar5; uint uVar6; byte *pbVar7; uint uVar8; int iVar9; byte *local_1c; iVar9 = (int)param_3 - (int)param_2; if (iVar9 < param_7) { iVar5 = param_7 - iVar9; uVar2 = (undefined1)param_8; if ((param_6 & 7) == 4) { if (param_2 != param_3) { bVar1 = *param_2; uVar6 = (uint)bVar1; if ((uVar6 == param_9) || (uVar6 == param_10)) { pbVar7 = param_2 + 1; uVar8 = 0; if ((param_5 & 0xff) != 0) { pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar8 = 1; if (uVar6 == 0xffffffff) { uVar8 = 0; } } if (0 < iVar5) { param_2 = param_2 + ((param_7 + 1) - (int)param_3); uVar6 = uVar8; do { uVar8 = 0; if (uVar6 != 0) { puVar3 = (undefined1 *)param_4[5]; if (puVar3 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar3 + 1); *puVar3 = uVar2; iVar9 = param_8; } else { iVar9 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar8 = 1; if (iVar9 == -1) { uVar8 = 0; } } param_2 = param_2 + -1; uVar6 = uVar8; } while (1 < (int)param_2); } param_5 = param_5 & 0xffffff00 | uVar8; if (0 < (int)param_3 - (int)pbVar7) { param_3 = param_3 + (1 - (int)pbVar7); do { uVar6 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *pbVar7; uVar8 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar8 = (**(code **)(*param_4 + 0x34))(param_4); } uVar6 = 1; if (uVar8 == 0xffffffff) { uVar6 = 0; } } param_5 = param_5 & 0xffffff00 | uVar6; param_3 = param_3 + -1; pbVar7 = pbVar7 + 1; } while (1 < (int)param_3); } goto LAB_00042984; } } } else if ((param_6 & 7) == 1) { uVar6 = param_5; if (0 < iVar9) { pbVar7 = param_3 + (1 - (int)param_2); uVar8 = param_5; local_1c = param_2; do { uVar6 = 0; if ((uVar8 & 0xff) != 0) { bVar1 = *local_1c; uVar6 = (uint)bVar1; pbVar4 = (byte *)param_4[5]; if (pbVar4 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar4 + 1); *pbVar4 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar6 = (uint)(uVar6 != 0xffffffff); } pbVar7 = pbVar7 + -1; local_1c = local_1c + 1; uVar8 = uVar6; } while (1 < (int)pbVar7); } param_5 = param_5 & 0xffffff00 | uVar6 & 0xff; if (0 < iVar5) { param_2 = param_2 + ((param_7 + 1) - (int)param_3); do { uVar6 = 0; if ((param_5 & 0xff) != 0) { puVar3 = (undefined1 *)param_4[5]; if (puVar3 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar3 + 1); *puVar3 = uVar2; iVar9 = param_8; } else { iVar9 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar6 = 1; if (iVar9 == -1) { uVar6 = 0; } } param_5 = param_5 & 0xffffff00 | uVar6; param_2 = param_2 + -1; } while (1 < (int)param_2); } goto LAB_00042984; } uVar6 = param_5; if (0 < iVar5) { pbVar7 = param_2 + ((param_7 + 1) - (int)param_3); uVar8 = param_5; do { uVar6 = 0; if ((uVar8 & 0xff) != 0) { puVar3 = (undefined1 *)param_4[5]; if (puVar3 < (undefined1 *)param_4[6]) { param_4[5] = (int)(puVar3 + 1); *puVar3 = uVar2; iVar5 = param_8; } else { iVar5 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar6 = (uint)(iVar5 != -1); } pbVar7 = pbVar7 + -1; uVar8 = uVar6; } while (1 < (int)pbVar7); } param_5 = param_5 & 0xffffff00 | uVar6 & 0xff; if (0 < iVar9) { param_3 = param_3 + (1 - (int)param_2); do { uVar6 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; uVar6 = (uint)bVar1; pbVar7 = (byte *)param_4[5]; if (pbVar7 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar7 + 1); *pbVar7 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar6 = (uint)(uVar6 != 0xffffffff); } param_5 = param_5 & 0xffffff00 | uVar6; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < (int)param_3); } } else if (0 < iVar9) { param_3 = param_3 + (1 - (int)param_2); do { uVar6 = 0; if ((param_5 & 0xff) != 0) { bVar1 = *param_2; uVar6 = (uint)bVar1; pbVar7 = (byte *)param_4[5]; if (pbVar7 < (byte *)param_4[6]) { param_4[5] = (int)(pbVar7 + 1); *pbVar7 = bVar1; } else { uVar6 = (**(code **)(*param_4 + 0x34))(param_4); } uVar6 = (uint)(uVar6 != 0xffffffff); } param_5 = param_5 & 0xffffff00 | uVar6; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < (int)param_3); } LAB_00042984: *param_1 = param_4; param_1[1] = param_5; return param_1 + 2; } ### FUNC FUN_00042a64 @ 00042a64 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_00042a64(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) { undefined1 uVar1; uint uVar2; locale *this; int *piVar3; undefined4 uVar4; int local_148 [4]; int *local_138; int *local_134; undefined1 *local_130 [4]; undefined1 **local_120; undefined1 local_11c; undefined1 auStack_11b [256]; undefined1 auStack_1b [3]; undefined1 **local_18; __aeabi_memclr(auStack_11b,0x100); local_11c = 0; local_130[0] = auStack_1b; local_120 = (undefined1 **)&local_11c; local_18 = (undefined1 **)&local_11c; uVar2 = FUN_00051642(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_148); uVar1 = (**(code **)(*piVar3 + 8))(piVar3); uVar4 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_148,piVar3); if ((uVar2 < (uint)((int)local_120 - (int)local_18)) && (*(char *)((int)local_18 + uVar2) == '.')) { *(undefined1 *)((int)local_18 + uVar2) = uVar1; } if (local_134 != local_138) { FUN_000500f4(local_130,uVar2,local_148,uVar4); } *(undefined4 *)(param_4 + 0x1c) = 0; FUN_00042794(param_1,local_18,local_120,param_2); if ((local_134 != local_148) && (local_134 != (int *)0x0)) { if ((uint)(local_148[0] - (int)local_134) < 0x81) { std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); } else { operator_delete(local_134); } } if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) && ((undefined1 **)&local_11c != local_18)) { if (0x80 < (uint)((int)local_130[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18); } return; } ### FUNC FUN_00042c10 @ 00042c10 byte * FUN_00042c10(byte *param_1,uint param_2,uint param_3,uint param_4) { byte bVar1; byte *pbVar2; int iVar3; uint uVar4; uint uVar5; byte *pbVar6; byte *pbVar7; uint uVar8; undefined8 uVar9; uint local_28; if (param_3 == 0 && param_4 == 0) { param_1[-1] = 0x30; pbVar7 = param_1 + -1; if ((param_2 & 0x830) == 0x800) { param_1[-2] = 0x2b; pbVar7 = param_1 + -2; } } else { local_28 = 1; if ((param_2 & 0x38) == 0x10) { if ((int)(param_2 << 0x11) < 0) { iVar3 = std::priv::__hex_char_table_hi(); } else { iVar3 = std::priv::__hex_char_table_lo(); } pbVar2 = param_1 + -2; do { pbVar6 = pbVar2; pbVar6[1] = *(byte *)(iVar3 + (param_3 & 0xf)); pbVar2 = pbVar6 + -1; param_3 = param_4 << 0x1c | param_3 >> 4; param_4 = param_4 >> 4; } while (param_3 != 0 || param_4 != 0); pbVar7 = pbVar6 + 1; if ((param_2 & 0x200) != 0) { bVar1 = *(byte *)(iVar3 + 0x10); *pbVar2 = 0x30; *pbVar6 = bVar1; pbVar7 = pbVar2; } } else if ((param_2 & 0x38) == 0x20) { pbVar2 = param_1 + -1; do { pbVar7 = pbVar2; *pbVar7 = (byte)param_3 & 7 | 0x30; pbVar2 = pbVar7 + -1; param_3 = param_4 << 0x1d | param_3 >> 3; param_4 = param_4 >> 3; } while (param_3 != 0 || param_4 != 0); if ((param_2 & 0x200) != 0) { *pbVar2 = 0x30; pbVar7 = pbVar2; } } else { uVar4 = (int)param_4 >> 0x1f; uVar5 = param_3 + uVar4 ^ uVar4; uVar4 = param_4 + uVar4 + (uint)CARRY4(param_3,uVar4) ^ uVar4; uVar9 = CONCAT44(uVar4,uVar5); if (uVar5 != 0 || uVar4 != 0) { do { uVar8 = (uint)((ulonglong)uVar9 >> 0x20); uVar5 = (uint)uVar9; bVar1 = 10; uVar9 = __aeabi_uldivmod(uVar5,uVar8,10,0); param_1[-1] = bVar1 | 0x30; uVar4 = uVar8; if (uVar8 != 0) { uVar4 = local_28; } uVar5 = (uint)(9 < uVar5); if (uVar8 != 0) { uVar5 = uVar4; } param_1 = param_1 + -1; } while (uVar5 != 0); } if ((int)param_4 < 0) { bVar1 = 0x2d; } else { if ((param_2 & 0x800) == 0) { return param_1; } bVar1 = 0x2b; } param_1[-1] = bVar1; pbVar7 = param_1 + -1; } } return pbVar7; } ### FUNC FUN_00042d68 @ 00042d68 byte * FUN_00042d68(int param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; byte *pbVar2; int iVar3; byte *pbVar4; byte bVar5; uint uVar6; byte *pbVar7; uint uVar8; undefined8 uVar9; uint local_1c; uVar9 = CONCAT44(param_4,param_3); if (param_3 == 0 && param_4 == 0) { *(undefined1 *)(param_1 + -1) = 0x30; pbVar4 = (byte *)(param_1 + -1); if ((param_2 & 0x830) == 0x800) { *(undefined1 *)(param_1 + -2) = 0x2b; pbVar4 = (byte *)(param_1 + -2); } } else { local_1c = 1; if ((param_2 & 0x38) == 0x10) { if ((int)(param_2 << 0x11) < 0) { iVar3 = std::priv::__hex_char_table_hi(); } else { iVar3 = std::priv::__hex_char_table_lo(); } pbVar2 = (byte *)(param_1 + -2); do { pbVar7 = pbVar2; pbVar7[1] = *(byte *)(iVar3 + (param_3 & 0xf)); pbVar2 = pbVar7 + -1; param_3 = param_4 << 0x1c | param_3 >> 4; param_4 = param_4 >> 4; } while (param_3 != 0 || param_4 != 0); pbVar4 = pbVar7 + 1; if ((param_2 & 0x200) != 0) { bVar5 = *(byte *)(iVar3 + 0x10); *pbVar2 = 0x30; *pbVar7 = bVar5; pbVar4 = pbVar2; } } else if ((param_2 & 0x38) == 0x20) { pbVar2 = (byte *)(param_1 + -1); do { pbVar4 = pbVar2; *pbVar4 = (byte)param_3 & 7 | 0x30; pbVar2 = pbVar4 + -1; param_3 = param_4 << 0x1d | param_3 >> 3; param_4 = param_4 >> 3; } while (param_3 != 0 || param_4 != 0); if ((param_2 & 0x200) != 0) { *pbVar2 = 0x30; pbVar4 = pbVar2; } } else { pbVar2 = (byte *)(param_1 + -1); do { pbVar4 = pbVar2; uVar8 = (uint)((ulonglong)uVar9 >> 0x20); uVar6 = (uint)uVar9; bVar5 = 10; uVar9 = __aeabi_uldivmod(uVar6,uVar8,10,0); *pbVar4 = bVar5 | 0x30; uVar1 = uVar8; if (uVar8 != 0) { uVar1 = local_1c; } uVar6 = (uint)(9 < uVar6); if (uVar8 != 0) { uVar6 = uVar1; } pbVar2 = pbVar4 + -1; } while (uVar6 != 0); if ((param_2 & 0x800) != 0) { *pbVar2 = 0x2b; pbVar4 = pbVar2; } } } return pbVar4; } ### FUNC FUN_00042e96 @ 00042e96 void FUN_00042e96(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_00042fc0 @ 00042fc0 void FUN_00042fc0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11,undefined4 param_12) { undefined1 local_14 [4]; local_14[0] = 1; FUN_00043000(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11, param_12,local_14,0); return; } ### FUNC FUN_00043000 @ 00043000 void FUN_00043000(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5,int param_6 ,uint param_7,int param_8,int param_9,uint *param_10,int *param_11,char *param_12) { locale *this; int *piVar1; int *piVar2; int *piVar3; uint uVar4; undefined4 uVar5; undefined4 uVar6; int iVar7; undefined4 uVar8; char cVar9; int iVar10; uint uVar11; int iVar12; undefined4 local_1d4; int local_1c4; int local_19c; int *local_190; int local_18c; undefined2 local_188; char local_184; int *local_180; int local_17c; undefined2 local_178; char local_174; int local_170 [4]; int *local_160; int *local_15c; int *local_158; int local_154; undefined4 local_150; char local_14c; int local_148 [16]; undefined4 local_108; int *local_104; int local_100 [16]; int *local_c0; int *local_bc; int local_b8 [16]; int *local_78; int *local_74; int local_70 [16]; int *local_30; int *local_2c; undefined4 local_28; locale alStack_24 [4]; int *local_20; int local_1c; undefined4 local_18; local_20 = param_2; local_1c = param_3; local_18 = param_4; if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { if ((int *)param_2[2] < (int *)param_2[3]) { local_1c = *(int *)param_2[2]; } else { local_1c = (**(code **)(*param_2 + 0x20))(param_2); } local_18 = CONCAT22(local_18._2_2_,0x100); param_4 = (uint)(local_1c == -1); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } local_19c = param_6; if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { if ((int *)param_5[2] < (int *)param_5[3]) { local_19c = *(int *)param_5[2]; } else { local_19c = (**(code **)(*param_5 + 0x20))(); } param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100; } if ((param_4 & 0xff) == (param_7 & 0xff)) { *param_10 = *param_10 | 2; *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; return; } this = (locale *)std::locale::locale(alStack_24,(locale *)(param_9 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::moneypunct::id); piVar2 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::moneypunct::id); piVar3 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::ctype::id); if (param_8 == 1) { local_28 = (**(code **)(*piVar2 + 0x28))(); (**(code **)(*piVar2 + 0x1c))(local_70); (**(code **)(*piVar2 + 0x18))(local_b8); } else { local_28 = (**(code **)(*piVar1 + 0x28))(); (**(code **)(*piVar1 + 0x1c))(local_70); (**(code **)(*piVar1 + 0x18))(local_b8); } uVar4 = *(uint *)(param_9 + 4); local_1c4 = 1; local_100[0] = 0; local_1d4 = 0; iVar10 = -1; local_c0 = local_100; local_bc = local_100; do { switch(alStack_24[iVar10 + -3]) { case (locale)0x0: cVar9 = local_18._1_1_; while( true ) { if ((local_20 != (int *)0x0) && (cVar9 == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { if ((int *)param_5[2] < (int *)param_5[3]) { local_19c = *(int *)param_5[2]; } else { local_19c = (**(code **)(*param_5 + 0x20))(param_5); } param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100; } if ((local_18 & 0xff) == (param_7 & 0xff)) break; if (local_18._1_1_ == '\0') { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } iVar7 = (**(code **)(*piVar3 + 8))(piVar3,1,local_1c); if (iVar7 != 1) break; uVar11 = local_20[2]; if (uVar11 < (uint)local_20[3]) { LAB_0004350e: local_20[2] = uVar11 + 4; } else { (**(code **)(*local_20 + 0x24))(); } LAB_00043512: local_18._0_2_ = (ushort)(byte)local_18; cVar9 = '\0'; } break; case (locale)0x1: if (local_18._1_1_ == '\0') { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } iVar7 = (**(code **)(*piVar3 + 8))(piVar3,1,local_1c); if (iVar7 != 0) { uVar11 = local_20[2]; if (uVar11 < (uint)local_20[3]) goto LAB_0004350e; (**(code **)(*local_20 + 0x24))(); goto LAB_00043512; } LAB_000437c4: *param_10 = 4; *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; goto LAB_00043760; case (locale)0x2: if (param_8 == 1) { (**(code **)(*piVar2 + 0x14))(local_148); } else { (**(code **)(*piVar1 + 0x14))(local_148); } FUN_00043930(&local_158,local_20,local_1c,local_18,param_5,local_19c,param_7,local_104, local_108); if (((uVar4 & 0x200) != 0) && (local_14c == '\0')) { *param_10 = 4; } local_18 = CONCAT22(local_18._2_2_,(short)local_150); local_1c = local_154; local_20 = local_158; if ((local_104 != local_148) && (local_104 != (int *)0x0)) { if ((uint)(local_148[0] - (int)local_104) < 0x81) { std::__node_alloc::_M_deallocate(local_104,local_148[0] - (int)local_104); } else { operator_delete(local_104); } } break; case (locale)0x3: if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { if ((int *)param_5[2] < (int *)param_5[3]) { local_19c = *(int *)param_5[2]; } else { local_19c = (**(code **)(*param_5 + 0x20))(param_5); } param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100; } if ((local_18 & 0xff) == (param_7 & 0xff)) { if (local_74 != local_78) { if (local_2c != local_30) goto LAB_000437c4; *param_12 = '\0'; } } else if (local_74 == local_78) { if (local_2c != local_30) { if (local_18._1_1_ == '\0') { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if (local_1c == *local_2c) { uVar11 = local_20[2]; if (uVar11 < (uint)local_20[3]) { LAB_000434ea: local_20[2] = uVar11 + 4; } else { (**(code **)(*local_20 + 0x24))(); } LAB_000434f6: local_18._0_2_ = (ushort)(byte)local_18; *param_12 = '\0'; } } } else { if (local_18._1_1_ == '\0') { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if (local_1c == *local_74) { if ((uint)local_20[2] < (uint)local_20[3]) { local_20[2] = local_20[2] + 4; } else { (**(code **)(*local_20 + 0x24))(); } local_18._0_2_ = (ushort)(byte)local_18; } else if (local_2c != local_30) { if (local_1c == *local_2c) { uVar11 = local_20[2]; if (uVar11 < (uint)local_20[3]) goto LAB_000434ea; (**(code **)(*local_20 + 0x24))(); goto LAB_000434f6; } goto LAB_000437c4; } } break; case (locale)0x4: if (param_8 == 1) { uVar8 = (**(code **)(*piVar2 + 8))(); uVar5 = (**(code **)(*piVar2 + 0x20))(); (**(code **)(*piVar2 + 0x10))(local_170); } else { uVar8 = (**(code **)(*piVar1 + 8))(); uVar5 = (**(code **)(*piVar1 + 0x20))(); (**(code **)(*piVar1 + 0x10))(local_170); } local_148[0] = CONCAT31(local_148[0]._1_3_,1); uVar6 = local_1d4; if (local_15c != local_160) { if (param_8 == 1) { uVar6 = (**(code **)(*piVar2 + 0xc))(); } else { uVar6 = (**(code **)(*piVar1 + 0xc))(); } } iVar7 = FUN_00043a78(&local_20,param_5,local_19c,param_7,local_100,piVar3,uVar8,uVar5,uVar6, local_170,local_148); if ((char)local_148[0] == '\0') { *param_10 = *param_10 | 4; } iVar12 = 5; if (iVar7 == 0) { *param_10 = 4; *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; iVar12 = local_1c4; } if ((local_15c != local_170) && (local_15c != (int *)0x0)) { if ((uint)(local_170[0] - (int)local_15c) < 0x81) { std::__node_alloc::_M_deallocate(local_15c,local_170[0] - (int)local_15c); } else { operator_delete(local_15c); } } if (iVar12 != 5) goto LAB_00043760; } iVar10 = iVar10 + 1; } while (iVar10 < 3); if (*param_12 == '\0') { if (1 < (uint)((int)local_30 - (int)local_2c >> 2)) { FUN_00043930(&local_190,local_20,local_1c,local_18,param_5,local_19c,param_7,local_2c + 1, local_30); local_18 = CONCAT22(local_18._2_2_,local_188); local_1c = local_18c; local_20 = local_190; if (local_184 == '\0') { *param_10 = *param_10 | 4; } } if (-1 < (int)((uint)(byte)*param_10 << 0x1d)) { uVar8 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d); FUN_00044304(param_11,1,uVar8); FUN_000441a0(param_11,local_bc,local_c0); } } else { if (1 < (uint)((int)local_78 - (int)local_74 >> 2)) { FUN_00043930(&local_180,local_20,local_1c,local_18,param_5,local_19c,param_7,local_74 + 1, local_78); local_18 = CONCAT22(local_18._2_2_,local_178); local_1c = local_17c; local_20 = local_180; if (local_174 == '\0') { *param_10 = *param_10 | 4; } } if ((local_100 != param_11) && ((*param_10 & 4) == 0)) { FUN_0004413c(param_11,local_bc,local_c0); } } if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) { if ((int *)local_20[2] < (int *)local_20[3]) { local_1c = *(int *)local_20[2]; } else { local_1c = (**(code **)(*local_20 + 0x20))(); } local_18 = CONCAT22(local_18._2_2_,0x100); local_18 = CONCAT31(local_18._1_3_,local_1c == -1); } if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) { if ((int *)param_5[2] < (int *)param_5[3]) { iVar10 = *(int *)param_5[2]; } else { iVar10 = (**(code **)(*param_5 + 0x20))(); } param_7 = (uint)(iVar10 == -1); } if ((local_18 & 0xff) == (param_7 & 0xff)) { *param_10 = *param_10 | 2; } *param_1 = local_20; param_1[1] = local_1c; param_1[2] = local_18; LAB_00043760: if ((local_bc != local_100) && (local_bc != (int *)0x0)) { if ((uint)(local_100[0] - (int)local_bc) < 0x81) { std::__node_alloc::_M_deallocate(local_bc,local_100[0] - (int)local_bc); } else { operator_delete(local_bc); } } if ((local_74 != local_b8) && (local_74 != (int *)0x0)) { if ((uint)(local_b8[0] - (int)local_74) < 0x81) { std::__node_alloc::_M_deallocate(local_74,local_b8[0] - (int)local_74); } else { operator_delete(local_74); } } if ((local_2c != local_70) && (local_2c != (int *)0x0)) { if ((uint)(local_70[0] - (int)local_2c) < 0x81) { std::__node_alloc::_M_deallocate(local_2c,local_70[0] - (int)local_2c); } else { operator_delete(local_2c); } } std::locale::~locale(alStack_24); return; } ### FUNC FUN_000438b2 @ 000438b2 undefined4 FUN_000438b2(undefined4 param_1,undefined4 param_2,undefined4 param_3) { undefined4 uVar1; undefined1 auStack_30 [4]; uint local_2c [4]; uint *local_1c; uint *local_18; local_1c = local_2c; local_2c[0] = local_2c[0] & 0xffffff00; local_18 = local_1c; uVar1 = FUN_0004461c(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30); if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) { if (local_2c[0] - (int)local_18 < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } return uVar1; } ### FUNC FUN_00043930 @ 00043930 void FUN_00043930(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5, undefined4 param_6,uint param_7,int *param_8,int *param_9) { int iVar1; bool bVar2; while( true ) { if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { if ((int *)param_2[2] < (int *)param_2[3]) { param_3 = *(int *)param_2[2]; } else { param_3 = (**(code **)(*param_2 + 0x20))(); } param_4 = param_4 & 0xffff0000 | (uint)(param_3 == -1) | 0x100; } if ((param_5 != (int *)0x0) && ((param_7 & 0xff00) == 0)) { if ((int *)param_5[2] < (int *)param_5[3]) { iVar1 = *(int *)param_5[2]; } else { iVar1 = (**(code **)(*param_5 + 0x20))(param_5); } param_7 = iVar1 == -1 | 0x100; } bVar2 = param_9 == param_8; if ((param_9 == param_8) || ((param_4 & 0xff) == (param_7 & 0xff))) break; if ((param_4 & 0xff00) == 0) { if ((int *)param_2[2] < (int *)param_2[3]) { param_3 = *(int *)param_2[2]; } else { param_3 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = param_4 & 0xffff0000 | (uint)(param_3 == -1) | 0x100; } bVar2 = false; if (param_3 != *param_8) break; if ((uint)param_2[2] < (uint)param_2[3]) { param_2[2] = param_2[2] + 4; } else { (**(code **)(*param_2 + 0x24))(param_2); } param_4 = param_4 & 0xffff00ff; param_8 = param_8 + 1; } *param_1 = param_2; param_1[1] = param_3; param_1[2] = param_4; *(bool *)(param_1 + 3) = bVar2; return; } ### FUNC FUN_00043a78 @ 00043a78 undefined4 FUN_00043a78(int *param_1,int *param_2,undefined4 param_3,uint param_4,int *param_5,int *param_6, int param_7,int param_8,int param_9,int param_10,char *param_11) { char cVar1; int *piVar2; int iVar3; char *pcVar4; undefined4 *puVar5; uint uVar6; char *pcVar7; uint uVar8; char *pcVar9; uint uVar10; char *pcVar11; char *local_c8; int local_c4; uint local_a8; char local_94 [128]; piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) { if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } if (((param_4 << 0x10) >> 0x18 == 0) && (param_2 != (int *)0x0)) { if ((int *)param_2[2] < (int *)param_2[3]) { iVar3 = *(int *)param_2[2]; } else { iVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = iVar3 == -1 | 0x100; } if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) { return 0; } if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3); if (iVar3 != 1) { return 0; } local_c8 = (char *)0x0; if (*(int *)(param_10 + 0x14) != *(int *)(param_10 + 0x10)) { local_c8 = local_94; } local_c4 = param_8; do { cVar1 = '\0'; while( true ) { piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) { if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } local_a8 = 0x3ffffffe; if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) { if ((int *)param_2[2] < (int *)param_2[3]) { iVar3 = *(int *)param_2[2]; } else { iVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = iVar3 == -1 | 0x100; } pcVar4 = local_c8; if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) goto LAB_00043d7e; if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3); if (iVar3 != 1) break; cVar1 = cVar1 + '\x01'; if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 4; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; if ((int *)param_5[0x11] == param_5) { piVar2 = (int *)param_5[0x10]; if ((int)piVar2 - (int)param_5 >> 2 == 0xf) goto LAB_00043cde; } else { piVar2 = (int *)param_5[0x10]; if (*param_5 - (int)piVar2 >> 2 == 1) { LAB_00043cde: uVar6 = (int)piVar2 - param_5[0x11] >> 2; uVar10 = uVar6; if (uVar6 < 2) { uVar10 = 1; } uVar8 = uVar6 + uVar10 + 1; uVar10 = 0x3ffffffe; if (uVar6 <= uVar8) { uVar10 = uVar8; } uVar6 = 0x3ffffffe; if (uVar8 < 0x3fffffff) { uVar6 = uVar10; } FUN_00044094(param_5,uVar6); piVar2 = (int *)param_5[0x10]; } } *piVar2 = iVar3; piVar2[1] = 0; param_5[0x10] = (int)(piVar2 + 1); } pcVar4 = (char *)0x0; if (local_c8 == (char *)0x0) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } pcVar4 = local_c8; if (iVar3 != param_9) break; *local_c8 = cVar1; local_c8 = local_c8 + 1; piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 4; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; } while( true ); LAB_00043d7e: pcVar11 = *(char **)(param_10 + 0x10); pcVar9 = *(char **)(param_10 + 0x14); if (pcVar9 == pcVar11) { *param_11 = '\x01'; LAB_00043e5c: piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 4; } else { (**(code **)(*piVar2 + 0x24))(); } cVar1 = '\0'; *(undefined1 *)((int)param_1 + 9) = 0; while( true ) { piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (cVar1 == '\0')) { if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) { if ((int *)param_2[2] < (int *)param_2[3]) { iVar3 = *(int *)param_2[2]; } else { iVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = iVar3 == -1 | 0x100; } if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3); if (iVar3 != 1) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } piVar2 = (int *)*param_1; if ((uint)piVar2[2] < (uint)piVar2[3]) { piVar2[2] = piVar2[2] + 4; } else { (**(code **)(*piVar2 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; if ((int *)param_5[0x11] == param_5) { piVar2 = (int *)param_5[0x10]; if ((int)piVar2 - (int)param_5 >> 2 == 0xf) goto LAB_00044030; } else { piVar2 = (int *)param_5[0x10]; if (*param_5 - (int)piVar2 >> 2 == 1) { LAB_00044030: uVar6 = (int)piVar2 - param_5[0x11] >> 2; uVar10 = uVar6; if (uVar6 < 2) { uVar10 = 1; } uVar8 = uVar6 + uVar10 + 1; uVar10 = local_a8; if (uVar6 <= uVar8) { uVar10 = uVar8; } uVar6 = local_a8; if (uVar8 < 0x3fffffff) { uVar6 = uVar10; } FUN_00044094(param_5,uVar6); piVar2 = (int *)param_5[0x10]; } } *piVar2 = iVar3; piVar2[1] = 0; param_5[0x10] = (int)(piVar2 + 1); local_c4 = local_c4 + -1; cVar1 = *(char *)((int)param_1 + 9); } *param_11 = local_c4 == 0 && *param_11 != '\0'; } else { pcVar7 = local_94; if (pcVar4 != pcVar7) { *pcVar4 = cVar1; pcVar7 = pcVar4 + 1; pcVar11 = *(char **)(param_10 + 0x10); pcVar9 = *(char **)(param_10 + 0x14); } cVar1 = std::priv::__valid_grouping(local_94,pcVar7,pcVar9,pcVar11); *param_11 = cVar1; piVar2 = (int *)*param_1; if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) { if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) { if ((int *)param_2[2] < (int *)param_2[3]) { iVar3 = *(int *)param_2[2]; } else { iVar3 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = iVar3 == -1 | 0x100; } if ((uint)*(byte *)(param_1 + 2) != (param_4 & 0xff)) { if (*(char *)((int)param_1 + 9) == '\0') { piVar2 = (int *)*param_1; if ((int *)piVar2[2] < (int *)piVar2[3]) { iVar3 = *(int *)piVar2[2]; } else { iVar3 = (**(code **)(*piVar2 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } if (iVar3 == param_7) goto LAB_00043e5c; } if (param_8 != 0) { do { if ((int *)param_5[0x11] == param_5) { puVar5 = (undefined4 *)param_5[0x10]; if ((int)puVar5 - (int)param_5 >> 2 == 0xf) goto LAB_00043ea2; } else { puVar5 = (undefined4 *)param_5[0x10]; if (*param_5 - (int)puVar5 >> 2 == 1) { LAB_00043ea2: uVar6 = (int)puVar5 - param_5[0x11] >> 2; uVar10 = uVar6; if (uVar6 < 2) { uVar10 = 1; } uVar8 = uVar6 + uVar10 + 1; uVar10 = local_a8; if (uVar6 <= uVar8) { uVar10 = uVar8; } uVar6 = local_a8; if (uVar8 < 0x3fffffff) { uVar6 = uVar10; } FUN_00044094(param_5,uVar6); puVar5 = (undefined4 *)param_5[0x10]; } } *puVar5 = 0x30; puVar5[1] = 0; param_5[0x10] = (int)(puVar5 + 1); param_8 = param_8 + -1; } while (param_8 != 0); } } return 1; } ### FUNC FUN_00044094 @ 00044094 void FUN_00044094(int *param_1,uint param_2) { int *piVar1; undefined4 uVar2; int iVar3; int *piVar4; int iVar5; int *piVar6; int *piVar7; uint local_1c; uint local_18; if (param_2 >> 0x1e == 0) { piVar6 = (int *)0x0; if (param_2 == 0) { local_1c = 0; } else { param_2 = param_2 << 2; local_18 = param_2; if (param_2 < 0x81) { piVar6 = (int *)std::__node_alloc::_M_allocate(&local_18); param_2 = local_18; } else { piVar6 = (int *)operator_new(param_2); } local_1c = param_2 >> 2; } piVar1 = (int *)param_1[0x11]; piVar7 = piVar6; if (0 < param_1[0x10] - (int)piVar1) { iVar3 = ((uint)(param_1[0x10] - (int)piVar1) >> 2) + 1; piVar4 = piVar1; do { iVar5 = *piVar4; piVar4 = piVar4 + 1; *piVar7 = iVar5; piVar7 = piVar7 + 1; iVar3 = iVar3 + -1; } while (1 < iVar3); } *piVar7 = 0; if ((piVar1 != param_1) && (piVar1 != (int *)0x0)) { if ((uint)(*param_1 - (int)piVar1) < 0x81) { std::__node_alloc::_M_deallocate(piVar1,*param_1 - (int)piVar1); } else { operator_delete(piVar1); } } param_1[0x10] = (int)piVar7; param_1[0x11] = (int)piVar6; *param_1 = (int)(piVar6 + local_1c); return; } FUN_00030824(4); uVar2 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC FUN_0004413c @ 0004413c int FUN_0004413c(int param_1,wchar_t *param_2,int param_3) { wchar_t *pwVar1; size_t __n; uint __n_00; wchar_t *__s1; __n_00 = param_3 - (int)param_2 >> 2; pwVar1 = *(wchar_t **)(param_1 + 0x44); __n = *(int *)(param_1 + 0x40) - (int)pwVar1 >> 2; if (__n < __n_00) { wmemmove(pwVar1,param_2,__n); FUN_000441a0(param_1,(int)param_2 + (*(int *)(param_1 + 0x40) - *(int *)(param_1 + 0x44)), param_3); } else { wmemmove(pwVar1,param_2,__n_00); pwVar1 = *(wchar_t **)(param_1 + 0x40); __s1 = (wchar_t *)(*(int *)(param_1 + 0x44) + __n_00 * 4); if (__s1 != pwVar1) { wmemmove(__s1,pwVar1,1); *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) - ((int)pwVar1 - (int)__s1); } } return param_1; } ### FUNC FUN_000441a0 @ 000441a0 int * FUN_000441a0(int *param_1,int *param_2,int *param_3) { uint uVar1; int *piVar2; undefined4 uVar3; int iVar4; int *piVar5; uint uVar6; uint uVar7; int *piVar8; uint uVar9; int iVar10; int *piVar11; uint local_24; uint local_18; if (param_2 != param_3) { uVar1 = (int)param_3 - (int)param_2; uVar6 = (int)uVar1 >> 2; piVar2 = (int *)param_1[0x11]; if (piVar2 == param_1) { piVar8 = (int *)param_1[0x10]; uVar9 = 0x10 - ((int)piVar8 - (int)param_1 >> 2); } else { piVar8 = (int *)param_1[0x10]; uVar9 = *param_1 - (int)piVar8 >> 2; } if (uVar6 < uVar9) { piVar2 = param_2 + 1; if (0 < (int)param_3 - (int)piVar2) { iVar10 = ((uint)((int)param_3 - (int)piVar2) >> 2) + 1; piVar5 = piVar8; do { piVar5 = piVar5 + 1; iVar4 = *piVar2; piVar2 = piVar2 + 1; *piVar5 = iVar4; iVar10 = iVar10 + -1; } while (1 < iVar10); } piVar8[uVar6] = 0; *piVar8 = *param_2; param_1[0x10] = (int)(piVar8 + uVar6); } else { uVar9 = (int)piVar8 - (int)piVar2 >> 2; if (0x3ffffffe - uVar9 < uVar6) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar7 = uVar9; if (uVar9 <= uVar6) { uVar7 = uVar6; } uVar7 = uVar9 + uVar7 + 1; uVar6 = 0x3ffffffe; if (uVar9 <= uVar7) { uVar6 = uVar7; } local_24 = 0x3ffffffe; if (uVar7 < 0x3fffffff) { local_24 = uVar6; } if (0x3fffffff < local_24) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } piVar5 = (int *)0x0; if (local_24 == 0) { local_24 = 0; } else { local_24 = local_24 << 2; local_18 = local_24; if (local_24 < 0x81) { piVar5 = (int *)std::__node_alloc::_M_allocate(&local_18); local_24 = local_18; } else { piVar5 = (int *)operator_new(local_24); } piVar8 = (int *)param_1[0x10]; piVar2 = (int *)param_1[0x11]; local_24 = local_24 >> 2; } piVar11 = piVar5; if (0 < (int)piVar8 - (int)piVar2) { iVar10 = ((uint)((int)piVar8 - (int)piVar2) >> 2) + 1; piVar8 = piVar2; do { iVar4 = *piVar8; piVar8 = piVar8 + 1; *piVar11 = iVar4; piVar11 = piVar11 + 1; iVar10 = iVar10 + -1; } while (1 < iVar10); } if (0 < (int)uVar1) { iVar10 = (uVar1 >> 2) + 1; do { iVar4 = *param_2; param_2 = param_2 + 1; *piVar11 = iVar4; piVar11 = piVar11 + 1; iVar10 = iVar10 + -1; } while (1 < iVar10); } *piVar11 = 0; if ((piVar2 != param_1) && (piVar2 != (int *)0x0)) { if ((uint)(*param_1 - (int)piVar2) < 0x81) { std::__node_alloc::_M_deallocate(piVar2,*param_1 - (int)piVar2); } else { operator_delete(piVar2); } } param_1[0x10] = (int)piVar11; param_1[0x11] = (int)piVar5; *param_1 = (int)(piVar5 + local_24); } } return param_1; } ### FUNC FUN_00044304 @ 00044304 wchar_t * FUN_00044304(wchar_t *param_1,uint param_2,wchar_t param_3) { wchar_t *pwVar1; uint uVar2; uint __n; wchar_t *__s1; undefined1 auStack_60 [4]; int local_5c [17]; int *local_18; pwVar1 = (wchar_t *)param_1[0x11]; __n = param_1[0x10] - (int)pwVar1 >> 2; if (__n < param_2) { uVar2 = 0xf; if (param_1 != pwVar1) { uVar2 = (*param_1 - (int)pwVar1 >> 2) - 1; } if (param_2 < uVar2) { wmemset(pwVar1,param_3,__n); FUN_000443dc(param_1,param_2 - (param_1[0x10] - param_1[0x11] >> 2),param_3); } else { FUN_00044474(local_5c,param_2,param_3,auStack_60); FUN_00044510(param_1,local_5c); if ((local_18 != local_5c) && (local_18 != (int *)0x0)) { if ((uint)(local_5c[0] - (int)local_18) < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18); } else { operator_delete(local_18); } } } } else { wmemset(pwVar1,param_3,param_2); pwVar1 = (wchar_t *)param_1[0x10]; __s1 = (wchar_t *)(param_1[0x11] + param_2 * 4); if (__s1 != pwVar1) { wmemmove(__s1,pwVar1,1); param_1[0x10] = param_1[0x10] - ((int)pwVar1 - (int)__s1); } } return param_1; } ### FUNC FUN_000443dc @ 000443dc int * FUN_000443dc(int *param_1,uint param_2,undefined4 param_3) { undefined4 *puVar1; undefined4 *puVar2; uint uVar3; uint uVar4; uint uVar5; if (param_2 != 0) { puVar2 = (undefined4 *)param_1[0x10]; uVar3 = (int)puVar2 - param_1[0x11] >> 2; if (0x3ffffffe - uVar3 < param_2) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (param_1 == (int *)param_1[0x11]) { uVar4 = 0x10 - ((int)puVar2 - (int)param_1 >> 2); } else { uVar4 = *param_1 - (int)puVar2 >> 2; } if (uVar4 <= param_2) { uVar4 = uVar3; if (uVar3 <= param_2) { uVar4 = param_2; } uVar5 = uVar3 + uVar4 + 1; uVar4 = 0x3ffffffe; if (uVar3 <= uVar5) { uVar4 = uVar5; } uVar3 = 0x3ffffffe; if (uVar5 < 0x3fffffff) { uVar3 = uVar4; } FUN_00044094(param_1,uVar3); puVar2 = (undefined4 *)param_1[0x10]; } uVar3 = param_2; puVar1 = puVar2; if (0 < (int)(param_2 * 4 + -4)) { do { puVar1[1] = param_3; uVar3 = uVar3 - 1; puVar1 = puVar1 + 1; } while (1 < (int)uVar3); } puVar2[param_2] = 0; *puVar2 = param_3; param_1[0x10] = (int)(puVar2 + param_2); } return param_1; } ### FUNC FUN_00044474 @ 00044474 int * FUN_00044474(int *param_1,uint param_2,int param_3) { uint uVar1; int *piVar2; undefined4 uVar3; int *piVar4; uint uVar5; uint local_18; param_1[0x10] = (int)param_1; param_1[0x11] = (int)param_1; uVar5 = param_2 + 1; if (0x3ffffffe < param_2) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } piVar2 = param_1; if (0x10 < uVar5) { if (0x3fffffff < uVar5) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } uVar1 = uVar5 * 4; local_18 = uVar1; if (uVar1 < 0x81) { piVar2 = (int *)std::__node_alloc::_M_allocate(&local_18); } else { piVar2 = (int *)operator_new(uVar1); local_18 = uVar1; } param_1[0x10] = (int)piVar2; param_1[0x11] = (int)piVar2; *param_1 = (int)piVar2 + (local_18 & 0xfffffffc); } piVar4 = piVar2 + param_2; if (0 < (int)(param_2 * 4)) { do { *piVar2 = param_3; piVar2 = piVar2 + 1; uVar5 = uVar5 - 1; } while (1 < (int)uVar5); } param_1[0x10] = (int)piVar4; *piVar4 = 0; return param_1; } ### FUNC FUN_00044510 @ 00044510 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_00044510(undefined4 *param_1,undefined4 *param_2) { undefined4 uVar1; undefined4 *puVar2; undefined4 uVar3; undefined4 uVar4; undefined4 uVar5; int iVar6; undefined4 uVar7; undefined4 uVar8; undefined4 uVar9; undefined4 uVar10; undefined4 uVar11; undefined4 uVar12; undefined4 uVar13; undefined4 *puVar14; undefined4 uVar15; undefined4 uVar16; undefined4 uVar17; undefined4 uVar18; undefined4 uVar19; undefined4 uVar20; undefined4 uVar21; undefined4 uVar22; puVar2 = (undefined4 *)param_2[0x11]; puVar14 = (undefined4 *)param_1[0x11]; if (puVar14 == param_1) { if (puVar2 != param_2) { FUN_00044510(); return; } uVar1 = *param_1; uVar21 = param_1[1]; uVar9 = param_1[2]; uVar16 = param_1[3]; uVar7 = param_1[4]; uVar3 = param_1[5]; uVar10 = param_1[6]; uVar17 = param_1[7]; uVar8 = param_1[8]; uVar4 = param_1[9]; uVar11 = param_1[10]; uVar18 = param_1[0xb]; uVar15 = param_1[0xc]; uVar5 = param_1[0xd]; uVar12 = param_1[0xe]; uVar19 = param_1[0xf]; uVar13 = param_2[1]; uVar20 = param_2[2]; uVar22 = param_2[3]; *param_1 = *param_2; param_1[1] = uVar13; param_1[2] = uVar20; param_1[3] = uVar22; uVar13 = param_2[5]; uVar20 = param_2[6]; uVar22 = param_2[7]; param_1[4] = param_2[4]; param_1[5] = uVar13; param_1[6] = uVar20; param_1[7] = uVar22; uVar13 = param_2[9]; uVar20 = param_2[10]; uVar22 = param_2[0xb]; param_1[8] = param_2[8]; param_1[9] = uVar13; param_1[10] = uVar20; param_1[0xb] = uVar22; uVar13 = param_2[0xd]; uVar20 = param_2[0xe]; uVar22 = param_2[0xf]; param_1[0xc] = param_2[0xc]; param_1[0xd] = uVar13; param_1[0xe] = uVar20; param_1[0xf] = uVar22; *param_2 = uVar1; param_2[1] = uVar21; param_2[2] = uVar9; param_2[3] = uVar16; param_2[4] = uVar7; param_2[5] = uVar3; param_2[6] = uVar10; param_2[7] = uVar17; param_2[8] = uVar8; param_2[9] = uVar4; param_2[10] = uVar11; param_2[0xb] = uVar18; param_2[0xc] = uVar15; param_2[0xd] = uVar5; param_2[0xe] = uVar12; param_2[0xf] = uVar19; iVar6 = param_1[0x10]; param_1[0x10] = param_1[0x11] + (param_2[0x10] - param_2[0x11]); param_2[0x10] = (int)param_2 + (iVar6 - param_1[0x11]); param_1[0x11] = puVar14; param_2[0x11] = puVar2; return; } if (puVar2 != param_2) { uVar1 = *param_1; *param_1 = *param_2; *param_2 = uVar1; uVar1 = param_1[0x11]; param_1[0x11] = param_2[0x11]; param_2[0x11] = uVar1; uVar1 = param_1[0x10]; param_1[0x10] = param_2[0x10]; param_2[0x10] = uVar1; return; } uVar1 = param_1[0x10]; uVar7 = *param_1; uVar8 = param_2[1]; uVar15 = param_2[2]; uVar21 = param_2[3]; *param_1 = *param_2; param_1[1] = uVar8; param_1[2] = uVar15; param_1[3] = uVar21; uVar8 = param_2[5]; uVar15 = param_2[6]; uVar21 = param_2[7]; param_1[4] = param_2[4]; param_1[5] = uVar8; param_1[6] = uVar15; param_1[7] = uVar21; uVar8 = param_2[9]; uVar15 = param_2[10]; uVar21 = param_2[0xb]; param_1[8] = param_2[8]; param_1[9] = uVar8; param_1[10] = uVar15; param_1[0xb] = uVar21; uVar8 = param_2[0xd]; uVar15 = param_2[0xe]; uVar21 = param_2[0xf]; param_1[0xc] = param_2[0xc]; param_1[0xd] = uVar8; param_1[0xe] = uVar15; param_1[0xf] = uVar21; param_1[0x11] = param_1; param_1[0x10] = (int)param_1 + (param_2[0x10] - (int)param_2); *puVar2 = uVar7; param_2[0x10] = uVar1; param_2[0x11] = puVar14; return; } ### FUNC FUN_0004461c @ 0004461c undefined4 FUN_0004461c(int *param_1,undefined4 *param_2,int param_3,undefined4 *param_4,int param_5, int param_6,uint param_7,int param_8) { uint *puVar1; uint uVar2; int iVar3; undefined4 uVar4; char cVar5; char *pcVar6; int iVar7; uint uVar8; int iVar9; uint uVar10; uint uVar11; int iVar12; undefined4 uVar13; undefined8 uVar14; undefined8 uVar15; undefined8 uVar16; undefined8 uVar17; uint local_9c; undefined4 local_70; int local_64; undefined4 local_60; char local_54 [64]; uVar14 = __floatsidf(param_3); uVar15 = __divdf3(0xffffffff,0x7fefffff); iVar7 = *(int *)(param_8 + 0x10); iVar9 = *(int *)(param_8 + 0x14); puVar1 = (uint *)*param_1; local_9c = 1; local_64 = param_5; if (puVar1 == (uint *)*param_2) { uVar11 = 0; pcVar6 = local_54; uVar16 = 0; } else { pcVar6 = local_54; uVar8 = 0; uVar16 = 0; cVar5 = '\0'; uVar10 = uVar8; do { local_70 = (undefined4)((ulonglong)uVar16 >> 0x20); local_60 = (undefined4)uVar16; uVar2 = *puVar1; uVar11 = uVar10; if (uVar2 == param_7 && iVar9 != iVar7) { *pcVar6 = cVar5; uVar8 = uVar8 + 1; cVar5 = '\0'; } else { iVar12 = 0xff; if (uVar2 < 0x80) { iVar12 = std::priv::__digit_val_table(uVar2); } if (param_3 <= iVar12) break; iVar3 = __aeabi_dcmpgt(local_60,local_70,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20)); cVar5 = cVar5 + '\x01'; local_64 = local_64 + 1; uVar11 = local_9c; if (iVar3 == 0) { uVar16 = __muldf3(local_60,local_70,(int)uVar14,(int)((ulonglong)uVar14 >> 0x20)); uVar17 = __floatsidf(iVar12); uVar16 = __adddf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17, (int)((ulonglong)uVar17 >> 0x20)); iVar12 = __aeabi_dcmple((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),local_60,local_70); iVar3 = __aeabi_dcmpeq(local_60,local_70,0,0); uVar11 = uVar10 | (iVar3 == 0 && iVar12 != 0); } } puVar1 = (uint *)(*param_1 + 4); *param_1 = (int)puVar1; pcVar6 = local_54 + uVar8; uVar10 = uVar11; } while (puVar1 != (uint *)*param_2); pcVar6 = local_54 + uVar8; if ((iVar9 != iVar7) && (uVar8 != 0)) { *pcVar6 = cVar5; pcVar6 = local_54 + uVar8 + 1; } } uVar13 = (undefined4)((ulonglong)uVar16 >> 0x20); local_60 = (undefined4)uVar16; uVar4 = 0; if (0 < local_64) { if (uVar11 != 0) { *param_4 = 0xffffffff; param_4[1] = 0x7fefffff; return 0; } uVar14 = __subdf3(0,0x80000000,local_60,uVar13); uVar4 = (int)((ulonglong)uVar14 >> 0x20); if (param_6 == 0) { uVar4 = uVar13; } param_4[1] = uVar4; uVar4 = (int)uVar14; if (param_6 == 0) { uVar4 = local_60; } *param_4 = uVar4; uVar4 = 1; if (iVar9 != iVar7) { uVar4 = std::priv::__valid_grouping (local_54,pcVar6,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar4; } ### FUNC FUN_000447ec @ 000447ec void FUN_000447ec(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_000448f4 @ 000448f4 void FUN_000448f4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) { FUN_000455e4(param_1,param_3,param_4,param_5,param_6,param_7,param_8,1,0); return; } ### FUNC FUN_00044920 @ 00044920 /* WARNING: Type propagation algorithm not settling */ /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_00044920(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, int param_7,int param_8) { locale *this; int *piVar1; int *piVar2; int *piVar3; int ******ppppppiVar4; undefined4 uVar5; int iVar6; int iVar7; uint uVar8; int *******pppppppiVar9; int iVar10; int *******pppppppiVar11; uint uVar12; uint uVar13; uint uVar14; uint uVar15; uint uVar16; int iVar17; int *******pppppppiVar18; uint uVar19; uint uVar20; uint uVar21; int iVar22; int ******ppppppiVar23; int iVar24; int iVar25; uint uVar26; byte bVar27; bool bVar28; undefined8 uVar29; int local_578; undefined4 local_564; int *******local_524; uint local_520; uint local_514; undefined4 *******local_510 [16]; int *******local_4d0; int ******local_4cc; undefined1 auStack_4c8 [1024]; int *******local_c8; int local_c4 [16]; int *local_84; int *local_80; int local_7c [16]; int local_3c; int *local_38; int local_34 [4]; int *local_24; int *local_20; locale alStack_1c [4]; undefined1 auStack_18 [4]; this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); piVar2 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); ppppppiVar4 = (int ******)(**(code **)(*piVar1 + 0x28))(piVar1,0x2d); uVar5 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b); iVar6 = (**(code **)(*piVar1 + 0x28))(piVar1,0x20); iVar7 = (**(code **)(*piVar1 + 0x28))(piVar1,0x30); if (param_4 == 1) { local_578 = (**(code **)(*piVar3 + 8))(); local_564 = (**(code **)(*piVar3 + 0xc))(); (**(code **)(*piVar3 + 0x10))(local_34); uVar8 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); (**(code **)(*piVar3 + 0x14))(local_7c,piVar3,*(code **)(*piVar3 + 0x14),local_34); } else { local_578 = (**(code **)(*piVar2 + 8))(); local_564 = (**(code **)(*piVar2 + 0xc))(); (**(code **)(*piVar2 + 0x10))(local_34); uVar8 = (**(code **)(*piVar2 + 0x20))(piVar2,*(code **)(*piVar2 + 0x20),local_34); (**(code **)(*piVar2 + 0x14))(local_7c,piVar2,*(code **)(*piVar2 + 0x14),local_34); } pppppppiVar9 = *(int ********)(param_7 + 0x448); pppppppiVar18 = *(int ********)(param_7 + 0x40); if (pppppppiVar9 == pppppppiVar18) { *param_1 = param_2; param_1[1] = param_3; if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { if ((uint)(local_7c[0] - (int)local_38) < 0x81) { std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); } else { operator_delete(local_38); } } if ((local_20 != local_34) && (local_20 != (int *)0x0)) { if ((uint)(local_34[0] - (int)local_20) < 0x81) { std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); } else { operator_delete(local_20); } } std::locale::~locale(alStack_1c); return; } ppppppiVar23 = *pppppppiVar9; pppppppiVar11 = pppppppiVar9 + 1; if (ppppppiVar23 != ppppppiVar4) { pppppppiVar11 = pppppppiVar9; } if (param_4 == 1) { if (ppppppiVar23 == ppppppiVar4) { (**(code **)(*piVar3 + 0x1c))(local_c4,piVar3); } else { (**(code **)(*piVar3 + 0x18))(local_c4,piVar3); } } else if (ppppppiVar23 == ppppppiVar4) { (**(code **)(*piVar2 + 0x1c))(local_c4); } else { (**(code **)(*piVar2 + 0x18))(local_c4); } local_524 = pppppppiVar18; pppppppiVar9 = pppppppiVar11; if (param_8 == 1) { while ((local_524 = pppppppiVar18, pppppppiVar9 != pppppppiVar18 && (iVar10 = (**(code **)(*piVar1 + 8))(piVar1,0x40,*pppppppiVar9), local_524 = pppppppiVar9 , iVar10 == 1))) { pppppppiVar9 = pppppppiVar9 + 1; } if (local_524 == pppppppiVar11) { *param_1 = param_2; param_1[1] = param_3; goto LAB_00045268; } } __aeabi_memclr4(auStack_4c8,0x400); local_4d0 = &local_4cc; local_4cc = (int ******)0x0; local_510[0] = &local_c8; local_c8 = &local_4cc; if (local_20 != local_24) { if (pppppppiVar11 != local_524) { FUN_00045484(local_510,pppppppiVar11,local_524,auStack_18); } FUN_0005031c(local_510,((int)local_4d0 - (int)local_c8 >> 2) - uVar8,local_34,local_564,uVar5, ppppppiVar4,0); pppppppiVar11 = local_c8; local_524 = local_4d0; } uVar12 = (int)local_524 - (int)pppppppiVar11; uVar13 = (int)uVar12 >> 2; uVar14 = uVar13 + 1; if (uVar8 == 0) { uVar14 = uVar13; } iVar10 = uVar14 + ((int)local_84 - (int)local_80 >> 2); uVar19 = *(uint *)(param_5 + 4) & 0x200; uVar14 = *(uint *)(param_5 + 0x1c); if (uVar19 != 0) { iVar10 = (local_3c - (int)local_38 >> 2) + iVar10; } if (param_4 == 1) { if (ppppppiVar23 == ppppppiVar4) { local_514 = (**(code **)(*piVar3 + 0x28))(); } else { local_514 = (**(code **)(*piVar3 + 0x24))(); } } else if (ppppppiVar23 == ppppppiVar4) { local_514 = (**(code **)(*piVar2 + 0x28))(piVar2); } else { local_514 = (**(code **)(*piVar2 + 0x24))(piVar2); } uVar15 = iVar10 + (uint)((local_514 & 0xff00) == 0x100 || (local_514 & 0xff0000) == 0x10000); iVar10 = uVar14 - uVar15; if (uVar14 <= uVar15) { iVar10 = 0; } uVar20 = *(uint *)(param_5 + 4); local_520 = param_3; if ((iVar10 != 0) && ((uVar20 & 5) == 0)) { uVar21 = param_3; if (0 < iVar10) { iVar24 = (uVar14 + 1) - uVar15; do { uVar16 = uVar21 & 0xff; uVar21 = 0; if (uVar16 != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_6; iVar22 = param_6; } else { iVar22 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar21 = 1; if (iVar22 == -1) { uVar21 = 0; } } iVar24 = iVar24 + -1; } while (1 < iVar24); } local_520 = uVar21 & 0xff | param_3 & 0xffffff00; } uVar21 = (int)(local_524 + -uVar8) - (int)pppppppiVar11; iVar22 = (uVar12 >> 2) + 1; iVar24 = 0; do { uVar16 = local_520; switch(*(undefined1 *)((int)local_510 + iVar24 + -4)) { case 1: uVar16 = 0; if ((local_520 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar6; iVar25 = iVar6; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar6); } uVar16 = 1; if (iVar25 == -1) { uVar16 = 0; } } local_520 = local_520 & 0xffffff00 | uVar16; case 0: if (iVar10 != 0 && (uVar20 & 7) == 4) { iVar25 = (uVar14 + 1) - uVar15; uVar16 = local_520; uVar26 = local_520; if (0 < iVar10) { do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_6; iVar17 = param_6; } else { iVar17 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar16 = 1; if (iVar17 == -1) { uVar16 = 0; } } iVar25 = iVar25 + -1; uVar26 = uVar16; } while (1 < iVar25); } local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; } break; case 2: if (uVar19 != 0) { if (0 < local_3c - (int)local_38) { iVar25 = ((uint)(local_3c - (int)local_38) >> 2) + 1; uVar26 = local_520; piVar1 = local_38; do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { iVar17 = *piVar1; piVar2 = (int *)param_2[5]; if (piVar2 < (int *)param_2[6]) { param_2[5] = (int)(piVar2 + 1); *piVar2 = iVar17; } else { iVar17 = (**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (iVar17 == -1) { uVar16 = 0; } } iVar25 = iVar25 + -1; piVar1 = piVar1 + 1; uVar26 = uVar16; } while (1 < iVar25); } LAB_00044f52: local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; } break; case 3: if (local_80 != local_84) { uVar16 = 0; if ((local_520 & 0xff) != 0) { iVar25 = *local_80; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar25; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (iVar25 == -1) { uVar16 = 0; } } local_520 = local_520 & 0xffffff00 | uVar16; } break; case 4: if (uVar8 == 0) { iVar25 = iVar22; uVar26 = local_520; pppppppiVar9 = pppppppiVar11; if (0 < (int)uVar12) { do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { uVar16 = 0; } } iVar25 = iVar25 + -1; uVar26 = uVar16; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } goto LAB_00044f52; } if ((int)uVar8 < (int)uVar13) { iVar25 = (uVar21 >> 2) + 1; uVar26 = local_520; pppppppiVar9 = pppppppiVar11; if (0 < (int)uVar21) { do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { uVar16 = 0; } } iVar25 = iVar25 + -1; uVar26 = uVar16; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } bVar27 = 0; if ((uVar16 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = local_578; iVar25 = local_578; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); } bVar27 = 1; if (iVar25 == -1) { bVar27 = 0; } } iVar25 = (uVar8 & 0x3fffffff) + 1; pppppppiVar9 = local_524 + -uVar8; if (0 < (int)(uVar8 * 4)) { do { bVar28 = bVar27 != 0; bVar27 = 0; if (bVar28) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } bVar27 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { bVar27 = 0; } } iVar25 = iVar25 + -1; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } } else { bVar27 = 0; if ((local_520 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar7; iVar25 = iVar7; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); } if (iVar25 != -1) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = local_578; iVar25 = local_578; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); } bVar27 = 1; if (iVar25 == -1) { bVar27 = 0; } } } iVar25 = uVar13 - uVar8; if (uVar8 != uVar13) { do { bVar28 = bVar27 != 0; bVar27 = 0; if (bVar28) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar7; iVar17 = iVar7; } else { iVar17 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); } bVar27 = 1; if (iVar17 == -1) { bVar27 = 0; } } iVar25 = iVar25 + 1; } while (iVar25 != 0); } iVar25 = iVar22; pppppppiVar9 = pppppppiVar11; if (0 < (int)uVar12) { do { bVar28 = bVar27 != 0; bVar27 = 0; if (bVar28) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } bVar27 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { bVar27 = 0; } } iVar25 = iVar25 + -1; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } } local_520 = local_520 & 0xffffff00; local_520 = local_520 | bVar27; } bVar28 = iVar24 < 3; iVar24 = iVar24 + 1; } while (bVar28); if (1 < (uint)((int)local_84 - (int)local_80 >> 2)) { piVar1 = local_80 + 1; uVar8 = local_520; if (0 < (int)local_84 - (int)piVar1) { iVar6 = ((uint)((int)local_84 - (int)piVar1) >> 2) + 1; uVar12 = local_520; do { uVar8 = 0; if ((uVar12 & 0xff) != 0) { iVar7 = *piVar1; piVar2 = (int *)param_2[5]; if (piVar2 < (int *)param_2[6]) { param_2[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_2 + 0x34))(param_2); } uVar8 = 1; if (iVar7 == -1) { uVar8 = 0; } } iVar6 = iVar6 + -1; piVar1 = piVar1 + 1; uVar12 = uVar8; } while (1 < iVar6); } local_520 = uVar8 & 0xff | local_520 & 0xffffff00; } if ((iVar10 != 0) && ((uVar20 & 6) == 0)) { uVar8 = local_520; if (0 < iVar10) { iVar6 = (uVar14 + 1) - uVar15; uVar14 = local_520; do { uVar8 = 0; if ((uVar14 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_6; iVar7 = param_6; } else { iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar8 = 1; if (iVar7 == -1) { uVar8 = 0; } } iVar6 = iVar6 + -1; uVar14 = uVar8; } while (1 < iVar6); } local_520 = uVar8 & 0xff | local_520 & 0xffffff00; } *param_1 = param_2; param_1[1] = local_520; if ((((undefined4 ********)local_c8 != local_510) && (local_c8 != (int *******)0x0)) && (&local_4cc != local_c8)) { if ((uint)((int)local_510[0] - (int)local_c8) < 0x81) { std::__node_alloc::_M_deallocate(local_c8,(int)local_510[0] - (int)local_c8); } else { operator_delete(local_c8); } } LAB_00045268: if (local_80 == local_c4) { FUN_00044a98(); return; } if (local_80 != (int *)0x0) { uVar29 = CONCAT44(local_c4[0] - (int)local_80,local_80); if (0x80 < (uint)(local_c4[0] - (int)local_80)) { operator_delete(local_80); uVar29 = FUN_00044a98(); } std::__node_alloc::_M_deallocate((void *)uVar29,(uint)((ulonglong)uVar29 >> 0x20)); uVar5 = FUN_00044a98(); if ((local_80 != local_c4) && (local_80 != (int *)0x0)) { if ((uint)(local_c4[0] - (int)local_80) < 0x81) { std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80); } else { operator_delete(local_80); } } if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { if ((uint)(local_7c[0] - (int)local_38) < 0x81) { std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); } else { operator_delete(local_38); } } if ((local_20 != local_34) && (local_20 != (int *)0x0)) { if ((uint)(local_34[0] - (int)local_20) < 0x81) { std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); } else { operator_delete(local_20); } } std::locale::~locale(alStack_1c); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar5); } FUN_00044a98(); return; } ### FUNC FUN_00044a98 @ 00044a98 void FUN_00044a98(void) { undefined1 *puVar1; int in_stack_00000060; int *in_stack_0000007c; puVar1 = *(undefined1 **)(in_stack_00000060 + 4); if ((puVar1 != &stack0x0000052c) && (puVar1 != (undefined1 *)0x0)) { if ((uint)(*in_stack_0000007c - (int)puVar1) < 0x81) { std::__node_alloc::_M_deallocate(puVar1,*in_stack_0000007c - (int)puVar1); } else { operator_delete(puVar1); } } puVar1 = (undefined1 *)in_stack_0000007c[0x17]; if ((puVar1 != &stack0x00000574) && (puVar1 != (undefined1 *)0x0)) { if ((uint)(in_stack_0000007c[0x12] - (int)puVar1) < 0x81) { std::__node_alloc::_M_deallocate(puVar1,in_stack_0000007c[0x12] - (int)puVar1); } else { operator_delete(puVar1); } } std::locale::~locale((locale *)&stack0x0000058c); return; } ### FUNC FUN_000453a0 @ 000453a0 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_000453a0(undefined4 param_1,int param_2,undefined4 param_3,undefined4 param_4) { locale *this; undefined4 uVar1; undefined4 extraout_r1; locale alStack_134 [4]; undefined1 *local_130 [4]; undefined1 **local_120; undefined1 local_11c; undefined1 auStack_11b [256]; undefined1 auStack_1b [3]; undefined1 **local_18; __aeabi_memclr(auStack_11b,0x100); local_11c = 0; local_130[0] = auStack_1b; local_120 = (undefined1 **)&local_11c; local_18 = (undefined1 **)&local_11c; FUN_000517f8(local_130,extraout_r1,param_3,param_4); this = (locale *)std::locale::locale(alStack_134,(locale *)(param_2 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); std::locale::~locale(alStack_134); FUN_00051848(local_130,param_1,uVar1,0,0); if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) && ((undefined1 **)&local_11c != local_18)) { if (0x80 < (uint)((int)local_130[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18); } return; } ### FUNC FUN_00045484 @ 00045484 int * FUN_00045484(int *param_1,int *param_2,int *param_3) { int *piVar1; int iVar2; int *piVar3; int *piVar4; undefined4 uVar5; int *piVar6; uint uVar7; int *piVar8; uint uVar9; uint uVar10; int *piVar11; uint local_18; if (param_2 != param_3) { piVar6 = (int *)param_1[0x112]; piVar1 = param_1 + 0x112; iVar2 = (int)param_3 - (int)param_2; uVar9 = iVar2 >> 2; if (piVar6 == param_1) { piVar3 = (int *)param_1[0x10]; uVar7 = 0x10 - ((int)piVar3 - (int)param_1 >> 2); } else { piVar3 = (int *)param_1[0x10]; uVar7 = *param_1 - (int)piVar3 >> 2; } piVar8 = param_1 + 0x10; if (uVar9 < uVar7) { piVar1 = param_2 + 1; *piVar3 = *param_2; if (piVar1 != param_3) { __aeabi_memcpy(piVar3 + 1,piVar1,(int)param_3 - (int)piVar1); piVar3 = (int *)*piVar8; } piVar3[uVar9] = 0; *piVar8 = (int)(piVar3 + uVar9); } else { uVar7 = (int)piVar3 - (int)piVar6 >> 2; if (0x3ffffffe - uVar7 < uVar9) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar10 = uVar7; if (uVar7 <= uVar9) { uVar10 = uVar9; } uVar10 = uVar7 + uVar10 + 1; uVar9 = 0x3ffffffe; if (uVar7 <= uVar10) { uVar9 = uVar10; } uVar7 = 0x3ffffffe; if (uVar10 < 0x3fffffff) { uVar7 = uVar9; } if (uVar7 >> 1 < 0x81) { piVar4 = param_1 + 0x11; } else { if (0x3fffffff < uVar7) { FUN_00030824(4); uVar5 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } local_18 = uVar7 << 2; if (local_18 < 0x81) { piVar4 = (int *)std::__node_alloc::_M_allocate(&local_18); } else { piVar4 = (int *)operator_new(local_18); } piVar3 = (int *)*piVar8; piVar6 = (int *)*piVar1; } piVar11 = piVar4; if (piVar3 != piVar6) { __aeabi_memcpy(piVar4,piVar6,(int)piVar3 - (int)piVar6); piVar11 = (int *)((int)piVar4 + ((int)piVar3 - (int)piVar6)); } __aeabi_memcpy(piVar11,param_2,iVar2); *(undefined4 *)((int)piVar11 + iVar2) = 0; piVar6 = (int *)*piVar1; if (((piVar6 != param_1) && (piVar6 != (int *)0x0)) && (param_1 + 0x11 != piVar6)) { if ((uint)(*param_1 - (int)piVar6) < 0x81) { std::__node_alloc::_M_deallocate(piVar6,*param_1 - (int)piVar6); } else { operator_delete(piVar6); } } *param_1 = (int)(piVar4 + uVar7); *piVar8 = (int)piVar11 + iVar2; *piVar1 = (int)piVar4; } } return param_1; } ### FUNC FUN_000455e4 @ 000455e4 /* WARNING: Type propagation algorithm not settling */ /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_000455e4(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6, int param_7,int param_8) { locale *this; int *piVar1; int *piVar2; int *piVar3; int ******ppppppiVar4; undefined4 uVar5; int iVar6; int iVar7; uint uVar8; int *******pppppppiVar9; int iVar10; int *******pppppppiVar11; uint uVar12; uint uVar13; uint uVar14; uint uVar15; uint uVar16; int iVar17; int *******pppppppiVar18; uint uVar19; uint uVar20; uint uVar21; int iVar22; int ******ppppppiVar23; int iVar24; int iVar25; uint uVar26; byte bVar27; bool bVar28; int local_578; undefined4 local_564; int *******local_524; uint local_520; uint local_514; undefined4 *******local_510 [16]; int *******local_4d0; int ******local_4cc; undefined1 auStack_4c8 [1024]; int *******local_c8; int local_c4 [16]; int *local_84; int *local_80; int local_7c [16]; int local_3c; int *local_38; int local_34 [4]; int *local_24; int *local_20; locale alStack_1c [4]; undefined1 auStack_18 [4]; this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); piVar2 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct::id); ppppppiVar4 = (int ******)(**(code **)(*piVar1 + 0x28))(piVar1,0x2d); uVar5 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b); iVar6 = (**(code **)(*piVar1 + 0x28))(piVar1,0x20); iVar7 = (**(code **)(*piVar1 + 0x28))(piVar1,0x30); if (param_4 == 1) { local_578 = (**(code **)(*piVar3 + 8))(); local_564 = (**(code **)(*piVar3 + 0xc))(); (**(code **)(*piVar3 + 0x10))(local_34); uVar8 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34); (**(code **)(*piVar3 + 0x14))(local_7c,piVar3,*(code **)(*piVar3 + 0x14),local_34); } else { local_578 = (**(code **)(*piVar2 + 8))(); local_564 = (**(code **)(*piVar2 + 0xc))(); (**(code **)(*piVar2 + 0x10))(local_34); uVar8 = (**(code **)(*piVar2 + 0x20))(piVar2,*(code **)(*piVar2 + 0x20),local_34); (**(code **)(*piVar2 + 0x14))(local_7c,piVar2,*(code **)(*piVar2 + 0x14),local_34); } pppppppiVar18 = *(int ********)(param_7 + 0x40); pppppppiVar9 = *(int ********)(param_7 + 0x44); if (pppppppiVar9 == pppppppiVar18) { *param_1 = param_2; param_1[1] = param_3; if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { if ((uint)(local_7c[0] - (int)local_38) < 0x81) { std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); } else { operator_delete(local_38); } } if ((local_20 != local_34) && (local_20 != (int *)0x0)) { if ((uint)(local_34[0] - (int)local_20) < 0x81) { std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); } else { operator_delete(local_20); } } std::locale::~locale(alStack_1c); return; } ppppppiVar23 = *pppppppiVar9; pppppppiVar11 = pppppppiVar9 + 1; if (ppppppiVar23 != ppppppiVar4) { pppppppiVar11 = pppppppiVar9; } if (param_4 == 1) { if (ppppppiVar23 == ppppppiVar4) { (**(code **)(*piVar3 + 0x1c))(local_c4,piVar3); } else { (**(code **)(*piVar3 + 0x18))(local_c4,piVar3); } } else if (ppppppiVar23 == ppppppiVar4) { (**(code **)(*piVar2 + 0x1c))(local_c4); } else { (**(code **)(*piVar2 + 0x18))(local_c4); } local_524 = pppppppiVar18; pppppppiVar9 = pppppppiVar11; if (param_8 == 1) { while ((local_524 = pppppppiVar18, pppppppiVar9 != pppppppiVar18 && (iVar10 = (**(code **)(*piVar1 + 8))(piVar1,0x40,*pppppppiVar9), local_524 = pppppppiVar9 , iVar10 == 1))) { pppppppiVar9 = pppppppiVar9 + 1; } if (local_524 == pppppppiVar11) { *param_1 = param_2; param_1[1] = param_3; goto LAB_00045f22; } } __aeabi_memclr4(auStack_4c8,0x400); local_4cc = (int ******)0x0; local_510[0] = &local_c8; local_4d0 = &local_4cc; local_c8 = &local_4cc; if (local_20 != local_24) { if (pppppppiVar11 != local_524) { FUN_00045484(local_510,pppppppiVar11,local_524,auStack_18); } FUN_0005031c(local_510,((int)local_4d0 - (int)local_c8 >> 2) - uVar8,local_34,local_564,uVar5, ppppppiVar4,0); pppppppiVar11 = local_c8; local_524 = local_4d0; } uVar12 = (int)local_524 - (int)pppppppiVar11; uVar13 = (int)uVar12 >> 2; uVar14 = uVar13 + 1; if (uVar8 == 0) { uVar14 = uVar13; } iVar10 = uVar14 + ((int)local_84 - (int)local_80 >> 2); uVar19 = *(uint *)(param_5 + 4) & 0x200; uVar14 = *(uint *)(param_5 + 0x1c); if (uVar19 != 0) { iVar10 = (local_3c - (int)local_38 >> 2) + iVar10; } if (param_4 == 1) { if (ppppppiVar23 == ppppppiVar4) { local_514 = (**(code **)(*piVar3 + 0x28))(); } else { local_514 = (**(code **)(*piVar3 + 0x24))(); } } else if (ppppppiVar23 == ppppppiVar4) { local_514 = (**(code **)(*piVar2 + 0x28))(piVar2); } else { local_514 = (**(code **)(*piVar2 + 0x24))(piVar2); } uVar15 = iVar10 + (uint)((local_514 & 0xff00) == 0x100 || (local_514 & 0xff0000) == 0x10000); iVar10 = uVar14 - uVar15; if (uVar14 <= uVar15) { iVar10 = 0; } uVar20 = *(uint *)(param_5 + 4); local_520 = param_3; if ((iVar10 != 0) && ((uVar20 & 5) == 0)) { uVar21 = param_3; if (0 < iVar10) { iVar24 = (uVar14 + 1) - uVar15; do { uVar16 = uVar21 & 0xff; uVar21 = 0; if (uVar16 != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_6; iVar22 = param_6; } else { iVar22 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar21 = 1; if (iVar22 == -1) { uVar21 = 0; } } iVar24 = iVar24 + -1; } while (1 < iVar24); } local_520 = uVar21 & 0xff | param_3 & 0xffffff00; } uVar21 = (int)(local_524 + -uVar8) - (int)pppppppiVar11; iVar22 = (uVar12 >> 2) + 1; iVar24 = 0; do { uVar16 = local_520; switch(*(undefined1 *)((int)local_510 + iVar24 + -4)) { case 1: uVar16 = 0; if ((local_520 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar6; iVar25 = iVar6; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar6); } uVar16 = 1; if (iVar25 == -1) { uVar16 = 0; } } local_520 = local_520 & 0xffffff00 | uVar16; case 0: if (iVar10 != 0 && (uVar20 & 7) == 4) { iVar25 = (uVar14 + 1) - uVar15; uVar16 = local_520; uVar26 = local_520; if (0 < iVar10) { do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_6; iVar17 = param_6; } else { iVar17 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar16 = 1; if (iVar17 == -1) { uVar16 = 0; } } iVar25 = iVar25 + -1; uVar26 = uVar16; } while (1 < iVar25); } local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; } break; case 2: if (uVar19 != 0) { if (0 < local_3c - (int)local_38) { iVar25 = ((uint)(local_3c - (int)local_38) >> 2) + 1; uVar26 = local_520; piVar1 = local_38; do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { iVar17 = *piVar1; piVar2 = (int *)param_2[5]; if (piVar2 < (int *)param_2[6]) { param_2[5] = (int)(piVar2 + 1); *piVar2 = iVar17; } else { iVar17 = (**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (iVar17 == -1) { uVar16 = 0; } } iVar25 = iVar25 + -1; piVar1 = piVar1 + 1; uVar26 = uVar16; } while (1 < iVar25); } LAB_00045c0a: local_520 = local_520 & 0xffffff00 | uVar16 & 0xff; } break; case 3: if (local_80 != local_84) { uVar16 = 0; if ((local_520 & 0xff) != 0) { iVar25 = *local_80; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar25; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (iVar25 == -1) { uVar16 = 0; } } local_520 = local_520 & 0xffffff00 | uVar16; } break; case 4: if (uVar8 == 0) { iVar25 = iVar22; uVar26 = local_520; pppppppiVar9 = pppppppiVar11; if (0 < (int)uVar12) { do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { uVar16 = 0; } } iVar25 = iVar25 + -1; uVar26 = uVar16; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } goto LAB_00045c0a; } if ((int)uVar8 < (int)uVar13) { iVar25 = (uVar21 >> 2) + 1; uVar26 = local_520; pppppppiVar9 = pppppppiVar11; if (0 < (int)uVar21) { do { uVar16 = 0; if ((uVar26 & 0xff) != 0) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } uVar16 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { uVar16 = 0; } } iVar25 = iVar25 + -1; uVar26 = uVar16; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } bVar27 = 0; if ((uVar16 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = local_578; iVar25 = local_578; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); } bVar27 = 1; if (iVar25 == -1) { bVar27 = 0; } } iVar25 = (uVar8 & 0x3fffffff) + 1; pppppppiVar9 = local_524 + -uVar8; if (0 < (int)(uVar8 * 4)) { do { bVar28 = bVar27 != 0; bVar27 = 0; if (bVar28) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } bVar27 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { bVar27 = 0; } } iVar25 = iVar25 + -1; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } } else { bVar27 = 0; if ((local_520 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar7; iVar25 = iVar7; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); } if (iVar25 != -1) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = local_578; iVar25 = local_578; } else { iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578); } bVar27 = 1; if (iVar25 == -1) { bVar27 = 0; } } } iVar25 = uVar13 - uVar8; if (uVar8 != uVar13) { do { bVar28 = bVar27 != 0; bVar27 = 0; if (bVar28) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = iVar7; iVar17 = iVar7; } else { iVar17 = (**(code **)(*param_2 + 0x34))(param_2,iVar7); } bVar27 = 1; if (iVar17 == -1) { bVar27 = 0; } } iVar25 = iVar25 + 1; } while (iVar25 != 0); } iVar25 = iVar22; pppppppiVar9 = pppppppiVar11; if (0 < (int)uVar12) { do { bVar28 = bVar27 != 0; bVar27 = 0; if (bVar28) { ppppppiVar4 = *pppppppiVar9; piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = (int)ppppppiVar4; } else { ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2); } bVar27 = 1; if (ppppppiVar4 == (int ******)0xffffffff) { bVar27 = 0; } } iVar25 = iVar25 + -1; pppppppiVar9 = pppppppiVar9 + 1; } while (1 < iVar25); } } local_520 = local_520 & 0xffffff00; local_520 = local_520 | bVar27; } bVar28 = iVar24 < 3; iVar24 = iVar24 + 1; } while (bVar28); if (1 < (uint)((int)local_84 - (int)local_80 >> 2)) { piVar1 = local_80 + 1; uVar8 = local_520; if (0 < (int)local_84 - (int)piVar1) { iVar6 = ((uint)((int)local_84 - (int)piVar1) >> 2) + 1; uVar12 = local_520; do { uVar8 = 0; if ((uVar12 & 0xff) != 0) { iVar7 = *piVar1; piVar2 = (int *)param_2[5]; if (piVar2 < (int *)param_2[6]) { param_2[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_2 + 0x34))(param_2); } uVar8 = 1; if (iVar7 == -1) { uVar8 = 0; } } iVar6 = iVar6 + -1; piVar1 = piVar1 + 1; uVar12 = uVar8; } while (1 < iVar6); } local_520 = uVar8 & 0xff | local_520 & 0xffffff00; } if ((iVar10 != 0) && ((uVar20 & 6) == 0)) { uVar8 = local_520; if (0 < iVar10) { iVar6 = (uVar14 + 1) - uVar15; uVar14 = local_520; do { uVar8 = 0; if ((uVar14 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_6; iVar7 = param_6; } else { iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6); } uVar8 = 1; if (iVar7 == -1) { uVar8 = 0; } } iVar6 = iVar6 + -1; uVar14 = uVar8; } while (1 < iVar6); } local_520 = uVar8 & 0xff | local_520 & 0xffffff00; } *param_1 = param_2; param_1[1] = local_520; if ((((undefined4 ********)local_c8 != local_510) && (local_c8 != (int *******)0x0)) && (&local_4cc != local_c8)) { if ((uint)((int)local_510[0] - (int)local_c8) < 0x81) { std::__node_alloc::_M_deallocate(local_c8,(int)local_510[0] - (int)local_c8); } else { operator_delete(local_c8); } } LAB_00045f22: if (local_80 == local_c4) { FUN_00045758(); return; } if (local_80 != (int *)0x0) { if ((uint)(local_c4[0] - (int)local_80) < 0x81) { std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80); uVar5 = FUN_00045758(); if ((local_80 != local_c4) && (local_80 != (int *)0x0)) { if ((uint)(local_c4[0] - (int)local_80) < 0x81) { std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80); } else { operator_delete(local_80); } } if ((local_38 != local_7c) && (local_38 != (int *)0x0)) { if ((uint)(local_7c[0] - (int)local_38) < 0x81) { std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38); } else { operator_delete(local_38); } } if ((local_20 != local_34) && (local_20 != (int *)0x0)) { if ((uint)(local_34[0] - (int)local_20) < 0x81) { std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20); } else { operator_delete(local_20); } } std::locale::~locale(alStack_1c); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar5); } operator_delete(local_80); FUN_00045758(); return; } FUN_00045758(); return; } ### FUNC FUN_00045758 @ 00045758 void FUN_00045758(void) { undefined1 *puVar1; int *unaff_r4; puVar1 = (undefined1 *)unaff_r4[0x11]; if ((puVar1 != &stack0x0000052c) && (puVar1 != (undefined1 *)0x0)) { if ((uint)(*unaff_r4 - (int)puVar1) < 0x81) { std::__node_alloc::_M_deallocate(puVar1,*unaff_r4 - (int)puVar1); } else { operator_delete(puVar1); } } puVar1 = (undefined1 *)unaff_r4[0x17]; if ((puVar1 != &stack0x00000574) && (puVar1 != (undefined1 *)0x0)) { if ((uint)(unaff_r4[0x12] - (int)puVar1) < 0x81) { std::__node_alloc::_M_deallocate(puVar1,unaff_r4[0x12] - (int)puVar1); } else { operator_delete(puVar1); } } std::locale::~locale((locale *)&stack0x0000058c); return; } ### FUNC FUN_0004605c @ 0004605c void FUN_0004605c(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_000460f4 @ 000460f4 void FUN_000460f4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_00046654(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_0004612a @ 0004612a void FUN_0004612a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_00046e7c(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_00046160 @ 00046160 void FUN_00046160(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_00047274(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_00046196 @ 00046196 void FUN_00046196(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_00047664(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_000461cc @ 000461cc void FUN_000461cc(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_00047a54(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_00046202 @ 00046202 void FUN_00046202(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_000482e4(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_00046238 @ 00046238 void FUN_00046238(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,byte *param_10,undefined4 *param_11) { undefined4 local_30 [2]; undefined4 local_28; undefined4 local_24; undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; local_14 = param_5; local_24 = param_7; local_20 = param_8; local_28 = param_6; local_1c = param_3; local_18 = param_4; FUN_0004845c(param_1,&local_1c,&local_28,param_9,param_10,local_30,0); if (-1 < (int)((uint)*param_10 << 0x1d)) { *param_11 = local_30[0]; } return; } ### FUNC FUN_0004627a @ 0004627a void FUN_0004627a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_000488bc(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_000462b0 @ 000462b0 void FUN_000462b0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_00048a34(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_000462e6 @ 000462e6 void FUN_000462e6(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11) { undefined4 local_20; undefined4 local_1c; undefined4 local_18; undefined4 local_14; undefined4 local_10; undefined4 local_c; local_c = param_5; local_1c = param_7; local_18 = param_8; local_20 = param_6; local_14 = param_3; local_10 = param_4; FUN_0004845c(param_1,&local_14,&local_20,param_9,param_10,param_11,0); return; } ### FUNC FUN_0004631c @ 0004631c void FUN_0004631c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 param_6) { bool bVar1; bool bVar2; locale *this; int *piVar3; int iVar4; int iVar5; bool bVar6; bool bVar7; uint uVar8; uint uVar9; char cVar10; int local_a4 [16]; int local_64; int *local_60; int local_5c [16]; int local_1c; int *local_18; this = (locale *)std::locale::locale((locale *)local_5c,(locale *)(param_4 + 0x20)); piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_5c); (**(code **)(*piVar3 + 0x14))(local_5c,piVar3); (**(code **)(*piVar3 + 0x18))(local_a4,piVar3); cVar10 = *(char *)((int)param_2 + 9); bVar1 = true; uVar9 = 0; bVar7 = true; while( true ) { piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (cVar10 == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 == (int *)0x0) || (*(char *)((int)param_3 + 9) != '\0')) { cVar10 = (char)param_3[2]; } else { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; cVar10 = iVar4 == -1; *(char *)(param_3 + 2) = cVar10; } if ((char)param_2[2] == cVar10) goto code_r0x000464b6; if (*(char *)((int)param_2 + 9) == '\0') { piVar3 = (int *)*param_2; if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } else { iVar4 = param_2[1]; } bVar6 = false; if ((bVar1) && (bVar6 = true, iVar4 != local_18[uVar9])) { bVar6 = false; } bVar1 = bVar6; bVar6 = false; if ((bVar7) && (bVar6 = true, iVar4 != local_60[uVar9])) { bVar6 = false; } uVar8 = uVar9 + 1; bVar2 = false; bVar7 = false; if (!(bool)(bVar1 | bVar6)) goto LAB_000464ca; if ((bVar1) && ((uint)(local_1c - (int)local_18 >> 2) <= uVar8)) break; if ((bVar6) && (bVar2 = bVar1, bVar7 = true, (uint)(local_64 - (int)local_60 >> 2) <= uVar8)) goto LAB_000464ca; piVar3 = (int *)*param_2; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 4; } else { (**(code **)(*piVar3 + 0x24))(); } cVar10 = '\0'; *(undefined1 *)((int)param_2 + 9) = 0; uVar9 = uVar8; bVar7 = bVar6; } bVar2 = true; bVar7 = bVar6; LAB_000464ca: uVar9 = uVar9 + 1; piVar3 = (int *)*param_2; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 4; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_2 + 9) = 0; bVar1 = bVar2; code_r0x000464b6: bVar1 = bVar1 && (uint)(local_1c - (int)local_18 >> 2) <= uVar9; bVar6 = false; if ((bVar7) && (bVar6 = true, uVar9 < (uint)(local_64 - (int)local_60 >> 2))) { bVar6 = false; } if ((bVar1) || (bVar6)) { *param_5 = 0; *(bool *)param_6 = bVar1; } else { *param_5 = 4; } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar5 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar5; if ((local_60 != local_a4) && (local_60 != (int *)0x0)) { if ((uint)(local_a4[0] - (int)local_60) < 0x81) { std::__node_alloc::_M_deallocate(local_60,local_a4[0] - (int)local_60); } else { operator_delete(local_60); } } if ((local_18 != local_5c) && (local_18 != (int *)0x0)) { if (0x80 < (uint)(local_5c[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18); } return; } ### FUNC FUN_00046654 @ 00046654 void FUN_00046654(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; int iVar6; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { uVar5 = 4; if ((uVar2 & 1) != 0) { uVar5 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar4 = FUN_00046c84(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar5 = 0; if (iVar4 == 0) { uVar5 = 4; } } *param_5 = uVar5; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar6 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar6; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00046858 @ 00046858 uint FUN_00046858(int *param_1,int *param_2,uint param_3,int *param_4) { bool bVar1; undefined4 uVar2; int iVar3; int *piVar4; uint uVar5; uint uVar6; uint uVar7; int local_28; int local_24; int local_20; int local_1c; int local_18; uVar2 = std::priv::__narrow_atoms(); iVar3 = std::priv::__narrow_atoms(); (**(code **)(*param_4 + 0x2c))(param_4,uVar2,iVar3 + 5,&local_28); if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } if (iVar3 == local_24) { piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; uVar5 = 2; } else { (**(code **)(*piVar4 + 0x24))(); uVar5 = 2; } LAB_000468f8: bVar1 = false; *(undefined1 *)((int)param_1 + 9) = 0; } else { uVar5 = 0; bVar1 = true; if (iVar3 == local_28) { piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } uVar5 = 0; goto LAB_000468f8; } } param_3 = param_3 & 0x38; uVar6 = 0; if (param_3 == 0x20) { uVar7 = 0x20; goto LAB_00046c7a; } if (param_3 != 0x10) { if (param_3 == 8) { uVar7 = 0x28; goto LAB_00046c7a; } piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (!bVar1)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } uVar7 = 0x28; if ((char)param_1[2] == (char)param_2[2]) goto LAB_00046c7a; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } if (iVar3 != local_20) goto LAB_00046c7a; piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; *(undefined1 *)((int)param_1 + 9) = 0; LAB_00046b1e: if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { (**(code **)(*piVar4 + 0x24))(); *(undefined1 *)((int)param_1 + 9) = 0; piVar4 = (int *)*param_1; if (piVar4 != (int *)0x0) goto LAB_00046b1e; } piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } uVar6 = 1; if ((char)param_1[2] == (char)param_2[2]) { uVar7 = 0x20; } else { if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } if ((iVar3 == local_1c) || (uVar7 = 0x20, iVar3 == local_18)) { piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } uVar6 = 0; *(undefined1 *)((int)param_1 + 9) = 0; uVar7 = 0x40; } } goto LAB_00046c7a; } piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (!bVar1)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } uVar7 = 0x40; if ((char)param_1[2] == (char)param_2[2]) goto LAB_00046c7a; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } if (iVar3 != local_20) goto LAB_00046c7a; piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; *(undefined1 *)((int)param_1 + 9) = 0; LAB_00046a8a: if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { (**(code **)(*piVar4 + 0x24))(); *(undefined1 *)((int)param_1 + 9) = 0; piVar4 = (int *)*param_1; if (piVar4 != (int *)0x0) goto LAB_00046a8a; } piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } uVar6 = 1; if ((char)param_1[2] != (char)param_2[2]) { if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar3; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar3 == -1; } else { iVar3 = param_1[1]; } if ((iVar3 == local_1c) || (iVar3 == local_18)) { piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } uVar6 = 0; *(undefined1 *)((int)param_1 + 9) = 0; } } LAB_00046c7a: return uVar7 | uVar5 | uVar6; } ### FUNC FUN_00046c84 @ 00046c84 uint FUN_00046c84(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6, uint param_7,int param_8) { char cVar1; int iVar2; int iVar3; int *piVar4; int iVar5; uint uVar6; bool bVar7; int iVar8; int iVar9; char *pcVar10; char cVar11; int local_98; int local_70; uint local_68; int local_5c; int local_58; char acStack_54 [64]; iVar9 = *(int *)(param_8 + 0x10); iVar2 = *(int *)(param_8 + 0x14); local_5c = 0; cVar11 = *(char *)((int)param_1 + 9); local_68 = 1; local_98 = -0x80000000; iVar3 = __divsi3(0x80000000,param_3); local_70 = param_5; cVar1 = '\0'; local_58 = 0; bVar7 = false; uVar6 = (uint)(cVar11 == '\0'); while( true ) { pcVar10 = acStack_54 + local_5c; piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar5 == -1; } piVar4 = (int *)*param_2; if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar11 = (char)param_2[2]; } else { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar5; *(undefined1 *)((int)param_2 + 9) = 1; cVar11 = iVar5 == -1; *(char *)(param_2 + 2) = cVar11; } if ((char)param_1[2] == cVar11) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((uint *)piVar4[2] < (uint *)piVar4[3]) { uVar6 = *(uint *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = uVar6; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; } else { uVar6 = param_1[1]; } iVar5 = local_58; if (uVar6 == param_7 && iVar2 != iVar9) { *pcVar10 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { iVar8 = 0xff; if (uVar6 < 0x80) { iVar8 = std::priv::__digit_val_table(uVar6); } if (param_3 <= iVar8) break; cVar1 = cVar1 + '\x01'; local_70 = local_70 + 1; if (local_58 < iVar3) { bVar7 = true; } else { iVar5 = local_58 * param_3 - iVar8; bVar7 = (bool)(bVar7 | (local_58 != 0 && local_58 <= iVar5)); } } piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar6 = local_68; local_58 = iVar5; } if ((iVar2 != iVar9) && (local_5c != 0)) { *pcVar10 = cVar1; pcVar10 = acStack_54 + local_5c + 1; } uVar6 = 0; if (0 < local_70) { if (bVar7) { if (param_6 == 0) { local_98 = 0x7fffffff; } *param_4 = local_98; } else { if (param_6 == 0) { local_58 = -local_58; } *param_4 = local_58; uVar6 = local_68; if (iVar2 != iVar9) { uVar6 = std::priv::__valid_grouping (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) ; } } } return uVar6; } ### FUNC FUN_00046e7c @ 00046e7c void FUN_00046e7c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined2 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; int iVar6; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { uVar5 = 4; if ((uVar2 & 1) != 0) { uVar5 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar4 = FUN_00047080(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar5 = 0; if (iVar4 == 0) { uVar5 = 4; } } *param_5 = uVar5; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar6 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar6; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00047080 @ 00047080 uint FUN_00047080(int *param_1,int *param_2,uint param_3,short *param_4,int param_5,int param_6, uint param_7,int param_8) { bool bVar1; int iVar2; uint uVar3; int *piVar4; int iVar5; uint uVar6; char cVar7; int iVar8; uint uVar9; char *pcVar10; char cVar11; int local_70; uint local_68; uint local_5c; int local_58; char acStack_54 [64]; iVar8 = *(int *)(param_8 + 0x10); iVar2 = *(int *)(param_8 + 0x14); local_58 = 0; cVar11 = *(char *)((int)param_1 + 9); local_68 = 1; uVar3 = __udivsi3(0xffff,param_3 & 0xffff); local_70 = param_5; cVar7 = '\0'; local_5c = 0; bVar1 = false; uVar6 = (uint)(cVar11 == '\0'); while( true ) { pcVar10 = acStack_54 + local_58; piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar5 == -1; } piVar4 = (int *)*param_2; if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar11 = (char)param_2[2]; } else { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar5; *(undefined1 *)((int)param_2 + 9) = 1; cVar11 = iVar5 == -1; *(char *)(param_2 + 2) = cVar11; } if ((char)param_1[2] == cVar11) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((uint *)piVar4[2] < (uint *)piVar4[3]) { uVar6 = *(uint *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = uVar6; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; } else { uVar6 = param_1[1]; } uVar9 = local_5c; if (uVar6 == param_7 && iVar2 != iVar8) { *pcVar10 = cVar7; local_58 = local_58 + 1; cVar7 = '\0'; } else { iVar5 = 0xff; if (uVar6 < 0x80) { iVar5 = std::priv::__digit_val_table(uVar6); } if ((int)param_3 <= iVar5) break; uVar6 = local_5c & 0xffff; cVar7 = cVar7 + '\x01'; local_70 = local_70 + 1; if (uVar3 < uVar6) { bVar1 = true; } else { uVar9 = iVar5 + uVar6 * param_3; if ((local_5c & 0xffff) != 0) { bVar1 = (bool)(bVar1 | (uVar9 & 0xffff) <= uVar6); } } } piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar6 = local_68; local_5c = uVar9; } if ((iVar2 != iVar8) && (local_58 != 0)) { *pcVar10 = cVar7; pcVar10 = acStack_54 + local_58 + 1; } uVar6 = 0; if (0 < local_70) { if (bVar1) { *param_4 = -1; } else { if (param_6 == 1) { local_5c._0_2_ = -(short)local_5c; } *param_4 = (short)local_5c; uVar6 = local_68; if (iVar2 != iVar8) { uVar6 = std::priv::__valid_grouping (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) ; } } } return uVar6; } ### FUNC FUN_00047274 @ 00047274 void FUN_00047274(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; int iVar6; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { uVar5 = 4; if ((uVar2 & 1) != 0) { uVar5 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar4 = FUN_00047478(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar5 = 0; if (iVar4 == 0) { uVar5 = 4; } } *param_5 = uVar5; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar6 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar6; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00047478 @ 00047478 uint FUN_00047478(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { char cVar1; int iVar2; uint uVar3; int *piVar4; int iVar5; uint uVar6; bool bVar7; int iVar8; uint uVar9; char *pcVar10; char cVar11; int local_70; uint local_68; int local_5c; uint local_58; char acStack_54 [64]; iVar8 = *(int *)(param_8 + 0x10); iVar2 = *(int *)(param_8 + 0x14); local_5c = 0; cVar11 = *(char *)((int)param_1 + 9); local_68 = 1; uVar3 = __udivsi3(0xffffffff,param_3); local_70 = param_5; cVar1 = '\0'; local_58 = 0; bVar7 = false; uVar6 = (uint)(cVar11 == '\0'); while( true ) { pcVar10 = acStack_54 + local_5c; piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar5 == -1; } piVar4 = (int *)*param_2; if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar11 = (char)param_2[2]; } else { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar5; *(undefined1 *)((int)param_2 + 9) = 1; cVar11 = iVar5 == -1; *(char *)(param_2 + 2) = cVar11; } if ((char)param_1[2] == cVar11) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((uint *)piVar4[2] < (uint *)piVar4[3]) { uVar6 = *(uint *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = uVar6; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; } else { uVar6 = param_1[1]; } uVar9 = local_58; if (uVar6 == param_7 && iVar2 != iVar8) { *pcVar10 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { iVar5 = 0xff; if (uVar6 < 0x80) { iVar5 = std::priv::__digit_val_table(uVar6); } if (param_3 <= iVar5) break; cVar1 = cVar1 + '\x01'; local_70 = local_70 + 1; if (uVar3 < local_58) { bVar7 = true; } else { uVar9 = iVar5 + local_58 * param_3; bVar7 = (bool)(bVar7 | (local_58 != 0 && uVar9 <= local_58)); } } piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar6 = local_68; local_58 = uVar9; } if ((iVar2 != iVar8) && (local_5c != 0)) { *pcVar10 = cVar1; pcVar10 = acStack_54 + local_5c + 1; } uVar6 = 0; if (0 < local_70) { if (bVar7) { *param_4 = 0xffffffff; } else { uVar6 = -local_58; if (param_6 == 0) { uVar6 = local_58; } *param_4 = uVar6; uVar6 = local_68; if (iVar2 != iVar8) { uVar6 = std::priv::__valid_grouping (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) ; } } } return uVar6; } ### FUNC FUN_00047664 @ 00047664 void FUN_00047664(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; int iVar6; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { uVar5 = 4; if ((uVar2 & 1) != 0) { uVar5 = 0; *param_6 = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar4 = FUN_00047868(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar5 = 0; if (iVar4 == 0) { uVar5 = 4; } } *param_5 = uVar5; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar6 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar6; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00047868 @ 00047868 uint FUN_00047868(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { char cVar1; int iVar2; uint uVar3; int *piVar4; int iVar5; uint uVar6; bool bVar7; int iVar8; uint uVar9; char *pcVar10; char cVar11; int local_70; uint local_68; int local_5c; uint local_58; char acStack_54 [64]; iVar8 = *(int *)(param_8 + 0x10); iVar2 = *(int *)(param_8 + 0x14); local_5c = 0; cVar11 = *(char *)((int)param_1 + 9); local_68 = 1; uVar3 = __udivsi3(0xffffffff,param_3); local_70 = param_5; cVar1 = '\0'; local_58 = 0; bVar7 = false; uVar6 = (uint)(cVar11 == '\0'); while( true ) { pcVar10 = acStack_54 + local_5c; piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar5 == -1; } piVar4 = (int *)*param_2; if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar11 = (char)param_2[2]; } else { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar5; *(undefined1 *)((int)param_2 + 9) = 1; cVar11 = iVar5 == -1; *(char *)(param_2 + 2) = cVar11; } if ((char)param_1[2] == cVar11) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((uint *)piVar4[2] < (uint *)piVar4[3]) { uVar6 = *(uint *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = uVar6; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; } else { uVar6 = param_1[1]; } uVar9 = local_58; if (uVar6 == param_7 && iVar2 != iVar8) { *pcVar10 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { iVar5 = 0xff; if (uVar6 < 0x80) { iVar5 = std::priv::__digit_val_table(uVar6); } if (param_3 <= iVar5) break; cVar1 = cVar1 + '\x01'; local_70 = local_70 + 1; if (uVar3 < local_58) { bVar7 = true; } else { uVar9 = iVar5 + local_58 * param_3; bVar7 = (bool)(bVar7 | (local_58 != 0 && uVar9 <= local_58)); } } piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar6 = local_68; local_58 = uVar9; } if ((iVar2 != iVar8) && (local_5c != 0)) { *pcVar10 = cVar1; pcVar10 = acStack_54 + local_5c + 1; } uVar6 = 0; if (0 < local_70) { if (bVar7) { *param_4 = 0xffffffff; } else { uVar6 = -local_58; if (param_6 == 0) { uVar6 = local_58; } *param_4 = uVar6; uVar6 = local_68; if (iVar2 != iVar8) { uVar6 = std::priv::__valid_grouping (acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)) ; } } } return uVar6; } ### FUNC FUN_00047a54 @ 00047a54 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_00047a54(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,float *param_6) { locale *this; undefined4 uVar1; undefined4 uVar2; int iVar3; int *piVar4; int iVar5; uint uVar6; undefined1 *local_134 [4]; undefined1 **local_124; undefined1 local_120; undefined1 auStack_11f [256]; undefined1 auStack_1f [3]; undefined1 **local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); __aeabi_memclr(auStack_11f,0x100); local_120 = 0; local_134[0] = auStack_1f; local_124 = (undefined1 **)&local_120; local_1c = (undefined1 **)&local_120; iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2); uVar6 = 4; if (iVar3 == 1) { uVar6 = 0; std::priv::__string_to_float((__basic_iostring *)local_134,param_6); } *param_5 = uVar6; piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_3[1] = iVar3; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar3 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar3 = param_2[1]; iVar5 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar3; param_1[2] = iVar5; if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && ((undefined1 **)&local_120 != local_1c)) { if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); } else { operator_delete(local_1c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_00047bcc @ 00047bcc undefined4 FUN_00047bcc(undefined4 param_1,int *param_2,int *param_3,ctype *param_4,int *param_5) { int iVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; wchar_t wVar6; undefined4 uVar7; int local_74; int local_70; undefined2 local_6c; wchar_t local_68; wchar_t local_64; wchar_t local_60; wchar_t local_5c; wchar_t awStack_58 [10]; undefined1 local_30; int local_2c [4]; int *local_1c; int *local_18; (**(code **)(*param_5 + 0x10))(local_2c,param_5); local_30 = 1; iVar1 = (**(code **)(*param_5 + 8))(param_5); (**(code **)(*param_5 + 0xc))(param_5); std::priv::_Initialize_get_float(param_4,&local_5c,&local_60,&local_64,&local_68,awStack_58); FUN_00047f10(&local_74,*param_2,param_2[1],param_2[2],*param_3,param_3[1],param_3[2],param_1, local_5c,local_60); *(undefined2 *)(param_2 + 2) = local_6c; *param_2 = local_74; param_2[1] = local_70; if (local_18 == local_1c) { uVar2 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58); } else { uVar2 = FUN_00048060(param_2); } piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } uVar5 = 0; if ((char)param_2[2] != (char)param_3[2]) { if (*(char *)((int)param_2 + 9) == '\0') { piVar3 = (int *)*param_2; if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } else { iVar4 = param_2[1]; } uVar5 = 0; if (iVar4 == iVar1) { FUN_00040cb0(param_1,0x2e); piVar3 = (int *)*param_2; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 4; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_2 + 9) = 0; uVar5 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58); } } uVar7 = 0; if ((uVar2 | uVar5) == 1) { piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar1 = *(int *)piVar3[2]; } else { iVar1 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar1; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar1 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar1 = *(int *)piVar3[2]; } else { iVar1 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar1; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar1 == -1; } uVar7 = 1; if ((char)param_2[2] != (char)param_3[2]) { if (*(char *)((int)param_2 + 9) == '\0') { piVar3 = (int *)*param_2; if ((wchar_t *)piVar3[2] < (wchar_t *)piVar3[3]) { wVar6 = *(wchar_t *)piVar3[2]; } else { wVar6 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = wVar6; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = wVar6 == L'\xffffffff'; } else { wVar6 = param_2[1]; } uVar7 = 1; if ((wVar6 == local_64) || (wVar6 == local_68)) { FUN_00040cb0(param_1,0x65); piVar3 = (int *)*param_2; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 4; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_2 + 9) = 0; FUN_00047f10(&local_74,*param_2,param_2[1],param_2[2],*param_3,param_3[1],param_3[2],param_1 ,local_5c,local_60); *(undefined2 *)(param_2 + 2) = local_6c; *param_2 = local_74; param_2[1] = local_70; uVar7 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58); } } } if ((local_18 != local_2c) && (local_18 != (int *)0x0)) { if ((uint)(local_2c[0] - (int)local_18) < 0x81) { std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18); } else { operator_delete(local_18); } } return uVar7; } ### FUNC FUN_00047f10 @ 00047f10 void FUN_00047f10(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5, undefined4 param_6,uint param_7,undefined4 param_8,int param_9,int param_10) { int iVar1; code *pcVar2; int local_20; local_20 = param_3; if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { if ((int *)param_2[2] < (int *)param_2[3]) { local_20 = *(int *)param_2[2]; } else { local_20 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = param_4 & 0xffff0000 | (uint)(local_20 == -1) | 0x100; } if ((param_5 != (int *)0x0) && ((param_7 & 0xff00) == 0)) { if ((int *)param_5[2] < (int *)param_5[3]) { iVar1 = *(int *)param_5[2]; } else { iVar1 = (**(code **)(*param_5 + 0x20))(); } param_7 = (uint)(iVar1 == -1); } if ((param_4 & 0xff) == (param_7 & 0xff)) goto LAB_00048052; if ((param_4 & 0xff00) == 0) { if ((int *)param_2[2] < (int *)param_2[3]) { local_20 = *(int *)param_2[2]; } else { local_20 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = param_4 & 0xffff0000 | (uint)(local_20 == -1) | 0x100; if (local_20 != param_9) goto LAB_0004801c; LAB_00047fce: if ((uint)param_2[2] < (uint)param_2[3]) { param_2[2] = param_2[2] + 4; local_20 = param_9; } else { pcVar2 = *(code **)(*param_2 + 0x24); LAB_00048046: (*pcVar2)(param_2); local_20 = param_9; } } else { if (local_20 == param_9) goto LAB_00047fce; LAB_0004801c: if (local_20 != param_10) goto LAB_00048052; FUN_00040cb0(param_8,0x2d); if ((uint)param_2[3] <= (uint)param_2[2]) { pcVar2 = *(code **)(*param_2 + 0x24); param_9 = param_10; goto LAB_00048046; } param_2[2] = param_2[2] + 4; local_20 = param_10; } param_4 = param_4 & 0xffff00ff; LAB_00048052: *param_1 = param_2; param_1[1] = local_20; param_1[2] = param_4; return; } ### FUNC FUN_00048060 @ 00048060 undefined4 FUN_00048060(int *param_1,int *param_2,undefined4 param_3,uint param_4,undefined4 param_5, wchar_t *param_6,wchar_t param_7,int param_8,undefined1 *param_9) { char cVar1; undefined1 uVar2; int *piVar3; int iVar4; char *pcVar5; bool bVar6; undefined4 local_74; int local_5c; wchar_t local_58; char local_54 [64]; local_5c = 0; bVar6 = *(char *)((int)param_1 + 9) == '\0'; cVar1 = '\0'; local_74 = 0; while( true ) { pcVar5 = local_54 + local_5c; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (bVar6)) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_1[1] = iVar4; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar4 == -1; } if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { if ((int *)param_2[2] < (int *)param_2[3]) { iVar4 = *(int *)param_2[2]; } else { iVar4 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = iVar4 == -1 | 0x100; } if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar3 = (int *)*param_1; if ((wchar_t *)piVar3[2] < (wchar_t *)piVar3[3]) { local_58 = *(wchar_t *)piVar3[2]; } else { local_58 = (**(code **)(*piVar3 + 0x20))(); } param_1[1] = local_58; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = local_58 == L'\xffffffff'; } else { local_58 = param_1[1]; } iVar4 = std::priv::__get_fdigit_or_sep(&local_58,param_7,param_6); if (iVar4 != 1) break; if (local_58 == L',') { *pcVar5 = cVar1; local_5c = local_5c + 1; cVar1 = '\0'; } else { FUN_00040cb0(param_5,local_58 & 0xff); cVar1 = cVar1 + '\x01'; local_74 = 1; } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 4; } else { (**(code **)(*piVar3 + 0x24))(); } bVar6 = true; *(undefined1 *)((int)param_1 + 9) = 0; } if (local_5c != 0) { *pcVar5 = cVar1; pcVar5 = local_54 + local_5c + 1; } uVar2 = std::priv::__valid_grouping (local_54,pcVar5,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); *param_9 = uVar2; return local_74; } ### FUNC FUN_000481d4 @ 000481d4 undefined4 FUN_000481d4(int *param_1,int *param_2,undefined4 param_3,uint param_4,undefined4 param_5, wchar_t *param_6) { int *piVar1; int iVar2; bool bVar3; undefined4 local_20; wchar_t local_18; local_20 = 0; bVar3 = *(char *)((int)param_1 + 9) == '\0'; while( true ) { piVar1 = (int *)*param_1; if ((piVar1 != (int *)0x0) && (bVar3)) { if ((int *)piVar1[2] < (int *)piVar1[3]) { iVar2 = *(int *)piVar1[2]; } else { iVar2 = (**(code **)(*piVar1 + 0x20))(); } param_1[1] = iVar2; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar2 == -1; } if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) { if ((int *)param_2[2] < (int *)param_2[3]) { iVar2 = *(int *)param_2[2]; } else { iVar2 = (**(code **)(*param_2 + 0x20))(param_2); } param_4 = iVar2 == -1 | 0x100; } if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) { return local_20; } if (*(char *)((int)param_1 + 9) == '\0') { piVar1 = (int *)*param_1; if ((wchar_t *)piVar1[2] < (wchar_t *)piVar1[3]) { local_18 = *(wchar_t *)piVar1[2]; } else { local_18 = (**(code **)(*piVar1 + 0x20))(); } param_1[1] = local_18; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = local_18 == L'\xffffffff'; } else { local_18 = param_1[1]; } iVar2 = std::priv::__get_fdigit(&local_18,param_6); if (iVar2 == 0) break; FUN_00040cb0(param_5,local_18 & 0xff); piVar1 = (int *)*param_1; if ((uint)piVar1[2] < (uint)piVar1[3]) { piVar1[2] = piVar1[2] + 4; } else { (**(code **)(*piVar1 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; bVar3 = true; local_20 = 1; } return local_20; } ### FUNC FUN_000482e4 @ 000482e4 /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_000482e4(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,double *param_6) { locale *this; undefined4 uVar1; undefined4 uVar2; int iVar3; int *piVar4; int iVar5; uint uVar6; undefined1 *local_134 [4]; undefined1 **local_124; undefined1 local_120; undefined1 auStack_11f [256]; undefined1 auStack_1f [3]; undefined1 **local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); __aeabi_memclr(auStack_11f,0x100); local_120 = 0; local_134[0] = auStack_1f; local_124 = (undefined1 **)&local_120; local_1c = (undefined1 **)&local_120; iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2); uVar6 = 4; if (iVar3 == 1) { uVar6 = 0; std::priv::__string_to_float((__basic_iostring *)local_134,param_6); } *param_5 = uVar6; piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_3[1] = iVar3; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar3 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar3 = param_2[1]; iVar5 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar3; param_1[2] = iVar5; if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && ((undefined1 **)&local_120 != local_1c)) { if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); } else { operator_delete(local_1c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_0004845c @ 0004845c void FUN_0004845c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; int iVar6; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { uVar5 = 4; if ((uVar2 & 1) != 0) { uVar5 = 0; *param_6 = 0; param_6[1] = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar4 = FUN_00048660(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar5 = 0; if (iVar4 == 0) { uVar5 = 4; } } *param_5 = uVar5; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar6 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar6; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00048660 @ 00048660 uint FUN_00048660(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { bool bVar1; longlong lVar2; int iVar3; int *piVar4; int iVar5; uint uVar6; char cVar7; bool bVar8; int iVar9; uint uVar10; uint uVar11; char cVar12; undefined8 uVar13; longlong lVar14; int local_7c; uint local_70; char *local_68; int local_60; uint local_5c; uint local_58; char acStack_54 [64]; iVar9 = *(int *)(param_8 + 0x10); iVar3 = *(int *)(param_8 + 0x14); local_70 = 1; uVar13 = __aeabi_uldivmod(0xffffffff,0xffffffff,param_3); uVar10 = (uint)((ulonglong)uVar13 >> 0x20); local_7c = param_5; cVar7 = '\0'; local_60 = 0; bVar8 = false; uVar6 = (uint)(*(char *)((int)param_1 + 9) == '\0'); lVar2 = 0; while( true ) { local_5c = (uint)((ulonglong)lVar2 >> 0x20); local_58 = (uint)lVar2; local_68 = acStack_54 + local_60; piVar4 = (int *)*param_1; if ((piVar4 != (int *)0x0) && (uVar6 != 0)) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = iVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar5 == -1; } piVar4 = (int *)*param_2; if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar12 = (char)param_2[2]; } else { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar5 = *(int *)piVar4[2]; } else { iVar5 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar5; *(undefined1 *)((int)param_2 + 9) = 1; cVar12 = iVar5 == -1; *(char *)(param_2 + 2) = cVar12; } if ((char)param_1[2] == cVar12) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar4 = (int *)*param_1; if ((uint *)piVar4[2] < (uint *)piVar4[3]) { uVar6 = *(uint *)piVar4[2]; } else { uVar6 = (**(code **)(*piVar4 + 0x20))(); } param_1[1] = uVar6; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar6 == 0xffffffff; } else { uVar6 = param_1[1]; } lVar14 = lVar2; if (uVar6 == param_7 && iVar3 != iVar9) { *local_68 = cVar7; local_60 = local_60 + 1; cVar7 = '\0'; } else { uVar11 = 0xff; if (uVar6 < 0x80) { uVar11 = std::priv::__digit_val_table(uVar6); } if (param_3 <= (int)uVar11) break; bVar1 = (uint)uVar13 < local_58; if (local_5c != uVar10) { bVar1 = uVar10 < local_5c; } cVar7 = cVar7 + '\x01'; local_7c = local_7c + 1; if (bVar1) { bVar8 = true; } else { lVar14 = __muldi3(local_58,local_5c,param_3,param_3 >> 0x1f); lVar14 = lVar14 + (ulonglong)uVar11; uVar6 = (uint)((ulonglong)lVar14 >> 0x20); bVar1 = local_58 < (uint)lVar14; if (uVar6 != local_5c) { bVar1 = local_5c < uVar6; } bVar8 = (bool)(bVar8 | (lVar2 != 0 && !bVar1)); } } piVar4 = (int *)*param_1; if ((uint)piVar4[2] < (uint)piVar4[3]) { piVar4[2] = piVar4[2] + 4; } else { (**(code **)(*piVar4 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar6 = local_70; lVar2 = lVar14; } if ((iVar3 != iVar9) && (local_60 != 0)) { *local_68 = cVar7; local_68 = acStack_54 + local_60 + 1; } if (0 < local_7c) { if (bVar8) { *param_4 = 0xffffffff; param_4[1] = 0xffffffff; return 0; } uVar6 = -local_58; if (param_6 == 0) { uVar6 = local_58; } *param_4 = uVar6; uVar6 = -(uint)(local_58 != 0) - local_5c; if (param_6 == 0) { uVar6 = local_5c; } param_4[1] = uVar6; if (iVar3 != iVar9) { local_70 = std::priv::__valid_grouping (acStack_54,local_68,*(char **)(param_8 + 0x14), *(char **)(param_8 + 0x10)); } return local_70; } return 0; } ### FUNC FUN_000488bc @ 000488bc /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_000488bc(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, longdouble *param_6) { locale *this; undefined4 uVar1; undefined4 uVar2; int iVar3; int *piVar4; int iVar5; uint uVar6; undefined1 *local_134 [4]; undefined1 **local_124; undefined1 local_120; undefined1 auStack_11f [256]; undefined1 auStack_1f [3]; undefined1 **local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); __aeabi_memclr(auStack_11f,0x100); local_120 = 0; local_134[0] = auStack_1f; local_124 = (undefined1 **)&local_120; local_1c = (undefined1 **)&local_120; iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2); uVar6 = 4; if (iVar3 == 1) { uVar6 = 0; std::priv::__string_to_float((__basic_iostring *)local_134,param_6); } *param_5 = uVar6; piVar4 = (int *)*param_2; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_2[1] = iVar3; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar3 == -1; } piVar4 = (int *)*param_3; if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar4[2] < (int *)piVar4[3]) { iVar3 = *(int *)piVar4[2]; } else { iVar3 = (**(code **)(*piVar4 + 0x20))(); } param_3[1] = iVar3; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar3 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar3 = param_2[1]; iVar5 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar3; param_1[2] = iVar5; if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) && ((undefined1 **)&local_120 != local_1c)) { if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c); } else { operator_delete(local_1c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_00048a34 @ 00048a34 void FUN_00048a34(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5, undefined4 *param_6) { locale *this; undefined4 uVar1; uint uVar2; int *piVar3; int iVar4; uint uVar5; int iVar6; undefined1 auStack_34 [4]; int local_30 [5]; int *local_1c; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20)); uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1); piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { uVar5 = 4; if ((uVar2 & 1) != 0) { uVar5 = 0; *param_6 = 0; param_6[1] = 0; } } else { piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3); (**(code **)(*piVar3 + 0x10))(local_30,piVar3); iVar4 = FUN_00048c38(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1, local_30,auStack_34); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if ((uint)(local_30[0] - (int)local_1c) < 0x81) { std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); } else { operator_delete(local_1c); } } uVar5 = 0; if (iVar4 == 0) { uVar5 = 4; } } *param_5 = uVar5; piVar3 = (int *)*param_2; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; *(bool *)(param_2 + 2) = iVar4 == -1; } piVar3 = (int *)*param_3; if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_3[1] = iVar4; *(undefined1 *)((int)param_3 + 9) = 1; *(bool *)(param_3 + 2) = iVar4 == -1; } if ((char)param_2[2] == (char)param_3[2]) { *param_5 = *param_5 | 2; } iVar4 = param_2[1]; iVar6 = param_2[2]; *param_1 = *param_2; param_1[1] = iVar4; param_1[2] = iVar6; std::locale::~locale(alStack_18); return; } ### FUNC FUN_00048c38 @ 00048c38 uint FUN_00048c38(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6, uint param_7,int param_8) { bool bVar1; int iVar2; int *piVar3; int iVar4; uint uVar5; char cVar6; bool bVar7; int iVar8; uint uVar9; uint uVar10; char *pcVar11; uint uVar12; uint uVar13; char cVar14; undefined8 uVar15; undefined8 uVar16; uint local_a0; int local_70; uint local_68; int local_60; uint local_5c; uint local_58; char acStack_54 [64]; iVar8 = *(int *)(param_8 + 0x10); iVar2 = *(int *)(param_8 + 0x14); local_68 = 1; local_a0 = 0x80000000; uVar15 = __aeabi_ldivmod(); uVar9 = (uint)((ulonglong)uVar15 >> 0x20); local_70 = param_5; cVar6 = '\0'; local_58 = 0; local_5c = 0; local_60 = 0; bVar7 = false; uVar5 = (uint)(*(char *)((int)param_1 + 9) == '\0'); while( true ) { pcVar11 = acStack_54 + local_60; piVar3 = (int *)*param_1; if ((piVar3 != (int *)0x0) && (uVar5 != 0)) { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_1[1] = iVar4; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = iVar4 == -1; } piVar3 = (int *)*param_2; if ((piVar3 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) { cVar14 = (char)param_2[2]; } else { if ((int *)piVar3[2] < (int *)piVar3[3]) { iVar4 = *(int *)piVar3[2]; } else { iVar4 = (**(code **)(*piVar3 + 0x20))(); } param_2[1] = iVar4; *(undefined1 *)((int)param_2 + 9) = 1; cVar14 = iVar4 == -1; *(char *)(param_2 + 2) = cVar14; } if ((char)param_1[2] == cVar14) break; if (*(char *)((int)param_1 + 9) == '\0') { piVar3 = (int *)*param_1; if ((uint *)piVar3[2] < (uint *)piVar3[3]) { uVar5 = *(uint *)piVar3[2]; } else { uVar5 = (**(code **)(*piVar3 + 0x20))(); } param_1[1] = uVar5; *(undefined1 *)((int)param_1 + 9) = 1; *(bool *)(param_1 + 2) = uVar5 == 0xffffffff; } else { uVar5 = param_1[1]; } uVar10 = local_5c; uVar13 = local_58; if (uVar5 == param_7 && iVar2 != iVar8) { *pcVar11 = cVar6; local_60 = local_60 + 1; cVar6 = '\0'; } else { uVar12 = 0xff; if (uVar5 < 0x80) { uVar12 = std::priv::__digit_val_table(uVar5); } if (param_3 <= (int)uVar12) break; bVar1 = local_58 < (uint)uVar15; if (local_5c != uVar9) { bVar1 = (int)local_5c < (int)uVar9; } cVar6 = cVar6 + '\x01'; local_70 = local_70 + 1; if (bVar1) { bVar7 = true; } else { uVar16 = __muldi3(local_58,local_5c,param_3,param_3 >> 0x1f); uVar13 = (uint)uVar16 - uVar12; uVar10 = (int)((ulonglong)uVar16 >> 0x20) - (uint)((uint)uVar16 < uVar12); bVar1 = uVar13 < local_58; if (uVar10 != local_5c) { bVar1 = (int)uVar10 < (int)local_5c; } bVar7 = (bool)(bVar7 | ((local_58 != 0 || local_5c != 0) && !bVar1)); } } piVar3 = (int *)*param_1; if ((uint)piVar3[2] < (uint)piVar3[3]) { piVar3[2] = piVar3[2] + 4; } else { (**(code **)(*piVar3 + 0x24))(); } *(undefined1 *)((int)param_1 + 9) = 0; uVar5 = local_68; local_5c = uVar10; local_58 = uVar13; } if ((iVar2 != iVar8) && (local_60 != 0)) { *pcVar11 = cVar6; pcVar11 = acStack_54 + local_60 + 1; } uVar5 = 0; if (0 < local_70) { if (bVar7) { uVar5 = 0; if (param_6 == 0) { uVar5 = 0xffffffff; } *param_4 = uVar5; if (param_6 == 0) { local_a0 = 0x7fffffff; } param_4[1] = local_a0; return 0; } uVar5 = local_58; if (param_6 == 0) { uVar5 = -local_58; } *param_4 = uVar5; if (param_6 == 0) { local_5c = -(uint)(local_58 != 0) - local_5c; } param_4[1] = local_5c; uVar5 = local_68; if (iVar2 != iVar8) { uVar5 = std::priv::__valid_grouping (acStack_54,pcVar11,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10)); } } return uVar5; } ### FUNC FUN_00048ea6 @ 00048ea6 void FUN_00048ea6(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_00048f08 @ 00048f08 void FUN_00048f08(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_00041ecc(auStack_16,uVar2,param_7); FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00048f42 @ 00048f42 void FUN_00048f42(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_000424fc(auStack_16,uVar2,param_7); FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00048f7c @ 00048f7c void FUN_00048f7c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6) { FUN_0004992c(param_1,param_3,param_4,param_5,param_6); return; } ### FUNC FUN_00048fa0 @ 00048fa0 void FUN_00048fa0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6) { FUN_00049ee0(param_1,param_3,param_4,param_5,param_6); return; } ### FUNC FUN_00048fc4 @ 00048fc4 void FUN_00048fc4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_00042c10(auStack_16,uVar2,param_7,param_8); FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_00049000 @ 00049000 void FUN_00049000(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8) { undefined4 uVar1; undefined4 uVar2; undefined1 auStack_16 [2]; uVar2 = *(undefined4 *)(param_5 + 4); uVar1 = FUN_00042d68(auStack_16,uVar2,param_7,param_8); FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6); return; } ### FUNC FUN_0004903c @ 0004903c void FUN_0004903c(undefined4 param_1,undefined4 param_2,int *param_3,uint param_4,int param_5, undefined4 param_6,int param_7) { bool bVar1; locale *this; int *piVar2; undefined4 uVar3; int iVar4; int iVar5; int *piVar6; undefined4 uVar7; uint uVar8; undefined4 uVar9; uint local_28; locale alStack_24 [14]; undefined1 auStack_16 [2]; this = (locale *)std::locale::locale(alStack_24,(locale *)(param_5 + 0x20)); piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); std::locale::~locale(alStack_24); uVar3 = 10; *(undefined4 *)(param_5 + 0x1c) = 10; uVar8 = *(uint *)(param_5 + 4); *(uint *)(param_5 + 4) = uVar8 & 0xfffffdc0 | 0x214; local_28 = param_4; if (param_7 == 0) { if ((int)(uVar8 << 0x11) < 0) { iVar4 = std::priv::__hex_char_table_hi(); } else { iVar4 = std::priv::__hex_char_table_lo(); } iVar5 = (**(code **)(*piVar2 + 0x28))(piVar2,0x30); bVar1 = true; if ((param_4 & 0xff) != 0) { piVar6 = (int *)param_3[5]; if (piVar6 < (int *)param_3[6]) { param_3[5] = (int)(piVar6 + 1); *piVar6 = iVar5; } else { iVar5 = (**(code **)(*param_3 + 0x34))(param_3); } bVar1 = true; if (iVar5 != -1) { bVar1 = false; } } iVar4 = (**(code **)(*piVar2 + 0x28))(piVar2,*(undefined1 *)(iVar4 + 0x10)); local_28 = 0; if (!bVar1) { piVar6 = (int *)param_3[5]; if (piVar6 < (int *)param_3[6]) { param_3[5] = (int)(piVar6 + 1); *piVar6 = iVar4; } else { iVar4 = (**(code **)(*param_3 + 0x34))(param_3); } local_28 = 1; if (iVar4 == -1) { local_28 = 0; } } local_28 = param_4 & 0xffffff00 | local_28; uVar3 = 8; } *(undefined4 *)(param_5 + 0x1c) = uVar3; uVar3 = (**(code **)(*piVar2 + 0x28))(piVar2,0x30); uVar9 = *(undefined4 *)(param_5 + 4); uVar7 = FUN_000424fc(auStack_16,uVar9,param_7); FUN_000493e4(param_1,uVar7,auStack_16,param_3,local_28,param_5,uVar9,uVar3); *(uint *)(param_5 + 4) = uVar8; return; } ### FUNC FUN_00049168 @ 00049168 void FUN_00049168(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6) { locale *this; int *piVar1; uint uVar2; int *piVar3; uint uVar4; int iVar5; code *pcVar6; uint uVar7; int iVar8; uint uVar9; uint local_60; int local_5c [16]; int local_1c; int *local_18; this = (locale *)std::locale::locale((locale *)local_5c,(locale *)(param_4 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_5c); if (param_6 == 1) { pcVar6 = *(code **)(*piVar1 + 0x14); } else { pcVar6 = *(code **)(*piVar1 + 0x18); } (*pcVar6)(local_5c,piVar1); uVar9 = *(uint *)(param_4 + 0x1c); local_60 = 0; *(undefined4 *)(param_4 + 0x1c) = 0; uVar4 = local_1c - (int)local_18; uVar7 = (int)uVar4 >> 2; if (uVar7 < uVar9) { if ((*(uint *)(param_4 + 4) & 7) == 1) { uVar2 = param_3; if (0 < (int)uVar4) { iVar8 = (uVar4 >> 2) + 1; piVar1 = local_18; uVar4 = param_3; do { uVar2 = 0; if ((uVar4 & 0xff) != 0) { iVar5 = *piVar1; piVar3 = (int *)param_2[5]; if (piVar3 < (int *)param_2[6]) { param_2[5] = (int)(piVar3 + 1); *piVar3 = iVar5; } else { iVar5 = (**(code **)(*param_2 + 0x34))(param_2); } uVar2 = (uint)(iVar5 != -1); } iVar8 = iVar8 + -1; piVar1 = piVar1 + 1; uVar4 = uVar2; } while (1 < iVar8); } param_3 = uVar2 & 0xff | param_3 & 0xffffff00; if (0 < (int)(uVar9 - uVar7)) { iVar8 = (uVar9 + 1) - uVar7; do { uVar4 = 0; if ((param_3 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_5; iVar5 = param_5; } else { iVar5 = (**(code **)(*param_2 + 0x34))(param_2,param_5); } uVar4 = 1; if (iVar5 == -1) { uVar4 = 0; } } param_3 = param_3 & 0xffffff00 | uVar4; iVar8 = iVar8 + -1; } while (1 < iVar8); } } else { uVar4 = param_3; if (0 < (int)(uVar9 - uVar7)) { iVar8 = (uVar9 + 1) - uVar7; uVar7 = param_3; do { uVar4 = 0; if ((uVar7 & 0xff) != 0) { piVar1 = (int *)param_2[5]; if (piVar1 < (int *)param_2[6]) { param_2[5] = (int)(piVar1 + 1); *piVar1 = param_5; iVar5 = param_5; } else { iVar5 = (**(code **)(*param_2 + 0x34))(param_2,param_5); } uVar4 = 1; if (iVar5 == -1) { uVar4 = 0; } } iVar8 = iVar8 + -1; uVar7 = uVar4; } while (1 < iVar8); } param_3 = uVar4 & 0xff | param_3 & 0xffffff00; if (0 < local_1c - (int)local_18) { iVar8 = ((uint)(local_1c - (int)local_18) >> 2) + 1; piVar1 = local_18; do { uVar4 = 0; if ((param_3 & 0xff) != 0) { iVar5 = *piVar1; piVar3 = (int *)param_2[5]; if (piVar3 < (int *)param_2[6]) { param_2[5] = (int)(piVar3 + 1); *piVar3 = iVar5; } else { iVar5 = (**(code **)(*param_2 + 0x34))(param_2); } uVar4 = 1; if (iVar5 == -1) { uVar4 = 0; } } param_3 = param_3 & 0xffffff00 | uVar4; iVar8 = iVar8 + -1; piVar1 = piVar1 + 1; } while (1 < iVar8); } } } else if (0 < (int)uVar4) { iVar8 = (uVar4 >> 2) + 1; piVar1 = local_18; do { uVar4 = local_60; if ((param_3 & 0xff) != 0) { iVar5 = *piVar1; piVar3 = (int *)param_2[5]; if (piVar3 < (int *)param_2[6]) { param_2[5] = (int)(piVar3 + 1); *piVar3 = iVar5; } else { iVar5 = (**(code **)(*param_2 + 0x34))(param_2); } uVar4 = 1; if (iVar5 == -1) { uVar4 = 0; } } param_3 = param_3 & 0xffffff00 | uVar4; iVar8 = iVar8 + -1; piVar1 = piVar1 + 1; } while (1 < iVar8); } *param_1 = param_2; param_1[1] = param_3; if ((local_18 != local_5c) && (local_18 != (int *)0x0)) { if (0x80 < (uint)(local_5c[0] - (int)local_18)) { operator_delete(local_18); return; } std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18); } return; } ### FUNC FUN_000493e4 @ 000493e4 void FUN_000493e4(undefined4 param_1,int param_2,int param_3,undefined4 param_4,undefined4 param_5, int param_6,uint param_7,undefined4 param_8) { locale *this; int *piVar1; undefined4 uVar2; undefined4 uVar3; undefined4 uVar4; undefined1 uVar5; int local_130 [4]; int *local_120; int *local_11c; undefined1 auStack_118 [256]; locale alStack_18 [4]; this = (locale *)std::locale::locale(alStack_18,(locale *)(param_6 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); uVar2 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b); uVar3 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2d); (**(code **)(*piVar1 + 0x2c))(piVar1,param_2,param_3,auStack_118); param_3 = param_3 - param_2; piVar1 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct::id); (**(code **)(*piVar1 + 0x10))(local_130,piVar1); if (local_11c != local_120) { uVar5 = 0; if ((int)(param_7 << 0x16) < 0) { uVar5 = 2; if ((param_7 & 0x38) != 0x10) { uVar5 = (param_7 & 0x38) == 0x20; } } uVar4 = (**(code **)(*piVar1 + 0xc))(piVar1); param_3 = FUN_00050274(auStack_118,auStack_118 + param_3 * 4,local_130,uVar4,uVar2,uVar3,uVar5); } uVar4 = *(undefined4 *)(param_6 + 0x1c); *(undefined4 *)(param_6 + 0x1c) = 0; FUN_0004953c(param_1,auStack_118,param_3,param_4,param_5,param_7,uVar4,param_8,uVar2,uVar3); if ((local_11c != local_130) && (local_11c != (int *)0x0)) { if ((uint)(local_130[0] - (int)local_11c) < 0x81) { std::__node_alloc::_M_deallocate(local_11c,local_130[0] - (int)local_11c); } else { operator_delete(local_11c); } } std::locale::~locale(alStack_18); return; } ### FUNC FUN_0004953c @ 0004953c void FUN_0004953c(undefined4 *param_1,int *param_2,int param_3,int *param_4,uint param_5, uint param_6,int param_7,int param_8,int param_9,int param_10) { uint uVar1; int *piVar2; int iVar3; bool bVar4; int iVar5; uint uVar6; int iVar7; bool bVar8; if (param_3 < param_7) { iVar5 = param_7 - param_3; if ((param_6 & 7) == 1) { uVar1 = param_5; if (0 < param_3 * 4) { iVar7 = param_3 + 1; uVar6 = param_5; do { uVar1 = 0; if ((uVar6 & 0xff) != 0) { iVar3 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar3; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = (uint)(iVar3 != -1); } iVar7 = iVar7 + -1; param_2 = param_2 + 1; uVar6 = uVar1; } while (1 < iVar7); } param_5 = param_5 & 0xffffff00 | uVar1 & 0xff; if (0 < iVar5) { param_3 = (param_7 + 1) - param_3; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar5 = param_8; } else { iVar5 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar1 = (uint)(iVar5 != -1); } param_5 = param_5 & 0xffffff00 | uVar1; param_3 = param_3 + -1; } while (1 < param_3); } } else if (((param_3 == 0) || ((param_6 & 7) != 4)) || ((iVar7 = *param_2, iVar7 != param_9 && (iVar7 != param_10)))) { if ((param_3 < 2) || ((param_6 & 0x23f) != 0x214)) { uVar1 = param_5; if (0 < iVar5) { iVar5 = (param_7 + 1) - param_3; uVar6 = param_5; do { uVar1 = 0; if ((uVar6 & 0xff) != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar7 = param_8; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar1 = (uint)(iVar7 != -1); } iVar5 = iVar5 + -1; uVar6 = uVar1; } while (1 < iVar5); } param_5 = param_5 & 0xffffff00 | uVar1 & 0xff; if (0 < param_3 * 4) { param_3 = param_3 + 1; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar5 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar5; } else { iVar5 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = (uint)(iVar5 != -1); } param_5 = param_5 & 0xffffff00 | uVar1; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < param_3); } } else { bVar8 = false; if ((param_5 & 0xff) != 0) { iVar7 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4); } if (iVar7 != -1) { iVar7 = param_2[1]; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4); } bVar8 = iVar7 != -1; } } if (0 < iVar5) { iVar5 = (param_7 + 1) - param_3; bVar4 = bVar8; do { bVar8 = false; if (bVar4 != false) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar7 = param_8; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } bVar8 = iVar7 != -1; } iVar5 = iVar5 + -1; bVar4 = bVar8; } while (1 < iVar5); } param_5 = param_5 & 0xffffff00 | (uint)bVar8; uVar1 = param_3 * 4 - 8; if (0 < (int)uVar1) { param_2 = param_2 + 2; iVar5 = (uVar1 >> 2) + 1; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar7 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = (uint)(iVar7 != -1); } param_5 = param_5 & 0xffffff00 | uVar1; iVar5 = iVar5 + -1; param_2 = param_2 + 1; } while (1 < iVar5); } } } else { bVar8 = false; if ((param_5 & 0xff) != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4); } bVar8 = true; if (iVar7 == -1) { bVar8 = false; } } if (0 < iVar5) { iVar5 = (param_7 + 1) - param_3; bVar4 = bVar8; do { bVar8 = false; if (bVar4 != false) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar7 = param_8; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } bVar8 = iVar7 != -1; } iVar5 = iVar5 + -1; bVar4 = bVar8; } while (1 < iVar5); } param_5 = param_5 & 0xffffff00 | (uint)bVar8; uVar1 = param_3 * 4 - 4; if (0 < (int)uVar1) { iVar5 = (uVar1 >> 2) + 1; do { param_2 = param_2 + 1; uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar7 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = (uint)(iVar7 != -1); } param_5 = param_5 & 0xffffff00 | uVar1; iVar5 = iVar5 + -1; } while (1 < iVar5); } } } else if (0 < param_3 * 4) { param_3 = param_3 + 1; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar5 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar5; } else { iVar5 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = (uint)(iVar5 != -1); } param_5 = param_5 & 0xffffff00 | uVar1; param_3 = param_3 + -1; param_2 = param_2 + 1; } while (1 < param_3); } *param_1 = param_4; param_1[1] = param_5; return; } ### FUNC FUN_0004992c @ 0004992c void FUN_0004992c(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) { locale *this; int *piVar1; undefined1 **ppuVar2; undefined4 **local_14c; int local_148 [5]; int *local_134; undefined1 *local_130 [4]; undefined1 **local_120; undefined1 local_11c; undefined1 auStack_11b [256]; undefined1 auStack_1b [3]; undefined1 **local_18; __aeabi_memclr(auStack_11b,0x100,param_3,&local_14c); local_11c = 0; local_130[0] = auStack_1b; local_14c = &local_18; local_120 = (undefined1 **)&local_11c; local_18 = (undefined1 **)&local_11c; FUN_00051490(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_148); (**(code **)(*piVar1 + 8))(piVar1); (**(code **)(*piVar1 + 0xc))(piVar1); (**(code **)(*piVar1 + 0x10))(local_148,piVar1); FUN_00049a8c(param_1,local_130,param_2,param_3); if ((local_134 != local_148) && (local_134 != (int *)0x0)) { if ((uint)(local_148[0] - (int)local_134) < 0x81) { std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); } else { operator_delete(local_134); } } ppuVar2 = (undefined1 **)*local_14c; if (((ppuVar2 != local_130) && (ppuVar2 != (undefined1 **)0x0)) && ((undefined1 **)&local_11c != ppuVar2)) { if (0x80 < (uint)((int)local_130[0] - (int)ppuVar2)) { operator_delete(ppuVar2); return; } std::__node_alloc::_M_deallocate(ppuVar2,(int)local_130[0] - (int)ppuVar2); } return; } ### FUNC FUN_00049a8c @ 00049a8c /* WARNING: Restarted to delay deadcode elimination for space: stack */ void FUN_00049a8c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8, undefined4 param_9,int param_10) { undefined4 **ppuVar1; undefined4 **ppuVar2; locale *this; int *piVar3; undefined4 uVar4; undefined4 uVar5; undefined4 uVar6; undefined4 uVar7; undefined4 **local_460 [16]; undefined4 **local_420; undefined4 *local_41c; undefined1 auStack_418 [1024]; undefined4 **local_18; this = (locale *)std::locale::locale((locale *)local_460,(locale *)(param_5 + 0x20)); piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype::id); std::locale::~locale((locale *)local_460); __aeabi_memclr4(auStack_418,0x400); local_41c = (undefined4 **)0x0; local_460[0] = &local_18; local_420 = &local_41c; local_18 = &local_41c; FUN_00051848(param_2,local_460,piVar3,param_7,1); if (*(int *)(param_10 + 0x14) != *(int *)(param_10 + 0x10)) { uVar4 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2b); uVar5 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d); FUN_0005031c(local_460,param_9,param_10,param_8,uVar4,uVar5,0); } ppuVar2 = local_18; ppuVar1 = local_420; uVar4 = *(undefined4 *)(param_5 + 0x1c); *(undefined4 *)(param_5 + 0x1c) = 0; uVar7 = *(undefined4 *)(param_5 + 4); uVar5 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2b); uVar6 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d); FUN_00049c20(param_1,ppuVar2,ppuVar1,param_3,param_4,uVar7,uVar4,param_6,uVar5,uVar6); if ((((undefined4 ***)local_18 != local_460) && ((undefined4 ***)local_18 != (undefined4 ***)0x0)) && (&local_41c != local_18)) { if ((uint)((int)local_460[0] - (int)local_18) < 0x81) { std::__node_alloc::_M_deallocate(local_18,(int)local_460[0] - (int)local_18); } else { operator_delete(local_18); } } return; } ### FUNC FUN_00049c20 @ 00049c20 undefined4 * FUN_00049c20(undefined4 *param_1,int *param_2,int *param_3,int *param_4,uint param_5,uint param_6, int param_7,int param_8,int param_9,int param_10) { uint uVar1; int *piVar2; int iVar3; int iVar4; uint uVar5; int iVar6; int iVar7; uint uVar8; int *local_18; uVar1 = (int)param_3 - (int)param_2; iVar6 = (int)uVar1 >> 2; if (iVar6 < param_7) { iVar3 = param_7 - iVar6; if ((param_6 & 7) == 4) { if ((param_2 != param_3) && ((iVar7 = *param_2, iVar7 == param_9 || (iVar7 == param_10)))) { param_2 = param_2 + 1; uVar1 = 0; if ((param_5 & 0xff) != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar7; } else { iVar7 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = 1; if (iVar7 == -1) { uVar1 = 0; } } if (0 < iVar3) { iVar6 = (param_7 + 1) - iVar6; uVar5 = uVar1; do { uVar1 = 0; if (uVar5 != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar3 = param_8; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar1 = 1; if (iVar3 == -1) { uVar1 = 0; } } iVar6 = iVar6 + -1; uVar5 = uVar1; } while (1 < iVar6); } param_5 = param_5 & 0xffffff00 | uVar1; if (0 < (int)param_3 - (int)param_2) { iVar6 = ((uint)((int)param_3 - (int)param_2) >> 2) + 1; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar3 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar3; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = 1; if (iVar3 == -1) { uVar1 = 0; } } param_5 = param_5 & 0xffffff00 | uVar1; iVar6 = iVar6 + -1; param_2 = param_2 + 1; } while (1 < iVar6); } goto LAB_00049e02; } } else if ((param_6 & 7) == 1) { uVar5 = param_5; if (0 < (int)uVar1) { iVar7 = (uVar1 >> 2) + 1; uVar1 = param_5; local_18 = param_2; do { uVar5 = 0; if ((uVar1 & 0xff) != 0) { iVar4 = *local_18; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar4; } else { iVar4 = (**(code **)(*param_4 + 0x34))(param_4); } uVar5 = 1; if (iVar4 == -1) { uVar5 = 0; } } iVar7 = iVar7 + -1; local_18 = local_18 + 1; uVar1 = uVar5; } while (1 < iVar7); } param_5 = param_5 & 0xffffff00 | uVar5 & 0xff; if (0 < iVar3) { iVar6 = (param_7 + 1) - iVar6; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar3 = param_8; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar1 = 1; if (iVar3 == -1) { uVar1 = 0; } } param_5 = param_5 & 0xffffff00 | uVar1; iVar6 = iVar6 + -1; } while (1 < iVar6); } goto LAB_00049e02; } uVar5 = param_5; if (0 < iVar3) { iVar6 = (param_7 + 1) - iVar6; uVar8 = param_5; do { uVar5 = 0; if ((uVar8 & 0xff) != 0) { piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = param_8; iVar3 = param_8; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8); } uVar5 = 1; if (iVar3 == -1) { uVar5 = 0; } } iVar6 = iVar6 + -1; uVar8 = uVar5; } while (1 < iVar6); } param_5 = param_5 & 0xffffff00 | uVar5 & 0xff; if (0 < (int)uVar1) { iVar6 = (uVar1 >> 2) + 1; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar3 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar3; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = 1; if (iVar3 == -1) { uVar1 = 0; } } param_5 = param_5 & 0xffffff00 | uVar1; iVar6 = iVar6 + -1; param_2 = param_2 + 1; } while (1 < iVar6); } } else if (0 < (int)uVar1) { iVar6 = (uVar1 >> 2) + 1; do { uVar1 = 0; if ((param_5 & 0xff) != 0) { iVar3 = *param_2; piVar2 = (int *)param_4[5]; if (piVar2 < (int *)param_4[6]) { param_4[5] = (int)(piVar2 + 1); *piVar2 = iVar3; } else { iVar3 = (**(code **)(*param_4 + 0x34))(param_4); } uVar1 = 1; if (iVar3 == -1) { uVar1 = 0; } } param_5 = param_5 & 0xffffff00 | uVar1; iVar6 = iVar6 + -1; param_2 = param_2 + 1; } while (1 < iVar6); } LAB_00049e02: *param_1 = param_4; param_1[1] = param_5; return param_1 + 2; } ### FUNC FUN_00049ee0 @ 00049ee0 void FUN_00049ee0(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4) { locale *this; int *piVar1; undefined1 **ppuVar2; undefined4 **local_14c; int local_148 [5]; int *local_134; undefined1 *local_130 [4]; undefined1 **local_120; undefined1 local_11c; undefined1 auStack_11b [256]; undefined1 auStack_1b [3]; undefined1 **local_18; __aeabi_memclr(auStack_11b,0x100,param_3,&local_14c); local_11c = 0; local_130[0] = auStack_1b; local_14c = &local_18; local_120 = (undefined1 **)&local_11c; local_18 = (undefined1 **)&local_11c; FUN_00051642(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18)); this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20)); piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct::id); std::locale::~locale((locale *)local_148); (**(code **)(*piVar1 + 8))(piVar1); (**(code **)(*piVar1 + 0xc))(piVar1); (**(code **)(*piVar1 + 0x10))(local_148,piVar1); FUN_00049a8c(param_1,local_130,param_2,param_3); if ((local_134 != local_148) && (local_134 != (int *)0x0)) { if ((uint)(local_148[0] - (int)local_134) < 0x81) { std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134); } else { operator_delete(local_134); } } ppuVar2 = (undefined1 **)*local_14c; if (((ppuVar2 != local_130) && (ppuVar2 != (undefined1 **)0x0)) && ((undefined1 **)&local_11c != ppuVar2)) { if (0x80 < (uint)((int)local_130[0] - (int)ppuVar2)) { operator_delete(ppuVar2); return; } std::__node_alloc::_M_deallocate(ppuVar2,(int)local_130[0] - (int)ppuVar2); } return; } ### FUNC FUN_0004a040 @ 0004a040 void FUN_0004a040(int *param_1,int param_2,int param_3) { void *pvVar1; int iVar2; uint uVar3; void *pvVar4; undefined4 uVar5; uint uVar6; uint uVar7; int iVar8; uint local_18; uVar7 = param_3 - param_2; uVar6 = (int)uVar7 >> 2; iVar8 = *param_1; if ((uint)(param_1[2] - iVar8 >> 2) < uVar6) { if (uVar6 >> 0x1e != 0) { FUN_00030824(4); uVar5 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } local_18 = uVar7; if (uVar7 < 0x81) { pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18); uVar3 = local_18; } else { pvVar1 = operator_new(uVar7); uVar3 = uVar7; } if (param_3 != param_2) { __aeabi_memcpy(pvVar1,param_2,uVar7); } pvVar4 = (void *)*param_1; if (pvVar4 != (void *)0x0) { if ((uint)(param_1[2] - (int)pvVar4) < 0x81) { std::__node_alloc::_M_deallocate(pvVar4,param_1[2] - (int)pvVar4); } else { operator_delete(pvVar4); } } *param_1 = (int)pvVar1; param_1[1] = (int)((int)pvVar1 + uVar6 * 4); param_1[2] = (int)pvVar1 + (uVar3 & 0xfffffffc); return; } iVar2 = param_1[1]; uVar3 = iVar2 - iVar8 >> 2; param_1 = param_1 + 1; if (uVar6 <= uVar3) { if (uVar7 != 0) { __aeabi_memmove(iVar8,param_2,uVar7); iVar8 = iVar8 + uVar7; } *param_1 = iVar8; return; } param_2 = param_2 + uVar3 * 4; if (iVar2 - iVar8 != 0) { __aeabi_memmove(iVar8); iVar2 = *param_1; } if (param_2 != param_3) { __aeabi_memcpy(iVar2,param_2,param_3 - param_2); iVar2 = iVar2 + (param_3 - param_2); } *param_1 = iVar2; return; } ### FUNC FUN_0004a144 @ 0004a144 void FUN_0004a144(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a180 @ 0004a180 undefined4 FUN_0004a180(undefined4 *param_1,undefined4 param_2,undefined4 param_3,code *param_4,code *param_5, code *param_6,undefined4 *param_7,undefined4 *param_8) { char *pcVar1; char *pcVar2; int iVar3; void *pvVar4; undefined4 uVar5; int local_54; char local_50; int *local_40; int local_3c [5]; int *local_28; undefined4 local_24; undefined4 local_20; undefined1 auStack_1c [4]; int local_18; *param_8 = 0; if (*(char *)*param_1 == '\0') { pcVar2 = (char *)(*param_6)(param_2); *param_1 = pcVar2; pcVar1 = "C"; if ((pcVar2 == (char *)0x0) || (*pcVar2 == '\0')) goto LAB_0004a1c0; } else { pcVar1 = (char *)(*param_4)((char *)*param_1,param_2,param_3); if (pcVar1 == (char *)0x0) { return 0; } LAB_0004a1c0: *param_1 = pcVar1; pcVar2 = pcVar1; } FUN_00031c38(&local_54,pcVar2,auStack_1c); FUN_00036f1c(local_3c,&local_54); local_20 = 0; local_24 = 0; if ((local_40 != &local_54) && (local_40 != (int *)0x0)) { if ((uint)(local_54 - (int)local_40) < 0x81) { std::__node_alloc::_M_deallocate(local_40,local_54 - (int)local_40); } else { operator_delete(local_40); } } pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); pvVar4 = (void *)*param_7; if (pvVar4 == (void *)0x0) { pvVar4 = operator_new(0x1c); FUN_0004a8a8(pvVar4,0,&local_54,&local_18,auStack_1c); *param_7 = pvVar4; } FUN_0004aba0(&local_54,pvVar4,local_3c); if (local_50 != '\0') { iVar3 = (*param_5)(*param_1,param_3,param_8); *(int *)(local_54 + 0x1c) = iVar3; if (iVar3 == 0) { local_18 = local_54; FUN_0004ad36(*param_7,&local_18); uVar5 = 0; goto LAB_0004a26e; } } *(int *)(local_54 + 0x20) = *(int *)(local_54 + 0x20) + 1; uVar5 = *(undefined4 *)(local_54 + 0x1c); LAB_0004a26e: pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); if ((local_28 != local_3c) && (local_28 != (int *)0x0)) { if ((uint)(local_3c[0] - (int)local_28) < 0x81) { std::__node_alloc::_M_deallocate(local_28,local_3c[0] - (int)local_28); } else { operator_delete(local_28); } } return uVar5; } ### FUNC FUN_0004a320 @ 0004a320 void FUN_0004a320(void) { FUN_0004d8c4(); return; } ### FUNC FUN_0004a32a @ 0004a32a void FUN_0004a32a(void) { FUN_0004d960(); return; } ### FUNC FUN_0004a334 @ 0004a334 void FUN_0004a334(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a370 @ 0004a370 void FUN_0004a370(void) { FUN_0004d8da(); return; } ### FUNC FUN_0004a37c @ 0004a37c void FUN_0004a37c(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a3b8 @ 0004a3b8 void FUN_0004a3b8(void) { FUN_0004d8f0(); return; } ### FUNC FUN_0004a3c2 @ 0004a3c2 void FUN_0004a3c2(void) { FUN_0004d968(); return; } ### FUNC FUN_0004a3cc @ 0004a3cc void FUN_0004a3cc(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a408 @ 0004a408 void FUN_0004a408(void) { FUN_0004d906(); return; } ### FUNC FUN_0004a412 @ 0004a412 void FUN_0004a412(void) { FUN_0004d970(); return; } ### FUNC FUN_0004a41c @ 0004a41c void FUN_0004a41c(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a458 @ 0004a458 void FUN_0004a458(void) { FUN_0004d91c(); return; } ### FUNC FUN_0004a462 @ 0004a462 void FUN_0004a462(void) { FUN_0004d978(); return; } ### FUNC FUN_0004a46c @ 0004a46c void FUN_0004a46c(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a4a8 @ 0004a4a8 void FUN_0004a4a8(void) { FUN_0004d932(); return; } ### FUNC FUN_0004a4b2 @ 0004a4b2 void FUN_0004a4b2(void) { FUN_0004d980(); return; } ### FUNC FUN_0004a4bc @ 0004a4bc void FUN_0004a4bc(void) { FUN_0004a180(); return; } ### FUNC FUN_0004a4f8 @ 0004a4f8 void FUN_0004a4f8(void) { FUN_0004d948(); return; } ### FUNC FUN_0004a502 @ 0004a502 void FUN_0004a502(void) { FUN_0004d988(); return; } ### FUNC FUN_0004a50c @ 0004a50c void FUN_0004a50c(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070dc4; if ((param_1 != 0) && (DAT_00070dc4 != 0)) { local_120 = FUN_0004d990(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9c8(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a590 @ 0004a590 void FUN_0004a590(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070dc8; if ((param_1 != 0) && (DAT_00070dc8 != 0)) { local_120 = FUN_0004d998(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9ca(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a614 @ 0004a614 void FUN_0004a614(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070dcc; if ((param_1 != 0) && (DAT_00070dcc != 0)) { local_120 = FUN_0004d9a0(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9cc(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a698 @ 0004a698 void FUN_0004a698(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070dd0; if ((param_1 != 0) && (DAT_00070dd0 != 0)) { local_120 = FUN_0004d9a8(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9ce(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a71c @ 0004a71c void FUN_0004a71c(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070dd4; if ((param_1 != 0) && (DAT_00070dd4 != 0)) { local_120 = FUN_0004d9b0(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9d0(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a7a0 @ 0004a7a0 void FUN_0004a7a0(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070dd8; if ((param_1 != 0) && (DAT_00070dd8 != 0)) { local_120 = FUN_0004d9b8(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9d2(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a824 @ 0004a824 void FUN_0004a824(int param_1) { int iVar1; int iVar2; int local_120; undefined1 auStack_11c [260]; int local_18; int local_14; iVar1 = DAT_00070ddc; if ((param_1 != 0) && (DAT_00070ddc != 0)) { local_120 = FUN_0004d9c0(param_1,auStack_11c); if (local_120 != 0) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0); FUN_0004b1b0(&local_18,iVar1,&local_120); if ((local_18 != 0) && (iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) { FUN_0004d9d4(*(undefined4 *)(local_18 + 0x1c)); local_14 = local_18; FUN_0004ad36(iVar1,&local_14); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0); } } return; } ### FUNC FUN_0004a8a8 @ 0004a8a8 int FUN_0004a8a8(int param_1,uint param_2) { int *piVar1; int iVar2; int *piVar3; uint uVar4; uint uVar5; undefined4 local_18; *(undefined4 *)(param_1 + 4) = 0; *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0xc) = 0; *(undefined4 *)(param_1 + 0x10) = 0; *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x18) = 0x3f800000; piVar1 = &DAT_0006537c; uVar5 = 0x1e; while (uVar4 = uVar5, 0 < (int)uVar4) { uVar5 = uVar4 >> 1; if ((uint)piVar1[uVar5] < param_2) { piVar1 = piVar1 + uVar5 + 1; uVar5 = (uVar4 - 1) - uVar5; } } piVar3 = &DAT_000653f0; if (piVar1 != (int *)&DAT_000653f4) { piVar3 = piVar1; } iVar2 = *piVar3; FUN_0004a990(param_1 + 8,iVar2 + 1); local_18 = 0; FUN_0004aa50(param_1 + 8,iVar2 + 1,&local_18); return param_1; } ### FUNC FUN_0004a990 @ 0004a990 void FUN_0004a990(int *param_1,uint param_2) { void *pvVar1; void *pvVar2; int iVar3; int iVar4; int iVar5; uint local_1c; uint local_18; iVar5 = *param_1; if ((uint)(param_1[2] - iVar5 >> 2) < param_2) { if (param_2 >> 0x1e != 0) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("vector"); } iVar4 = param_1[1]; iVar3 = iVar4 - iVar5; if (iVar5 == 0) { param_2 = param_2 << 2; local_1c = param_2; if (param_2 < 0x81) { pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_1c); } else { pvVar1 = operator_new(param_2); local_1c = param_2; } param_2 = local_1c >> 2; } else { param_2 = param_2 << 2; local_18 = param_2; if (param_2 < 0x81) { pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18); param_2 = local_18; } else { pvVar1 = operator_new(param_2); } param_2 = param_2 >> 2; if (iVar4 != iVar5) { __aeabi_memcpy(pvVar1,iVar5,iVar3); } pvVar2 = (void *)*param_1; if (pvVar2 != (void *)0x0) { if ((uint)(param_1[2] - (int)pvVar2) < 0x81) { std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2); } else { operator_delete(pvVar2); } } } *param_1 = (int)pvVar1; param_1[1] = (int)((int)pvVar1 + (iVar3 >> 2) * 4); param_1[2] = (int)((int)pvVar1 + param_2 * 4); } return; } ### FUNC FUN_0004aa50 @ 0004aa50 /* WARNING: Removing unreachable block (ram,0x0004aaf6) */ void FUN_0004aa50(undefined4 *param_1,uint param_2,undefined4 *param_3) { void *pvVar1; uint uVar2; undefined4 *puVar3; undefined4 uVar4; int iVar5; undefined4 *puVar6; undefined4 *puVar7; int iVar8; undefined1 auStack_24 [4]; void *local_20; undefined4 local_1c; int local_18; puVar7 = (undefined4 *)*param_1; if ((uint)(param_1[2] - (int)puVar7 >> 2) < param_2) { FUN_0004ab14(&local_20,param_2,param_3,auStack_24); pvVar1 = (void *)*param_1; *param_1 = local_20; uVar4 = param_1[1]; param_1[1] = local_1c; iVar5 = param_1[2]; param_1[2] = local_18; if (pvVar1 != (void *)0x0) { local_20 = pvVar1; local_1c = uVar4; local_18 = iVar5; if (0x80 < (uint)(iVar5 - (int)pvVar1)) { operator_delete(pvVar1); return; } std::__node_alloc::_M_deallocate(pvVar1,iVar5 - (int)pvVar1); return; } } else { puVar6 = (undefined4 *)param_1[1]; uVar2 = (int)puVar6 - (int)puVar7; if ((uint)((int)uVar2 >> 2) < param_2) { if (0 < (int)uVar2) { iVar5 = (uVar2 >> 2) + 1; do { *puVar7 = *param_3; puVar7 = puVar7 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); puVar7 = (undefined4 *)*param_1; puVar6 = (undefined4 *)param_1[1]; } iVar8 = (int)puVar6 - (int)puVar7 >> 2; iVar5 = param_2 - iVar8; puVar7 = puVar6 + iVar5; if (0 < iVar5 * 4) { iVar8 = (param_2 + 1) - iVar8; do { *puVar6 = *param_3; puVar6 = puVar6 + 1; iVar8 = iVar8 + -1; } while (1 < iVar8); } param_1[1] = puVar7; return; } puVar3 = puVar7; uVar2 = param_2; if (param_2 != 0) { do { *puVar3 = *param_3; uVar2 = uVar2 - 1; puVar3 = puVar3 + 1; } while (uVar2 != 0); puVar7 = puVar7 + param_2; puVar6 = (undefined4 *)param_1[1]; } if (puVar7 != puVar6) { param_1[1] = puVar7; } } return; } ### FUNC FUN_0004ab14 @ 0004ab14 undefined4 * FUN_0004ab14(undefined4 *param_1,uint param_2,undefined4 *param_3) { undefined4 *puVar1; undefined4 uVar2; undefined4 *puVar3; int iVar4; uint uVar5; uint local_18; *param_1 = 0; param_1[1] = 0; param_1[2] = 0; if (param_2 >> 0x1e == 0) { if (param_2 == 0) { *param_1 = 0; param_1[1] = 0; param_1[2] = 0; puVar3 = (undefined4 *)0x0; } else { uVar5 = param_2 * 4; local_18 = uVar5; if (uVar5 < 0x81) { puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); } else { puVar1 = (undefined4 *)operator_new(uVar5); local_18 = uVar5; } *param_1 = puVar1; param_1[1] = puVar1; param_1[2] = (int)puVar1 + (local_18 & 0xfffffffc); puVar3 = puVar1 + param_2; if (0 < (int)uVar5) { iVar4 = param_2 + 1; do { *puVar1 = *param_3; puVar1 = puVar1 + 1; iVar4 = iVar4 + -1; } while (1 < iVar4); } } param_1[1] = puVar3; return param_1; } FUN_00030824(4); uVar2 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC FUN_0004aba0 @ 0004aba0 void FUN_0004aba0(undefined4 *param_1,int param_2,int param_3) { int iVar1; undefined1 uVar2; int extraout_r1; int iVar3; undefined4 *puVar4; byte *__s2; byte *pbVar5; uint uVar6; size_t sVar7; int iVar8; int *piVar9; int iVar10; int *piVar11; int *piVar12; size_t __n; int *piVar13; int local_18; __s2 = *(byte **)(param_3 + 0x14); __n = *(int *)(param_3 + 0x10) - (int)__s2; iVar10 = *(int *)(param_2 + 8); iVar1 = 0; if (__n != 0) { iVar1 = 0; pbVar5 = __s2; sVar7 = __n; do { iVar1 = iVar1 * 5 + (uint)*pbVar5; pbVar5 = pbVar5 + 1; sVar7 = sVar7 - 1; } while (sVar7 != 0); } __aeabi_uidivmod(iVar1,(*(int *)(param_2 + 0xc) - iVar10 >> 2) + -1); iVar1 = extraout_r1 * 4; piVar11 = *(int **)(iVar10 + iVar1); iVar8 = iVar10 + iVar1; piVar9 = *(int **)(iVar8 + 4); piVar12 = piVar11; if (piVar11 == piVar9) { iVar3 = iVar8; if (piVar11 == *(int **)(param_2 + 4)) { local_18 = 0; piVar12 = (int *)(param_2 + 4); } else { do { piVar12 = *(int **)(iVar3 + -4); iVar3 = iVar3 + -4; } while (piVar11 == piVar12); local_18 = (iVar3 - iVar10 >> 2) + 1; piVar9 = (int *)*piVar12; if ((((piVar11 != piVar9) && (piVar13 = (int *)*piVar9, piVar12 = piVar9, piVar11 != piVar13)) && (piVar9 = (int *)*piVar13, piVar12 = piVar13, piVar11 != piVar9)) && (piVar13 = (int *)*piVar9, piVar12 = piVar9, piVar11 != piVar13)) { for (piVar9 = (int *)*piVar13; piVar12 = piVar13, piVar11 != piVar9; piVar9 = (int *)*piVar9 ) { piVar13 = (int *)*piVar13; } } } piVar9 = (int *)FUN_0004ace4((int *)(param_2 + 4),param_3); *piVar9 = *piVar12; *piVar12 = (int)piVar9; puVar4 = (undefined4 *)(iVar10 + local_18 * 4); uVar6 = (iVar8 + 4) - (int)puVar4; if (0 < (int)uVar6) { iVar10 = (uVar6 >> 2) + 1; do { *puVar4 = piVar9; puVar4 = puVar4 + 1; iVar10 = iVar10 + -1; } while (1 < iVar10); } *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; piVar12 = *(int **)(*(int *)(param_2 + 8) + iVar1); uVar2 = 1; } else { do { if (piVar12[5] - piVar12[6] == __n) { iVar1 = memcmp((void *)piVar12[6],__s2,__n); uVar2 = 0; if (iVar1 == 0) goto LAB_0004acdc; } piVar12 = (int *)*piVar12; } while (piVar9 != piVar12); piVar12 = (int *)FUN_0004ace4(param_2 + 4,param_3); *piVar12 = *piVar11; *piVar11 = (int)piVar12; *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; uVar2 = 1; } LAB_0004acdc: *(undefined1 *)(param_1 + 1) = uVar2; *param_1 = piVar12; return; } ### FUNC FUN_0004ace4 @ 0004ace4 undefined4 * FUN_0004ace4(undefined4 param_1,int param_2) { undefined4 *puVar1; undefined4 uVar2; uint local_14; local_14 = 0x24; puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_14); FUN_00036f1c(puVar1 + 1,param_2); puVar1[7] = *(undefined4 *)(param_2 + 0x18); uVar2 = *(undefined4 *)(param_2 + 0x1c); *puVar1 = 0; puVar1[8] = uVar2; return puVar1; } ### FUNC FUN_0004ad36 @ 0004ad36 void FUN_0004ad36(int param_1,undefined4 *param_2) { int iVar1; int extraout_r1; int *piVar2; uint uVar3; byte *pbVar4; int *piVar5; int iVar6; int *piVar7; int iVar8; int *piVar9; int iVar10; piVar9 = (int *)*param_2; pbVar4 = (byte *)piVar9[6]; iVar6 = piVar9[5] - (int)pbVar4; iVar10 = *(int *)(param_1 + 8); iVar1 = 0; if (iVar6 != 0) { iVar1 = 0; do { iVar1 = iVar1 * 5 + (uint)*pbVar4; pbVar4 = pbVar4 + 1; iVar6 = iVar6 + -1; } while (iVar6 != 0); } __aeabi_uidivmod(iVar1,(*(int *)(param_1 + 0xc) - iVar10 >> 2) + -1); iVar1 = extraout_r1 * 4; piVar2 = *(int **)(iVar10 + iVar1); if (piVar2 != piVar9) { iVar6 = 0; for (piVar7 = (int *)*piVar2; *(int **)(iVar10 + iVar1 + 4) != piVar7; piVar7 = (int *)*piVar7) { if (piVar9 == piVar7) { piVar7 = (int *)*piVar2; *piVar2 = *piVar7; piVar9 = (int *)piVar7[6]; if ((piVar9 == piVar7 + 1) || (piVar9 == (int *)0x0)) { iVar6 = 1; if (piVar7 == (int *)0x0) break; } else { uVar3 = piVar7[1] - (int)piVar9; if (uVar3 < 0x81) { std::__node_alloc::_M_deallocate(piVar9,uVar3); } else { operator_delete(piVar9); } } std::__node_alloc::_M_deallocate(piVar7,0x24); iVar6 = 1; break; } piVar2 = (int *)*piVar2; } goto LAB_0004ae5e; } iVar6 = iVar10 + iVar1; if (piVar9 == *(int **)(param_1 + 4)) { iVar6 = 0; piVar2 = (int *)(param_1 + 4); } else { do { piVar2 = *(int **)(iVar6 + -4); iVar6 = iVar6 + -4; } while (piVar9 == piVar2); iVar6 = (iVar6 - iVar10 >> 2) + 1; piVar7 = (int *)*piVar2; if (((piVar9 != piVar7) && (piVar5 = (int *)*piVar7, piVar2 = piVar7, piVar9 != piVar5)) && (piVar7 = (int *)*piVar5, piVar2 = piVar5, piVar9 != piVar7)) { piVar2 = piVar7; for (piVar5 = (int *)*piVar7; piVar9 != piVar5; piVar5 = (int *)*piVar5) { piVar2 = (int *)*piVar2; } } } piVar7 = (int *)*piVar2; iVar8 = *piVar7; *piVar2 = iVar8; piVar2 = (int *)(iVar10 + iVar6 * 4); piVar9 = (int *)piVar7[6]; if ((piVar9 == piVar7 + 1) || (piVar9 == (int *)0x0)) { if (piVar7 != (int *)0x0) goto LAB_0004ae2e; } else { uVar3 = piVar7[1] - (int)piVar9; if (uVar3 < 0x81) { std::__node_alloc::_M_deallocate(piVar9,uVar3); } else { operator_delete(piVar9); } LAB_0004ae2e: std::__node_alloc::_M_deallocate(piVar7,0x24); } uVar3 = (iVar10 + iVar1 + 4) - (int)piVar2; if (0 < (int)uVar3) { iVar1 = (uVar3 >> 2) + 1; do { *piVar2 = iVar8; piVar2 = piVar2 + 1; iVar1 = iVar1 + -1; } while (1 < iVar1); } iVar6 = 1; LAB_0004ae5e: *(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) - iVar6; FUN_0004ae70(); return; } ### FUNC FUN_0004ae70 @ 0004ae70 void FUN_0004ae70(int param_1) { undefined4 uVar1; undefined4 uVar2; undefined4 uVar3; undefined4 uVar4; int iVar5; uint uVar6; uint uVar7; char *pcVar8; uint uVar9; char *pcVar10; uVar9 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2) - 1; uVar1 = __floatunsisf(*(undefined4 *)(param_1 + 0x14)); uVar2 = __floatunsisf(uVar9); uVar2 = __divsf3(uVar1,uVar2); uVar3 = *(undefined4 *)(param_1 + 0x18); uVar4 = __mulsf3(uVar3,0x3e800000); iVar5 = __aeabi_fcmpgt(uVar2,uVar4); if (iVar5 == 0) { iVar5 = 0; uVar7 = 0x1e; while (uVar6 = uVar7, 0 < (int)uVar6) { uVar7 = uVar6 >> 1; if ((uint)(&DAT_0006537c)[uVar7 + iVar5] < uVar9) { iVar5 = uVar7 + iVar5 + 1; uVar7 = (uVar6 - 1) - uVar7; } } pcVar8 = (char *)(&DAT_0006537c + iVar5); if ((iVar5 * 4 == 0x78) || ((iVar5 != 0 && ((&DAT_0006537c)[iVar5] == uVar9)))) { pcVar8 = "St7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE" + iVar5 * 4 + 0x38; } if (pcVar8 == "\a") { if (uVar9 < 8) { return; } pcVar8 = "\a"; } else { uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -4)); uVar2 = __divsf3(uVar1,uVar2); iVar5 = __aeabi_fcmpgt(uVar2,uVar3); if (iVar5 != 0) { return; } if (pcVar8 != "\x17") { do { pcVar10 = pcVar8 + -4; uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -8)); uVar2 = __divsf3(uVar1,uVar2); iVar5 = __aeabi_fcmpgt(uVar2,uVar3); if (iVar5 != 0) break; pcVar8 = pcVar10; } while (pcVar10 != "\x17"); } } FUN_0004af88(param_1,*(undefined4 *)pcVar8); } return; } ### FUNC FUN_0004af88 @ 0004af88 /* WARNING: Type propagation algorithm not settling */ void FUN_0004af88(int param_1,int param_2) { uint uVar1; uint uVar2; int iVar3; void *pvVar4; undefined4 uVar5; int ******ppppppiVar6; int ******ppppppiVar7; int extraout_r1; int *******pppppppiVar8; int *******pppppppiVar9; undefined4 *puVar10; size_t sVar11; void *pvVar12; int *******pppppppiVar13; int *******pppppppiVar14; int *******pppppppiVar15; size_t __n; int *******pppppppiVar16; int *******pppppppiVar17; void *local_44; int local_40; void *local_28; int *******local_1c; uint local_18; local_28 = (void *)0x0; local_1c = (int *******)0x0; pppppppiVar15 = (int *******)(param_1 + 4); uVar1 = param_2 + 1; if (uVar1 >> 0x1e == 0) { if (uVar1 == 0) { local_40 = 0; local_44 = (void *)0x0; } else { uVar1 = uVar1 * 4; local_18 = uVar1; if (uVar1 < 0x81) { local_28 = (void *)std::__node_alloc::_M_allocate(&local_18); uVar2 = local_18; } else { local_28 = operator_new(uVar1); uVar2 = uVar1; } local_44 = (void *)((int)local_28 + uVar1); local_40 = (int)local_28 + (uVar2 & 0xfffffffc); if (0 < (int)uVar1) { iVar3 = -2 - param_2; if (-2 - param_2 < -1) { iVar3 = -2; } __aeabi_memclr4(local_28,(iVar3 + param_2) * 4 + 0xc); } } pppppppiVar16 = (int *******)*pppppppiVar15; while (pppppppiVar16 != (int *******)0x0) { ppppppiVar6 = pppppppiVar16[6]; __n = (int)pppppppiVar16[5] - (int)ppppppiVar6; iVar3 = 0; if (__n != 0) { iVar3 = 0; ppppppiVar7 = ppppppiVar6; sVar11 = __n; do { iVar3 = iVar3 * 5 + (uint)*(byte *)ppppppiVar7; ppppppiVar7 = (int ******)((int)ppppppiVar7 + 1); sVar11 = sVar11 - 1; } while (sVar11 != 0); } __aeabi_uidivmod(iVar3,param_2); ppppppiVar7 = *pppppppiVar16; pppppppiVar17 = pppppppiVar16; while (((ppppppiVar7 != (int ******)0x0 && (__n == (int)ppppppiVar7[5] - (int)ppppppiVar7[6])) && (iVar3 = memcmp(ppppppiVar6,ppppppiVar7[6],__n), iVar3 == 0))) { ppppppiVar7 = (int ******)*ppppppiVar7; pppppppiVar17 = (int *******)*pppppppiVar17; } pppppppiVar13 = *(int ********)((int)local_28 + extraout_r1 * 4); pvVar4 = (void *)((int)local_28 + extraout_r1 * 4); iVar3 = 0; pvVar12 = pvVar4; pppppppiVar8 = (int *******)&local_1c; if (pppppppiVar13 != local_1c) { do { pppppppiVar8 = *(int ********)((int)pvVar12 + -4); pvVar12 = (void *)((int)pvVar12 + -4); } while (pppppppiVar13 == pppppppiVar8); iVar3 = ((int)pvVar12 - (int)local_28 >> 2) + 1; pppppppiVar14 = (int *******)*pppppppiVar8; if ((pppppppiVar13 != pppppppiVar14) && (pppppppiVar9 = (int *******)*pppppppiVar14, pppppppiVar8 = pppppppiVar14, pppppppiVar13 != pppppppiVar9)) { for (pppppppiVar14 = (int *******)*pppppppiVar9; pppppppiVar8 = pppppppiVar9, pppppppiVar13 != pppppppiVar14; pppppppiVar14 = (int *******)*pppppppiVar14) { pppppppiVar9 = (int *******)*pppppppiVar9; } } } if (((pppppppiVar15 != pppppppiVar17) && (pppppppiVar15 != pppppppiVar8)) && (pppppppiVar8 != pppppppiVar17)) { ppppppiVar6 = *pppppppiVar8; *pppppppiVar15 = *pppppppiVar17; *pppppppiVar8 = (int ******)pppppppiVar16; *pppppppiVar17 = ppppppiVar6; } puVar10 = (undefined4 *)((int)local_28 + iVar3 * 4); uVar1 = (int)pvVar4 + (4 - (int)puVar10); if (0 < (int)uVar1) { iVar3 = (uVar1 >> 2) + 1; do { *puVar10 = pppppppiVar16; puVar10 = puVar10 + 1; iVar3 = iVar3 + -1; } while (1 < iVar3); } pppppppiVar16 = (int *******)*pppppppiVar15; } *(int ********)(param_1 + 4) = local_1c; *(void **)(param_1 + 0xc) = local_44; pvVar12 = *(void **)(param_1 + 8); *(void **)(param_1 + 8) = local_28; iVar3 = *(int *)(param_1 + 0x10); *(int *)(param_1 + 0x10) = local_40; local_1c = pppppppiVar16; if (pvVar12 != (void *)0x0) { uVar1 = iVar3 - (int)pvVar12; if (uVar1 < 0x81) { std::__node_alloc::_M_deallocate(pvVar12,uVar1); pppppppiVar16 = local_1c; } else { operator_delete(pvVar12); pppppppiVar16 = local_1c; } } while (pppppppiVar16 != (int *******)0x0) { pppppppiVar15 = (int *******)pppppppiVar16[6]; pppppppiVar17 = (int *******)*pppppppiVar16; if ((pppppppiVar15 != pppppppiVar16 + 1) && (pppppppiVar15 != (int *******)0x0)) { uVar1 = (int)pppppppiVar16[1] - (int)pppppppiVar15; if (uVar1 < 0x81) { std::__node_alloc::_M_deallocate(pppppppiVar15,uVar1); } else { operator_delete(pppppppiVar15); } } std::__node_alloc::_M_deallocate(pppppppiVar16,0x24); pppppppiVar16 = pppppppiVar17; } return; } FUN_00030824(4); uVar5 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC FUN_0004b1b0 @ 0004b1b0 void FUN_0004b1b0(int *param_1,int param_2,undefined4 *param_3) { bool bVar1; int *piVar2; int iVar3; int iVar4; size_t __n; int *piVar5; undefined1 auStack_30 [4]; int local_2c [4]; int local_1c; int *local_18; iVar3 = FUN_0004b24a(param_2,param_3); piVar5 = *(int **)(*(int *)(param_2 + 8) + iVar3 * 4); iVar3 = *(int *)(*(int *)(param_2 + 8) + iVar3 * 4 + 4); while( true ) { if ((int *)iVar3 == piVar5) { *param_1 = 0; return; } FUN_00031c38(local_2c,*param_3,auStack_30); piVar2 = local_18; __n = piVar5[5] - piVar5[6]; bVar1 = false; if (__n == local_1c - (int)local_18) { iVar4 = memcmp((void *)piVar5[6],local_18,__n); bVar1 = true; if (iVar4 != 0) { bVar1 = false; } } if ((piVar2 != local_2c) && (piVar2 != (int *)0x0)) { if ((uint)(local_2c[0] - (int)piVar2) < 0x81) { std::__node_alloc::_M_deallocate(piVar2,local_2c[0] - (int)piVar2); } else { operator_delete(piVar2); } } if (bVar1) break; piVar5 = (int *)*piVar5; } *param_1 = (int)piVar5; return; } ### FUNC FUN_0004b24a @ 0004b24a undefined4 FUN_0004b24a(int param_1,undefined4 *param_2) { int iVar1; undefined4 extraout_r1; int iVar2; byte *pbVar3; int iVar4; undefined1 auStack_2c [4]; int local_28 [4]; int local_18; byte *local_14; iVar2 = *(int *)(param_1 + 8); iVar1 = *(int *)(param_1 + 0xc); FUN_00031c38(local_28,*param_2,auStack_2c); local_18 = local_18 - (int)local_14; iVar4 = 0; if (local_18 != 0) { iVar4 = 0; pbVar3 = local_14; do { iVar4 = iVar4 * 5 + (uint)*pbVar3; pbVar3 = pbVar3 + 1; local_18 = local_18 + -1; } while (local_18 != 0); } if ((local_14 != (byte *)0x0) && (local_14 != (byte *)local_28)) { if ((uint)(local_28[0] - (int)local_14) < 0x81) { std::__node_alloc::_M_deallocate(local_14,local_28[0] - (int)local_14); } else { operator_delete(local_14); } } __aeabi_uidivmod(iVar4,(iVar1 - iVar2 >> 2) + -1); return extraout_r1; } ### FUNC ctype_byname @ 0004b2b0 /* std::ctype_byname::ctype_byname(char const*, unsigned int) */ ctype_byname * __thiscall std::ctype_byname::ctype_byname(ctype_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; int iVar3; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; ctype::ctype((ctype *)this,(mask *)0x0,false,param_2); *(undefined ***)this = &PTR__ctype_byname_000695f8; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar3 = 0; iVar1 = FUN_0004a144(&local_14,auStack_118,0,&local_18); *(int *)(this + 0x414) = iVar1; if (iVar1 != 0) { *(ctype_byname **)(this + 0xc) = this + 0x14; iVar1 = FUN_0004dab0(); do { *(uint *)(this + iVar3 * -2 + 0x14) = (uint)*(ushort *)(iVar1 - iVar3); iVar3 = iVar3 + -2; } while (iVar3 != -0x200); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype"); ctype::~ctype((ctype *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC _M_init @ 0004b348 /* std::ctype_byname::_M_init() */ void __thiscall std::ctype_byname::_M_init(ctype_byname *this) { ushort *puVar1; int iVar2; ctype_byname *pcVar3; pcVar3 = this + 0x14; *(ctype_byname **)(this + 0xc) = pcVar3; puVar1 = (ushort *)FUN_0004dab0(*(undefined4 *)(this + 0x414)); iVar2 = 0x100; do { *(uint *)pcVar3 = (uint)*puVar1; pcVar3 = pcVar3 + 4; iVar2 = iVar2 + -1; puVar1 = puVar1 + 1; } while (iVar2 != 0); return; } ### FUNC ~ctype_byname @ 0004b370 /* std::ctype_byname::~ctype_byname() */ void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) { *(undefined ***)this = &PTR__ctype_byname_000695f8; FUN_0004a50c(*(undefined4 *)(this + 0x414)); ctype::~ctype((ctype *)this); return; } ### FUNC ~ctype_byname @ 0004b3ac /* std::ctype_byname::~ctype_byname() */ void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) { *(undefined ***)this = &PTR__ctype_byname_000695f8; FUN_0004a50c(*(undefined4 *)(this + 0x414)); ctype::~ctype((ctype *)this); operator_delete(this); return; } ### FUNC do_toupper @ 0004b3f8 /* std::ctype_byname::do_toupper(char) const */ undefined1 std::ctype_byname::do_toupper(char param_1) { undefined1 uVar1; uVar1 = FUN_0004dabc(*(undefined4 *)(param_1 + 0x414)); return uVar1; } ### FUNC do_tolower @ 0004b410 /* std::ctype_byname::do_tolower(char) const */ undefined1 std::ctype_byname::do_tolower(char param_1) { undefined1 uVar1; uVar1 = FUN_0004dac8(*(undefined4 *)(param_1 + 0x414)); return uVar1; } ### FUNC do_toupper @ 0004b428 /* std::ctype_byname::do_toupper(char*, char const*) const */ char * __thiscall std::ctype_byname::do_toupper(ctype_byname *this,char *param_1,char *param_2) { char cVar1; if (param_1 != param_2) { do { cVar1 = FUN_0004dabc(*(undefined4 *)(this + 0x414),*param_1); *param_1 = cVar1; param_1 = param_1 + 1; } while (param_2 != param_1); } return param_2; } ### FUNC do_tolower @ 0004b454 /* std::ctype_byname::do_tolower(char*, char const*) const */ char * __thiscall std::ctype_byname::do_tolower(ctype_byname *this,char *param_1,char *param_2) { char cVar1; if (param_1 != param_2) { do { cVar1 = FUN_0004dac8(*(undefined4 *)(this + 0x414),*param_1); *param_1 = cVar1; param_1 = param_1 + 1; } while (param_2 != param_1); } return param_2; } ### FUNC ctype_byname @ 0004b480 /* std::ctype_byname::ctype_byname(char const*, unsigned int) */ ctype_byname * __thiscall std::ctype_byname::ctype_byname(ctype_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; *(uint *)(this + 4) = (uint)(param_2 != 0); local_14 = param_1; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__ctype_byname_00069628; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a144(&local_14,auStack_118,0,&local_18); *(int *)(this + 0xc) = iVar1; if (iVar1 != 0) { return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype"); ctype::~ctype((ctype *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC ~ctype_byname @ 0004b4f4 /* std::ctype_byname::~ctype_byname() */ void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) { *(undefined ***)this = &PTR__ctype_byname_00069628; FUN_0004a50c(*(undefined4 *)(this + 0xc)); ctype::~ctype((ctype *)this); return; } ### FUNC ~ctype_byname @ 0004b528 /* std::ctype_byname::~ctype_byname() */ void __thiscall std::ctype_byname::~ctype_byname(ctype_byname *this) { *(undefined ***)this = &PTR__ctype_byname_00069628; FUN_0004a50c(*(undefined4 *)(this + 0xc)); ctype::~ctype((ctype *)this); operator_delete(this); return; } ### FUNC do_is @ 0004b56c /* std::ctype_byname::do_is(std::ctype_base::mask, wchar_t) const */ bool __thiscall std::ctype_byname::do_is(ctype_byname *this,undefined2 param_2,undefined4 param_3) { int iVar1; iVar1 = FUN_0004dad4(*(undefined4 *)(this + 0xc),param_3,param_2); return iVar1 != 0; } ### FUNC do_is @ 0004b590 /* std::ctype_byname::do_is(wchar_t const*, wchar_t const*, std::ctype_base::mask*) const */ wchar_t * __thiscall std::ctype_byname::do_is (ctype_byname *this,wchar_t *param_1,wchar_t *param_2,mask *param_3) { undefined4 uVar1; wchar_t wVar2; if (param_1 < param_2) { do { wVar2 = *param_1; param_1 = param_1 + 1; uVar1 = FUN_0004dad4(*(undefined4 *)(this + 0xc),wVar2,0x1ff); *(undefined4 *)param_3 = uVar1; param_3 = (mask *)((int)param_3 + 4); } while (param_1 < param_2); } return param_2; } ### FUNC do_scan_is @ 0004b5c0 /* std::ctype_byname::do_scan_is(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */ void __thiscall std::ctype_byname::do_scan_is (ctype_byname *this,uint param_2,undefined4 param_3,undefined4 param_4) { undefined1 auStack_1c [4]; uint local_18; undefined4 local_14; local_14 = *(undefined4 *)(this + 0xc); local_18 = param_2 & 0xffff; FUN_0004cc5c(param_3,param_4,&local_18,auStack_1c); return; } ### FUNC do_scan_not @ 0004b5ec /* std::ctype_byname::do_scan_not(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */ void __thiscall std::ctype_byname::do_scan_not (ctype_byname *this,uint param_2,undefined4 param_3,undefined4 param_4) { undefined1 auStack_20 [4]; undefined1 auStack_1c [4]; uint local_18; undefined4 local_14; local_14 = *(undefined4 *)(this + 0xc); local_18 = param_2 & 0xffff; FUN_0004cd16(param_3,param_4,auStack_1c,auStack_20); return; } ### FUNC do_toupper @ 0004b618 /* std::ctype_byname::do_toupper(wchar_t) const */ void std::ctype_byname::do_toupper(wchar_t param_1) { FUN_0004dbb8(*(undefined4 *)(param_1 + L'\f')); return; } ### FUNC do_toupper @ 0004b624 /* std::ctype_byname::do_toupper(wchar_t*, wchar_t const*) const */ wchar_t * __thiscall std::ctype_byname::do_toupper (ctype_byname *this,wchar_t *param_1,wchar_t *param_2) { wchar_t wVar1; if (param_1 < param_2) { do { wVar1 = FUN_0004dbb8(*(undefined4 *)(this + 0xc),*param_1); *param_1 = wVar1; param_1 = param_1 + 1; } while (param_1 < param_2); } return param_2; } ### FUNC do_tolower @ 0004b64e /* std::ctype_byname::do_tolower(wchar_t) const */ void std::ctype_byname::do_tolower(wchar_t param_1) { FUN_0004dbac(*(undefined4 *)(param_1 + L'\f')); return; } ### FUNC do_tolower @ 0004b65a /* std::ctype_byname::do_tolower(wchar_t*, wchar_t const*) const */ wchar_t * __thiscall std::ctype_byname::do_tolower (ctype_byname *this,wchar_t *param_1,wchar_t *param_2) { wchar_t wVar1; if (param_1 < param_2) { do { wVar1 = FUN_0004dbac(*(undefined4 *)(this + 0xc),*param_1); *param_1 = wVar1; param_1 = param_1 + 1; } while (param_1 < param_2); } return param_2; } ### FUNC collate_byname @ 0004b684 /* std::collate_byname::collate_byname(char const*, unsigned int) */ collate_byname * __thiscall std::collate_byname::collate_byname(collate_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; *(uint *)(this + 4) = (uint)(param_2 != 0); local_14 = param_1; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__collate_byname_00069668; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a41c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0xc) = iVar1; if (iVar1 != 0) { return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"collate"); collate::~collate((collate *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC ~collate_byname @ 0004b6f8 /* std::collate_byname::~collate_byname() */ void __thiscall std::collate_byname::~collate_byname(collate_byname *this) { *(undefined ***)this = &PTR__collate_byname_00069668; FUN_0004a71c(*(undefined4 *)(this + 0xc)); collate::~collate((collate *)this); return; } ### FUNC ~collate_byname @ 0004b72c /* std::collate_byname::~collate_byname() */ void __thiscall std::collate_byname::~collate_byname(collate_byname *this) { *(undefined ***)this = &PTR__collate_byname_00069668; FUN_0004a71c(*(undefined4 *)(this + 0xc)); collate::~collate((collate *)this); operator_delete(this); return; } ### FUNC do_compare @ 0004b770 /* std::collate_byname::do_compare(char const*, char const*, char const*, char const*) const */ void __thiscall std::collate_byname::do_compare (collate_byname *this,char *param_1,char *param_2,char *param_3,char *param_4) { FUN_0004dbe6(*(undefined4 *)(this + 0xc),param_1,(int)param_2 - (int)param_1,param_3, (int)param_4 - (int)param_3); return; } ### FUNC do_transform @ 0004b78c /* std::collate_byname::do_transform(char const*, char const*) const */ void std::collate_byname::do_transform(char *param_1,char *param_2) { uint uVar1; uint uVar2; uint uVar3; int in_r2; int in_r3; undefined1 *puVar4; int local_30 [4]; int *local_20; int *local_1c; uint local_18; if (in_r2 == in_r3) { *param_1 = '\0'; *(char **)(param_1 + 0x10) = param_1; *(char **)(param_1 + 0x14) = param_1; } else { uVar1 = FUN_0004dd0a(*(undefined4 *)(param_2 + 0xc),0,0); local_20 = local_30; uVar2 = uVar1 + 1; local_1c = local_20; if (uVar2 == 0) { /* WARNING: Subroutine does not return */ __stl_throw_length_error("basic_string"); } if (0x10 < uVar2) { local_18 = uVar2; if (uVar2 < 0x81) { local_1c = (int *)__node_alloc::_M_allocate(&local_18); uVar3 = local_18; } else { local_1c = (int *)operator_new(uVar2); uVar3 = uVar2; } local_30[0] = (int)local_1c + uVar3; } puVar4 = (undefined1 *)((int)local_1c + uVar1); if (0 < (int)uVar1) { uVar3 = uVar1 ^ 0xffffffff; if ((int)(uVar1 ^ 0xffffffff) < -1) { uVar3 = 0xfffffffe; } local_20 = local_1c; __aeabi_memclr(local_1c,uVar1 + uVar3 + 2); } local_20 = (int *)puVar4; *puVar4 = 0; FUN_0004dd0a(*(undefined4 *)(param_2 + 0xc),local_1c,uVar2); FUN_00036f1c(param_1,local_30); if ((local_1c != local_30) && (local_1c != (int *)0x0)) { if (0x80 < (uint)(local_30[0] - (int)local_1c)) { operator_delete(local_1c); return; } __node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c); return; } } return; } ### FUNC collate_byname @ 0004b898 /* std::collate_byname::collate_byname(char const*, unsigned int) */ collate_byname * __thiscall std::collate_byname::collate_byname (collate_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; *(uint *)(this + 4) = (uint)(param_2 != 0); local_14 = param_1; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__collate_byname_00069684; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a41c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0xc) = iVar1; if (iVar1 != 0) { return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"collate"); collate::~collate((collate *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC ~collate_byname @ 0004b90c /* std::collate_byname::~collate_byname() */ void __thiscall std::collate_byname::~collate_byname(collate_byname *this) { *(undefined ***)this = &PTR__collate_byname_00069684; FUN_0004a71c(*(undefined4 *)(this + 0xc)); collate::~collate((collate *)this); return; } ### FUNC ~collate_byname @ 0004b940 /* std::collate_byname::~collate_byname() */ void __thiscall std::collate_byname::~collate_byname(collate_byname *this) { *(undefined ***)this = &PTR__collate_byname_00069684; FUN_0004a71c(*(undefined4 *)(this + 0xc)); collate::~collate((collate *)this); operator_delete(this); return; } ### FUNC do_compare @ 0004b984 /* std::collate_byname::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*) const */ void __thiscall std::collate_byname::do_compare (collate_byname *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3, wchar_t *param_4) { FUN_0004dc70(*(undefined4 *)(this + 0xc),param_1,(int)param_2 - (int)param_1 >> 2,param_3, (int)param_4 - (int)param_3 >> 2); return; } ### FUNC do_transform @ 0004b9a4 /* std::collate_byname::do_transform(wchar_t const*, wchar_t const*) const */ void std::collate_byname::do_transform(wchar_t *param_1,wchar_t *param_2) { int *piVar1; uint uVar2; uint uVar3; int in_r2; int in_r3; uint uVar4; int *piVar5; int local_60 [16]; int *local_20; int *local_1c; uint local_18; if (in_r2 == in_r3) { *param_1 = L'\0'; param_1[0x10] = (wchar_t)param_1; param_1[0x11] = (wchar_t)param_1; } else { uVar2 = FUN_0004dd2e(param_2[3],0,0); local_20 = local_60; uVar3 = uVar2 + 1; local_1c = local_20; if (0x3ffffffe < uVar2) { /* WARNING: Subroutine does not return */ __stl_throw_length_error("basic_string"); } if (0x10 < uVar3) { uVar4 = uVar3 * 4; local_18 = uVar4; if (uVar4 < 0x81) { local_1c = (int *)__node_alloc::_M_allocate(&local_18); uVar4 = local_18; } else { local_1c = (int *)operator_new(uVar4); } local_60[0] = (int)local_1c + (uVar4 & 0xfffffffc); } piVar5 = local_1c + uVar2; if (0 < (int)(uVar2 * 4)) { uVar4 = uVar2 ^ 0xffffffff; if ((int)(uVar2 ^ 0xffffffff) < -1) { uVar4 = 0xfffffffe; } local_20 = local_1c; __aeabi_memclr4(local_1c,(uVar2 + uVar4) * 4 + 8); } piVar1 = local_1c; local_20 = piVar5; *piVar5 = 0; FUN_0004dd2e(param_2[3],piVar1,uVar3); FUN_0004bac8(param_1,local_60); if ((local_1c != local_60) && (local_1c != (int *)0x0)) { if (0x80 < (uint)(local_60[0] - (int)local_1c)) { operator_delete(local_1c); return; } __node_alloc::_M_deallocate(local_1c,local_60[0] - (int)local_1c); return; } } return; } ### FUNC FUN_0004bac8 @ 0004bac8 int * FUN_0004bac8(int *param_1,int param_2) { int iVar1; uint uVar2; int *piVar3; int iVar4; int iVar5; uint local_18; param_1[0x10] = (int)param_1; param_1[0x11] = (int)param_1; iVar1 = *(int *)(param_2 + 0x40); iVar4 = *(int *)(param_2 + 0x44); iVar5 = iVar1 - iVar4; uVar2 = (iVar5 >> 2) + 1; if ((uint)(iVar5 >> 2) < 0x3fffffff) { piVar3 = param_1; if (0x10 < uVar2) { uVar2 = uVar2 * 4; local_18 = uVar2; if (uVar2 < 0x81) { piVar3 = (int *)std::__node_alloc::_M_allocate(&local_18); uVar2 = local_18; } else { piVar3 = (int *)operator_new(uVar2); } param_1[0x10] = (int)piVar3; param_1[0x11] = (int)piVar3; *param_1 = (int)piVar3 + (uVar2 & 0xfffffffc); } if (iVar1 != iVar4) { __aeabi_memcpy(piVar3,iVar4,iVar5); piVar3 = (int *)((int)piVar3 + iVar5); } param_1[0x10] = (int)piVar3; *piVar3 = 0; return param_1; } /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } ### FUNC codecvt_byname @ 0004bb78 /* std::codecvt_byname::codecvt_byname(char const*, unsigned int) */ codecvt_byname * __thiscall std::codecvt_byname::codecvt_byname (codecvt_byname *this,char *param_1,uint param_2) { undefined4 uVar1; *(uint *)(this + 4) = (uint)(param_2 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__codecvt_byname_000696a0; if (param_1 != (char *)0x0) { return this; } uVar1 = locale::_M_throw_on_null_name(); codecvt::~codecvt((codecvt *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar1); } ### FUNC ~codecvt_byname @ 0004bbc0 /* std::codecvt_byname::~codecvt_byname() */ void __thiscall std::codecvt_byname::~codecvt_byname(codecvt_byname *this) { codecvt::~codecvt((codecvt *)this); return; } ### FUNC ~codecvt_byname @ 0004bbca /* std::codecvt_byname::~codecvt_byname() */ void __thiscall std::codecvt_byname::~codecvt_byname(codecvt_byname *this) { codecvt::~codecvt((codecvt *)this); operator_delete(this); return; } ### FUNC codecvt_byname @ 0004bbec /* std::codecvt_byname::codecvt_byname(char const*, unsigned int) */ codecvt_byname * __thiscall std::codecvt_byname::codecvt_byname (codecvt_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; *(uint *)(this + 4) = (uint)(param_2 != 0); local_14 = param_1; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__codecvt_byname_000696cc; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a334(&local_14,auStack_118,0,&local_18); *(int *)(this + 0xc) = iVar1; if (iVar1 != 0) { return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype"); codecvt::~codecvt((codecvt *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC ~codecvt_byname @ 0004bc60 /* std::codecvt_byname::~codecvt_byname() */ void __thiscall std::codecvt_byname::~codecvt_byname (codecvt_byname *this) { *(undefined ***)this = &PTR__codecvt_byname_000696cc; FUN_0004a590(*(undefined4 *)(this + 0xc)); codecvt::~codecvt((codecvt *)this); return; } ### FUNC ~codecvt_byname @ 0004bc94 /* std::codecvt_byname::~codecvt_byname() */ void __thiscall std::codecvt_byname::~codecvt_byname (codecvt_byname *this) { *(undefined ***)this = &PTR__codecvt_byname_000696cc; FUN_0004a590(*(undefined4 *)(this + 0xc)); codecvt::~codecvt((codecvt *)this); operator_delete(this); return; } ### FUNC do_out @ 0004bcd8 /* std::codecvt_byname::do_out(mbstate_t&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt_byname::do_out (codecvt_byname *this,mbstate_t *param_1,wchar_t *param_2, wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7) { int iVar1; wchar_t *pwVar2; bool bVar3; undefined4 local_2c; local_2c = 0; if ((param_5 != param_6) && (param_2 != param_3)) { local_2c = 0; pwVar2 = param_2; while( true ) { iVar1 = FUN_0004dbd8(*(undefined4 *)(this + 0xc),param_5,(int)param_6 - (int)param_5,*pwVar2, param_1); param_2 = pwVar2; if (iVar1 == -2) { local_2c = 1; goto LAB_0004bd3e; } if (iVar1 == -1) break; param_5 = param_5 + iVar1; param_2 = pwVar2 + 1; if ((param_5 == param_6) || (bVar3 = param_3 + -1 == pwVar2, pwVar2 = param_2, bVar3)) goto LAB_0004bd3e; } local_2c = 2; } LAB_0004bd3e: *param_4 = param_2; *param_7 = param_5; return local_2c; } ### FUNC do_in @ 0004bd48 /* std::codecvt_byname::do_in(mbstate_t&, char const*, char const*, char const*&, wchar_t*, wchar_t*, wchar_t*&) const */ undefined4 __thiscall std::codecvt_byname::do_in (codecvt_byname *this,mbstate_t *param_1,char *param_2, char *param_3,char **param_4,wchar_t *param_5,wchar_t *param_6,wchar_t **param_7) { int iVar1; wchar_t *pwVar2; undefined4 local_2c; local_2c = 0; if ((param_5 != param_6) && (param_2 != param_3)) { local_2c = 0; pwVar2 = param_5; while( true ) { iVar1 = FUN_0004dbd0(*(undefined4 *)(this + 0xc),pwVar2,param_2,(int)param_3 - (int)param_2, param_1); param_5 = pwVar2; if (iVar1 == -2) { local_2c = 1; goto LAB_0004bdb0; } if (iVar1 == -1) break; param_2 = param_2 + iVar1; param_5 = pwVar2 + 1; if ((param_6 + -1 == pwVar2) || (pwVar2 = param_5, param_2 == param_3)) goto LAB_0004bdb0; } local_2c = 2; } LAB_0004bdb0: *param_4 = param_2; *param_7 = param_5; return local_2c; } ### FUNC do_unshift @ 0004bdbc /* std::codecvt_byname::do_unshift(mbstate_t&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt_byname::do_unshift (codecvt_byname *this,mbstate_t *param_1,char *param_2, char *param_3,char **param_4) { int iVar1; undefined4 uVar2; *param_4 = param_2; iVar1 = FUN_0004dbde(*(undefined4 *)(this + 0xc),param_1,param_2,(int)param_3 - (int)param_2, param_4); uVar2 = 2; if (iVar1 != -1) { if (iVar1 == -2) { return 1; } uVar2 = 3; if (*param_4 != param_2) { uVar2 = 0; } } return uVar2; } ### FUNC do_encoding @ 0004bdf8 /* std::codecvt_byname::do_encoding() const */ int __thiscall std::codecvt_byname::do_encoding (codecvt_byname *this) { int iVar1; int iVar2; iVar1 = FUN_0004dbcc(*(undefined4 *)(this + 0xc)); iVar2 = -1; if (iVar1 != 0) { iVar1 = FUN_0004dbc4(*(undefined4 *)(this + 0xc)); iVar2 = FUN_0004dbc8(*(undefined4 *)(this + 0xc)); if (iVar2 != iVar1) { iVar2 = 0; } } return iVar2; } ### FUNC do_always_noconv @ 0004be32 /* std::codecvt_byname::do_always_noconv() const */ undefined4 std::codecvt_byname::do_always_noconv(void) { return 0; } ### FUNC do_length @ 0004be36 /* std::codecvt_byname::do_length(mbstate_t&, char const*, char const*, unsigned int) const */ int __thiscall std::codecvt_byname::do_length (codecvt_byname *this,mbstate_t *param_1,char *param_2, char *param_3,uint param_4) { uint uVar1; int local_1c; undefined1 auStack_18 [4]; local_1c = 0; while( true ) { if (param_4 == 0) { return local_1c; } if (param_2 == param_3) break; uVar1 = FUN_0004dbd0(*(undefined4 *)(this + 0xc),auStack_18,param_2,(int)param_3 - (int)param_2, param_1); if (uVar1 < 0xfffffffe) { local_1c = local_1c + uVar1; } param_2 = param_2 + uVar1; param_4 = param_4 - 1; if (0xfffffffd < uVar1) { return local_1c; } } return local_1c; } ### FUNC do_max_length @ 0004be86 /* std::codecvt_byname::do_max_length() const */ void __thiscall std::codecvt_byname::do_max_length (codecvt_byname *this) { FUN_0004dbc4(*(undefined4 *)(this + 0xc)); return; } ### FUNC numpunct_byname @ 0004be98 /* std::numpunct_byname::numpunct_byname(char const*, unsigned int) */ numpunct_byname * __thiscall std::numpunct_byname::numpunct_byname(numpunct_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; *(uint *)(this + 4) = (uint)(param_2 != 0); local_14 = param_1; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__numpunct_byname_000696f8; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a37c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0xc) = iVar1; if (iVar1 != 0) { return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"numpunct"); numpunct::~numpunct((numpunct *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC ~numpunct_byname @ 0004bf0c /* std::numpunct_byname::~numpunct_byname() */ void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) { *(undefined ***)this = &PTR__numpunct_byname_000696f8; FUN_0004a614(*(undefined4 *)(this + 0xc)); numpunct::~numpunct((numpunct *)this); return; } ### FUNC ~numpunct_byname @ 0004bf40 /* std::numpunct_byname::~numpunct_byname() */ void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) { *(undefined ***)this = &PTR__numpunct_byname_000696f8; FUN_0004a614(*(undefined4 *)(this + 0xc)); numpunct::~numpunct((numpunct *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004bf84 /* std::numpunct_byname::do_decimal_point() const */ void __thiscall std::numpunct_byname::do_decimal_point(numpunct_byname *this) { FUN_0004dd54(*(undefined4 *)(this + 0xc)); return; } ### FUNC do_thousands_sep @ 0004bf90 /* std::numpunct_byname::do_thousands_sep() const */ void __thiscall std::numpunct_byname::do_thousands_sep(numpunct_byname *this) { FUN_0004dd58(*(undefined4 *)(this + 0xc)); return; } ### FUNC do_grouping @ 0004bf9c /* std::numpunct_byname::do_grouping() const */ void std::numpunct_byname::do_grouping(void) { int in_r1; FUN_0004dd5c(*(undefined4 *)(in_r1 + 0xc)); FUN_00031c38(); return; } ### FUNC do_truename @ 0004bfd4 /* std::numpunct_byname::do_truename() const */ void std::numpunct_byname::do_truename(void) { int in_r1; FUN_0004dd68(*(undefined4 *)(in_r1 + 0xc)); FUN_00031c38(); return; } ### FUNC do_falsename @ 0004bff4 /* std::numpunct_byname::do_falsename() const */ void std::numpunct_byname::do_falsename(void) { int in_r1; FUN_0004dd74(*(undefined4 *)(in_r1 + 0xc)); FUN_00031c38(); return; } ### FUNC numpunct_byname @ 0004c014 /* std::numpunct_byname::numpunct_byname(char const*, unsigned int) */ numpunct_byname * __thiscall std::numpunct_byname::numpunct_byname (numpunct_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; *(uint *)(this + 4) = (uint)(param_2 != 0); local_14 = param_1; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__numpunct_byname_0006971c; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a37c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0xc) = iVar1; if (iVar1 != 0) { return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"numpunct"); numpunct::~numpunct((numpunct *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC ~numpunct_byname @ 0004c088 /* std::numpunct_byname::~numpunct_byname() */ void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) { *(undefined ***)this = &PTR__numpunct_byname_0006971c; FUN_0004a614(*(undefined4 *)(this + 0xc)); numpunct::~numpunct((numpunct *)this); return; } ### FUNC ~numpunct_byname @ 0004c0bc /* std::numpunct_byname::~numpunct_byname() */ void __thiscall std::numpunct_byname::~numpunct_byname(numpunct_byname *this) { *(undefined ***)this = &PTR__numpunct_byname_0006971c; FUN_0004a614(*(undefined4 *)(this + 0xc)); numpunct::~numpunct((numpunct *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004c100 /* std::numpunct_byname::do_decimal_point() const */ void __thiscall std::numpunct_byname::do_decimal_point(numpunct_byname *this) { FUN_0004dd80(*(undefined4 *)(this + 0xc)); return; } ### FUNC do_thousands_sep @ 0004c10c /* std::numpunct_byname::do_thousands_sep() const */ void __thiscall std::numpunct_byname::do_thousands_sep(numpunct_byname *this) { FUN_0004dd84(*(undefined4 *)(this + 0xc)); return; } ### FUNC do_grouping @ 0004c118 /* std::numpunct_byname::do_grouping() const */ void std::numpunct_byname::do_grouping(void) { int in_r1; FUN_0004dd5c(*(undefined4 *)(in_r1 + 0xc)); FUN_00031c38(); return; } ### FUNC do_truename @ 0004c150 /* std::numpunct_byname::do_truename() const */ void std::numpunct_byname::do_truename(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004dd88(*(undefined4 *)(in_r1 + 0xc),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC FUN_0004c174 @ 0004c174 int * FUN_0004c174(int *param_1,wchar_t *param_2) { size_t sVar1; undefined4 *puVar2; uint uVar3; uint uVar4; uint local_18; param_1[0x10] = (int)param_1; param_1[0x11] = (int)param_1; sVar1 = wcslen(param_2); uVar3 = (int)(sVar1 * 4) >> 2; uVar4 = uVar3 + 1; if (uVar3 < 0x3fffffff) { if (uVar4 < 0x11) { puVar2 = (undefined4 *)param_1[0x11]; } else { uVar4 = uVar4 * 4; local_18 = uVar4; if (uVar4 < 0x81) { puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); uVar4 = local_18; } else { puVar2 = (undefined4 *)operator_new(uVar4); } param_1[0x10] = (int)puVar2; param_1[0x11] = (int)puVar2; *param_1 = (int)puVar2 + (uVar4 & 0xfffffffc); } if (sVar1 != 0) { __aeabi_memcpy(puVar2,param_2,sVar1 * 4); puVar2 = puVar2 + sVar1; } param_1[0x10] = (int)puVar2; *puVar2 = 0; return param_1; } /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } ### FUNC do_falsename @ 0004c22c /* std::numpunct_byname::do_falsename() const */ void std::numpunct_byname::do_falsename(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004dda0(*(undefined4 *)(in_r1 + 0xc),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC moneypunct_byname @ 0004c250 /* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; moneypunct::moneypunct((moneypunct *)this,param_2); *(undefined ***)this = &PTR__moneypunct_byname_00069740; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0x14) = iVar1; if (iVar1 != 0) { FUN_0004c2c4(this + 0xc,this + 0x10); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); moneypunct::~moneypunct((moneypunct *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC FUN_0004c2c4 @ 0004c2c4 void FUN_0004c2c4(undefined1 *param_1,undefined1 *param_2,undefined4 param_3) { uint uVar1; int iVar2; undefined1 uVar3; undefined1 uVar4; uVar1 = FUN_0004de10(param_3); if (uVar1 < 2) { param_1[1] = 3; *param_1 = 2; uVar4 = 0; uVar3 = 4; } else if (uVar1 - 3 < 2) { *param_1 = 2; iVar2 = FUN_0004de08(param_3); uVar3 = 3; uVar4 = 4; if (iVar2 != 0) { uVar4 = 3; } param_1[1] = uVar4; if (iVar2 != 0) { uVar3 = 4; } uVar4 = 0; } else if (uVar1 == 2) { param_1[1] = 4; *param_1 = 2; uVar4 = 0; uVar3 = 3; } else { param_1[1] = 3; *param_1 = 2; uVar4 = 4; uVar3 = 0; } param_1[3] = uVar4; param_1[2] = uVar3; uVar1 = FUN_0004de1c(param_3); if (uVar1 < 2) { param_2[1] = 3; *param_2 = 2; uVar4 = 0; uVar3 = 4; } else if (uVar1 - 3 < 2) { *param_2 = 2; iVar2 = FUN_0004de14(param_3); uVar3 = 3; uVar4 = 4; if (iVar2 != 0) { uVar4 = 3; } param_2[1] = uVar4; if (iVar2 != 0) { uVar3 = 4; } uVar4 = 0; } else if (uVar1 == 2) { param_2[1] = 4; *param_2 = 2; uVar4 = 0; uVar3 = 3; } else { param_2[1] = 3; *param_2 = 2; uVar4 = 4; uVar3 = 0; } param_2[3] = uVar4; param_2[2] = uVar3; return; } ### FUNC moneypunct_byname @ 0004c39c /* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,_Locale_monetary *param_1) { moneypunct::moneypunct((moneypunct *)this,0); *(_Locale_monetary **)(this + 0x14) = param_1; *(undefined ***)this = &PTR__moneypunct_byname_00069740; FUN_0004c2c4(this + 0xc,this + 0x10,param_1); return this; } ### FUNC ~moneypunct_byname @ 0004c3e0 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_00069740; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); return; } ### FUNC ~moneypunct_byname @ 0004c414 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_00069740; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004c458 /* std::moneypunct_byname::do_decimal_point() const */ void __thiscall std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) { FUN_0004ddd4(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_thousands_sep @ 0004c464 /* std::moneypunct_byname::do_thousands_sep() const */ void __thiscall std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) { FUN_0004ddd8(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_grouping @ 0004c470 /* std::moneypunct_byname::do_grouping() const */ void std::moneypunct_byname::do_grouping(void) { int in_r1; FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_curr_symbol @ 0004c490 /* std::moneypunct_byname::do_curr_symbol() const */ void std::moneypunct_byname::do_curr_symbol(void) { int in_r1; FUN_0004ddbc(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_positive_sign @ 0004c4b0 /* std::moneypunct_byname::do_positive_sign() const */ void std::moneypunct_byname::do_positive_sign(void) { int in_r1; FUN_0004dde8(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_negative_sign @ 0004c4d0 /* std::moneypunct_byname::do_negative_sign() const */ void std::moneypunct_byname::do_negative_sign(void) { int in_r1; FUN_0004ddf4(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_frac_digits @ 0004c4f0 /* std::moneypunct_byname::do_frac_digits() const */ void __thiscall std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) { FUN_0004de00(*(undefined4 *)(this + 0x14)); return; } ### FUNC moneypunct_byname @ 0004c4fc /* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; moneypunct::moneypunct((moneypunct *)this,param_2); *(undefined ***)this = &PTR__moneypunct_byname_00069774; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0x14) = iVar1; if (iVar1 != 0) { FUN_0004c570(this + 0xc,this + 0x10); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); moneypunct::~moneypunct((moneypunct *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC FUN_0004c570 @ 0004c570 void FUN_0004c570(undefined1 *param_1,undefined1 *param_2,undefined4 param_3) { undefined1 uVar1; undefined4 uVar2; int iVar3; uVar2 = FUN_0004de10(param_3); switch(uVar2) { case 0: case 1: *param_1 = 3; iVar3 = FUN_0004de08(param_3); if (iVar3 != 0) { param_1[1] = 2; LAB_0004c5e6: iVar3 = FUN_0004de0c(param_3); if (iVar3 != 0) { uVar1 = 1; goto LAB_0004c5f2; } goto LAB_0004c60a; } param_1[1] = 4; iVar3 = FUN_0004de0c(param_3); if (iVar3 == 0) goto LAB_0004c646; param_1[2] = 1; uVar1 = 2; break; case 2: iVar3 = FUN_0004de08(param_3); if (iVar3 == 0) { LAB_0004c624: *param_1 = 4; iVar3 = FUN_0004de0c(param_3); if (iVar3 != 0) { uVar1 = 2; goto LAB_0004c634; } param_1[2] = 3; uVar1 = 2; } else { *param_1 = 2; iVar3 = FUN_0004de0c(param_3); if (iVar3 != 0) { uVar1 = 4; LAB_0004c634: param_1[2] = uVar1; param_1[1] = 1; uVar1 = 3; break; } param_1[2] = 3; uVar1 = 4; } param_1[1] = uVar1; goto LAB_0004c64a; case 3: iVar3 = FUN_0004de08(param_3); if (iVar3 != 0) { param_1[1] = 2; *param_1 = 3; goto LAB_0004c5e6; } param_1[1] = 3; *param_1 = 4; LAB_0004c646: uVar1 = 2; goto LAB_0004c648; case 4: iVar3 = FUN_0004de08(param_3); if (iVar3 == 0) goto LAB_0004c624; param_1[1] = 3; *param_1 = 2; LAB_0004c60a: uVar1 = 4; LAB_0004c648: param_1[2] = uVar1; LAB_0004c64a: uVar1 = 0; break; default: param_1[1] = 3; *param_1 = 2; uVar1 = 0; LAB_0004c5f2: param_1[2] = uVar1; uVar1 = 4; } param_1[3] = uVar1; uVar2 = FUN_0004de1c(param_3); switch(uVar2) { case 0: case 1: *param_2 = 3; iVar3 = FUN_0004de14(param_3); if (iVar3 == 0) { param_2[1] = 4; iVar3 = FUN_0004de18(param_3); if (iVar3 != 0) { param_2[2] = 1; uVar1 = 2; goto LAB_0004c736; } goto LAB_0004c70c; } param_2[1] = 2; LAB_0004c6a8: iVar3 = FUN_0004de18(param_3); if (iVar3 == 0) { uVar1 = 4; goto LAB_0004c70e; } uVar1 = 1; goto LAB_0004c6ca; case 2: iVar3 = FUN_0004de14(param_3); if (iVar3 == 0) { LAB_0004c6e6: *param_2 = 4; iVar3 = FUN_0004de18(param_3); if (iVar3 == 0) { param_2[2] = 3; uVar1 = 2; goto LAB_0004c732; } uVar1 = 2; LAB_0004c6f6: param_2[2] = uVar1; param_2[1] = 1; uVar1 = 3; goto LAB_0004c736; } *param_2 = 2; iVar3 = FUN_0004de18(param_3); if (iVar3 != 0) { uVar1 = 4; goto LAB_0004c6f6; } param_2[2] = 3; uVar1 = 4; LAB_0004c732: param_2[1] = uVar1; break; case 3: iVar3 = FUN_0004de14(param_3); if (iVar3 != 0) { param_2[1] = 2; *param_2 = 3; goto LAB_0004c6a8; } param_2[1] = 3; *param_2 = 4; LAB_0004c70c: uVar1 = 2; LAB_0004c70e: param_2[2] = uVar1; break; case 4: iVar3 = FUN_0004de14(param_3); if (iVar3 == 0) goto LAB_0004c6e6; default: param_2[1] = 3; *param_2 = 2; uVar1 = 0; LAB_0004c6ca: param_2[2] = uVar1; uVar1 = 4; goto LAB_0004c736; } uVar1 = 0; LAB_0004c736: param_2[3] = uVar1; return; } ### FUNC moneypunct_byname @ 0004c73c /* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,_Locale_monetary *param_1) { moneypunct::moneypunct((moneypunct *)this,0); *(_Locale_monetary **)(this + 0x14) = param_1; *(undefined ***)this = &PTR__moneypunct_byname_00069774; FUN_0004c570(this + 0xc,this + 0x10,param_1); return this; } ### FUNC ~moneypunct_byname @ 0004c780 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_00069774; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); return; } ### FUNC ~moneypunct_byname @ 0004c7b4 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_00069774; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004c7f8 /* std::moneypunct_byname::do_decimal_point() const */ void __thiscall std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) { FUN_0004ddd4(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_thousands_sep @ 0004c804 /* std::moneypunct_byname::do_thousands_sep() const */ void __thiscall std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) { FUN_0004ddd8(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_grouping @ 0004c810 /* std::moneypunct_byname::do_grouping() const */ void std::moneypunct_byname::do_grouping(void) { int in_r1; FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_curr_symbol @ 0004c830 /* std::moneypunct_byname::do_curr_symbol() const */ void std::moneypunct_byname::do_curr_symbol(void) { int in_r1; FUN_0004ddc8(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_positive_sign @ 0004c850 /* std::moneypunct_byname::do_positive_sign() const */ void std::moneypunct_byname::do_positive_sign(void) { int in_r1; FUN_0004dde8(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_negative_sign @ 0004c870 /* std::moneypunct_byname::do_negative_sign() const */ void std::moneypunct_byname::do_negative_sign(void) { int in_r1; FUN_0004ddf4(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_frac_digits @ 0004c890 /* std::moneypunct_byname::do_frac_digits() const */ void __thiscall std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) { FUN_0004de04(*(undefined4 *)(this + 0x14)); return; } ### FUNC moneypunct_byname @ 0004c89c /* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; moneypunct::moneypunct((moneypunct *)this,param_2); *(undefined ***)this = &PTR__moneypunct_byname_000697a8; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0x14) = iVar1; if (iVar1 != 0) { FUN_0004c2c4(this + 0xc,this + 0x10); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); moneypunct::~moneypunct((moneypunct *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC moneypunct_byname @ 0004c910 /* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,_Locale_monetary *param_1) { moneypunct::moneypunct((moneypunct *)this,0); *(_Locale_monetary **)(this + 0x14) = param_1; *(undefined ***)this = &PTR__moneypunct_byname_000697a8; FUN_0004c2c4(this + 0xc,this + 0x10,param_1); return this; } ### FUNC ~moneypunct_byname @ 0004c954 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_000697a8; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); return; } ### FUNC ~moneypunct_byname @ 0004c988 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_000697a8; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004c9cc /* std::moneypunct_byname::do_decimal_point() const */ void __thiscall std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) { FUN_0004ddd4(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_thousands_sep @ 0004c9d8 /* std::moneypunct_byname::do_thousands_sep() const */ void __thiscall std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) { FUN_0004ddd8(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_grouping @ 0004c9e4 /* std::moneypunct_byname::do_grouping() const */ void std::moneypunct_byname::do_grouping(void) { int in_r1; FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_curr_symbol @ 0004ca04 /* std::moneypunct_byname::do_curr_symbol() const */ void std::moneypunct_byname::do_curr_symbol(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004de20(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC do_positive_sign @ 0004ca28 /* std::moneypunct_byname::do_positive_sign() const */ void std::moneypunct_byname::do_positive_sign(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004de38(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC do_negative_sign @ 0004ca4c /* std::moneypunct_byname::do_negative_sign() const */ void std::moneypunct_byname::do_negative_sign(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004de40(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC do_frac_digits @ 0004ca70 /* std::moneypunct_byname::do_frac_digits() const */ void __thiscall std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) { FUN_0004de00(*(undefined4 *)(this + 0x14)); return; } ### FUNC moneypunct_byname @ 0004ca7c /* std::moneypunct_byname::moneypunct_byname(char const*, unsigned int) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,char *param_1,uint param_2) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; moneypunct::moneypunct((moneypunct *)this,param_2); *(undefined ***)this = &PTR__moneypunct_byname_000697dc; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18); *(int *)(this + 0x14) = iVar1; if (iVar1 != 0) { FUN_0004c570(this + 0xc,this + 0x10); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct"); moneypunct::~moneypunct((moneypunct *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC moneypunct_byname @ 0004caf0 /* std::moneypunct_byname::moneypunct_byname(_Locale_monetary*) */ moneypunct_byname * __thiscall std::moneypunct_byname::moneypunct_byname (moneypunct_byname *this,_Locale_monetary *param_1) { moneypunct::moneypunct((moneypunct *)this,0); *(_Locale_monetary **)(this + 0x14) = param_1; *(undefined ***)this = &PTR__moneypunct_byname_000697dc; FUN_0004c570(this + 0xc,this + 0x10,param_1); return this; } ### FUNC ~moneypunct_byname @ 0004cb34 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_000697dc; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); return; } ### FUNC ~moneypunct_byname @ 0004cb68 /* std::moneypunct_byname::~moneypunct_byname() */ void __thiscall std::moneypunct_byname::~moneypunct_byname(moneypunct_byname *this) { *(undefined ***)this = &PTR__moneypunct_byname_000697dc; FUN_0004a7a0(*(undefined4 *)(this + 0x14)); moneypunct::~moneypunct((moneypunct *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004cbac /* std::moneypunct_byname::do_decimal_point() const */ void __thiscall std::moneypunct_byname::do_decimal_point(moneypunct_byname *this) { FUN_0004ddd4(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_thousands_sep @ 0004cbb8 /* std::moneypunct_byname::do_thousands_sep() const */ void __thiscall std::moneypunct_byname::do_thousands_sep(moneypunct_byname *this) { FUN_0004ddd8(*(undefined4 *)(this + 0x14)); return; } ### FUNC do_grouping @ 0004cbc4 /* std::moneypunct_byname::do_grouping() const */ void std::moneypunct_byname::do_grouping(void) { int in_r1; FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14)); FUN_00031c38(); return; } ### FUNC do_curr_symbol @ 0004cbe4 /* std::moneypunct_byname::do_curr_symbol() const */ void std::moneypunct_byname::do_curr_symbol(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004de28(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC do_positive_sign @ 0004cc08 /* std::moneypunct_byname::do_positive_sign() const */ void std::moneypunct_byname::do_positive_sign(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004de38(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC do_negative_sign @ 0004cc2c /* std::moneypunct_byname::do_negative_sign() const */ void std::moneypunct_byname::do_negative_sign(void) { int in_r1; undefined1 auStack_50 [64]; FUN_0004de40(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10); FUN_0004c174(); return; } ### FUNC do_frac_digits @ 0004cc50 /* std::moneypunct_byname::do_frac_digits() const */ void __thiscall std::moneypunct_byname::do_frac_digits(moneypunct_byname *this) { FUN_0004de04(*(undefined4 *)(this + 0x14)); return; } ### FUNC FUN_0004cc5c @ 0004cc5c undefined4 * FUN_0004cc5c(undefined4 *param_1,undefined4 *param_2,undefined2 *param_3) { int iVar1; int iVar2; iVar1 = (int)param_2 - (int)param_1 >> 4; if (0 < iVar1) { iVar1 = iVar1 + 1; do { iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); if (iVar2 != 0) { return param_1; } iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[1],*param_3); if (iVar2 != 0) { return param_1 + 1; } iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[2],*param_3); if (iVar2 != 0) { return param_1 + 2; } iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[3],*param_3); if (iVar2 != 0) { return param_1 + 3; } iVar1 = iVar1 + -1; param_1 = param_1 + 4; } while (1 < iVar1); } iVar1 = (int)param_2 - (int)param_1 >> 2; if (iVar1 != 1) { if (iVar1 == 3) { iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); if (iVar1 != 0) { return param_1; } param_1 = param_1 + 1; } else if (iVar1 != 2) { return param_2; } iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); if (iVar1 != 0) { return param_1; } param_1 = param_1 + 1; } iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3); if (iVar1 == 0) { return param_2; } return param_1; } ### FUNC FUN_0004cd16 @ 0004cd16 undefined4 * FUN_0004cd16(undefined4 *param_1,undefined4 *param_2,int param_3) { int iVar1; int iVar2; iVar1 = (int)param_2 - (int)param_1 >> 4; if (0 < iVar1) { iVar1 = iVar1 + 1; do { iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); if (iVar2 == 0) { return param_1; } iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[1],*(undefined2 *)(param_3 + 4)); if (iVar2 == 0) { return param_1 + 1; } iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[2],*(undefined2 *)(param_3 + 4)); if (iVar2 == 0) { return param_1 + 2; } iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[3],*(undefined2 *)(param_3 + 4)); if (iVar2 == 0) { return param_1 + 3; } iVar1 = iVar1 + -1; param_1 = param_1 + 4; } while (1 < iVar1); } iVar1 = (int)param_2 - (int)param_1 >> 2; if (iVar1 != 1) { if (iVar1 == 3) { iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); if (iVar1 == 0) { return param_1; } param_1 = param_1 + 1; } else if (iVar1 != 2) { return param_2; } iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); if (iVar1 == 0) { return param_1; } param_1 = param_1 + 1; } iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4)); if (iVar1 != 0) { return param_2; } return param_1; } ### FUNC FUN_0004cde4 @ 0004cde4 pthread_mutex_t * FUN_0004cde4(pthread_mutex_t *param_1) { pthread_mutex_destroy(param_1); return param_1; } ### FUNC allocate @ 0004cdf4 /* std::__malloc_alloc::allocate(unsigned int) */ void std::__malloc_alloc::allocate(uint param_1) { code *pcVar1; void *pvVar2; undefined4 uVar3; pvVar2 = malloc(param_1); while( true ) { if (pvVar2 != (void *)0x0) { return; } pthread_mutex_lock((pthread_mutex_t *)&DAT_00070de0); pcVar1 = DAT_00070de4; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070de0); if (pcVar1 == (code *)0x0) break; (*pcVar1)(); pvVar2 = malloc(param_1); } FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC set_malloc_handler @ 0004ce58 /* std::__malloc_alloc::set_malloc_handler(void (*)()) */ undefined4 std::__malloc_alloc::set_malloc_handler(_func_void *param_1) { undefined4 uVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070de0); uVar1 = DAT_00070de4; DAT_00070de4 = param_1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070de0); return uVar1; } ### FUNC FUN_0004ce88 @ 0004ce88 undefined4 * FUN_0004ce88(uint *param_1) { int iVar1; undefined4 *puVar2; int iVar3; uint uVar4; undefined4 *puVar5; int local_18; uVar4 = *param_1 + 7 & 0xfffffff8; *param_1 = uVar4; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50); iVar1 = (uVar4 - 1 >> 3) * 4; puVar5 = *(undefined4 **)(&DAT_00070de8 + iVar1); if (puVar5 == (undefined4 *)0x0) { uVar4 = *param_1; local_18 = 0x14; puVar5 = (undefined4 *)FUN_0004cfe0(uVar4,&local_18); if (local_18 != 1) { puVar2 = (undefined4 *)((int)puVar5 + uVar4); *(undefined4 **)(&DAT_00070de8 + (uVar4 - 1 >> 1 & 0x7ffffffc)) = puVar2; iVar1 = local_18 + -2; if (local_18 + -2 != 0) { iVar3 = 2 - local_18; iVar1 = local_18 + -1; puVar2 = puVar5; do { *(uint *)((int)puVar2 + uVar4) = (int)puVar2 + uVar4 * 2; puVar2 = (undefined4 *)((int)puVar2 + uVar4); iVar3 = iVar3 + 1; } while (iVar3 != 0); local_18 = 0; puVar2 = (undefined4 *)((int)puVar5 + uVar4 * iVar1); iVar1 = local_18; } local_18 = iVar1; *puVar2 = 0; } } else { *(undefined4 *)(&DAT_00070de8 + iVar1) = *puVar5; } pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50); return puVar5; } ### FUNC FUN_0004cf48 @ 0004cf48 void FUN_0004cf48(int param_1) { int iVar1; undefined4 *puVar2; int iVar3; int local_18; local_18 = 0x14; iVar1 = FUN_0004cfe0(param_1,&local_18); if (local_18 != 1) { puVar2 = (undefined4 *)(iVar1 + param_1); *(undefined4 **)(&DAT_00070de8 + (param_1 - 1U >> 1 & 0x7ffffffc)) = puVar2; if (local_18 != 2) { iVar3 = 2 - local_18; puVar2 = (undefined4 *)(iVar1 + param_1 * (local_18 + -1)); do { *(int *)(iVar1 + param_1) = iVar1 + param_1 * 2; iVar1 = iVar1 + param_1; iVar3 = iVar3 + 1; } while (iVar3 != 0); } *puVar2 = 0; } return; } ### FUNC FUN_0004cfa4 @ 0004cfa4 void FUN_0004cfa4(undefined4 *param_1,int param_2) { uint uVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50); uVar1 = param_2 - 1U >> 1 & 0x7ffffffc; *param_1 = *(undefined4 *)(&DAT_00070de8 + uVar1); *(undefined4 **)(&DAT_00070de8 + uVar1) = param_1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50); return; } ### FUNC FUN_0004cfe0 @ 0004cfe0 undefined4 * FUN_0004cfe0(uint param_1,int *param_2) { undefined4 *puVar1; uint uVar2; int iVar3; uint uVar4; do { puVar1 = DAT_00070e2c; uVar2 = DAT_00070e28 - (int)DAT_00070e2c; uVar4 = param_1 * *param_2; if (uVar2 != 0) { if (uVar4 <= uVar2) goto LAB_0004d0ca; if (param_1 <= uVar2) { iVar3 = __udivsi3(uVar2,param_1); *param_2 = iVar3; uVar4 = iVar3 * param_1; LAB_0004d0ca: DAT_00070e2c = (undefined4 *)((int)puVar1 + uVar4); return puVar1; } uVar2 = uVar2 - 1 >> 1 & 0x7ffffffc; *DAT_00070e2c = *(undefined4 *)(&DAT_00070de8 + uVar2); *(undefined4 **)(&DAT_00070de8 + uVar2) = DAT_00070e2c; DAT_00070e2c = (undefined4 *)0x0; DAT_00070e28 = 0; } uVar4 = (DAT_00070e30 + 7U & 0xfffffff8) + uVar4 * 2; DAT_00070e2c = (undefined4 *)operator_new(uVar4); DAT_00070e28 = (int)DAT_00070e2c + uVar4; DAT_00070e30 = DAT_00070e30 + (uVar4 >> 4); } while( true ); } ### FUNC _M_allocate @ 0004d150 /* std::__node_alloc::_M_allocate(unsigned int&) */ void std::__node_alloc::_M_allocate(uint *param_1) { FUN_0004ce88(); return; } ### FUNC _M_deallocate @ 0004d15c /* std::__node_alloc::_M_deallocate(void*, unsigned int) */ void std::__node_alloc::_M_deallocate(void *param_1,uint param_2) { uint uVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50); uVar1 = param_2 - 1 >> 1 & 0x7ffffffc; *(undefined4 *)param_1 = *(undefined4 *)(&DAT_00070de8 + uVar1); *(void **)(&DAT_00070de8 + uVar1) = param_1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50); return; } ### FUNC FUN_0004d198 @ 0004d198 void FUN_0004d198(int param_1,int param_2) { int iVar1; undefined4 *puVar2; int local_18; local_18 = 0x80; iVar1 = FUN_0004d1f0(param_2,&local_18,param_1); if (local_18 != 1) { puVar2 = (undefined4 *)(iVar1 + param_2); *(undefined4 **)(param_1 + (param_2 + 7U >> 1 & 0x7ffffffc) + -4) = puVar2; if (local_18 != 2) { puVar2 = (undefined4 *)(iVar1 + param_2 * (local_18 + -1)); local_18 = local_18 + -2; do { *(int *)(iVar1 + param_2) = iVar1 + param_2 * 2; iVar1 = iVar1 + param_2; local_18 = local_18 + -1; } while (local_18 != 0); } *puVar2 = 0; } return; } ### FUNC FUN_0004d1f0 @ 0004d1f0 undefined4 * FUN_0004d1f0(uint param_1,int *param_2,int param_3) { undefined4 *puVar1; uint uVar2; int iVar3; uint uVar4; pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); uVar2 = DAT_00070e40 - (int)DAT_00070e44; iVar3 = *param_2; do { puVar1 = DAT_00070e44; uVar4 = param_1 * iVar3; if (uVar4 <= uVar2) { LAB_0004d2a8: DAT_00070e44 = (undefined4 *)((int)puVar1 + uVar4); pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); return puVar1; } if (param_1 <= uVar2) { iVar3 = __udivsi3(uVar2,param_1); *param_2 = iVar3; uVar4 = iVar3 * param_1; goto LAB_0004d2a8; } uVar4 = (DAT_00070e48 + 7U & 0xfffffff8) + uVar4 * 2; if (uVar2 != 0) { iVar3 = param_3 + (uVar2 + 7 >> 1 & 0x7ffffffc); *DAT_00070e44 = *(undefined4 *)(iVar3 + -4); *(undefined4 **)(iVar3 + -4) = DAT_00070e44; } DAT_00070e44 = (undefined4 *)std::__malloc_alloc::allocate(uVar4); DAT_00070e40 = (int)DAT_00070e44 + uVar4; DAT_00070e48 = DAT_00070e48 + (uVar4 >> 4); pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); uVar2 = DAT_00070e40 - (int)DAT_00070e44; iVar3 = *param_2; } while( true ); } ### FUNC FUN_0004d308 @ 0004d308 void FUN_0004d308(int param_1) { pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); *(int *)(param_1 + 0x40) = DAT_00070e34; DAT_00070e34 = param_1; pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); return; } ### FUNC FUN_0004d334 @ 0004d334 void * FUN_0004d334(void) { void *pvVar1; pvVar1 = DAT_00070e34; if (DAT_00070e34 != (void *)0x0) { DAT_00070e34 = (void *)*(undefined4 *)((int)DAT_00070e34 + 0x40); return pvVar1; } pvVar1 = operator_new(0x48); *(undefined4 *)((int)pvVar1 + 0x40) = 0; pthread_mutex_init((pthread_mutex_t *)((int)pvVar1 + 0x44),(pthread_mutexattr_t *)0x0); __aeabi_memclr(pvVar1,0x40); return pvVar1; } ### FUNC FUN_0004d384 @ 0004d384 void * FUN_0004d384(void) { void *pvVar1; int iVar2; undefined4 uVar3; if ((DAT_00070e38 != '\0') && (pvVar1 = pthread_getspecific(DAT_00070e3c), pvVar1 != (void *)0x0)) { return pvVar1; } pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c); if (DAT_00070e38 == '\0') { iVar2 = pthread_key_create(&DAT_00070e3c,(__destr_function *)0x4d309); if (iVar2 != 0) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } DAT_00070e38 = '\x01'; } if (DAT_00070e34 == (void *)0x0) { pvVar1 = operator_new(0x48); *(undefined4 *)((int)pvVar1 + 0x40) = 0; pthread_mutex_init((pthread_mutex_t *)((int)pvVar1 + 0x44),(pthread_mutexattr_t *)0x0); __aeabi_memclr(pvVar1,0x40); } else { pvVar1 = DAT_00070e34; DAT_00070e34 = *(void **)((int)DAT_00070e34 + 0x40); } iVar2 = pthread_setspecific(DAT_00070e3c,pvVar1); if (iVar2 == 0) { pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c); return pvVar1; } if (iVar2 == 0xc) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } /* WARNING: Subroutine does not return */ abort(); } ### FUNC FUN_0004d4b8 @ 0004d4b8 void FUN_0004d4b8(uint *param_1) { uint uVar1; int iVar2; int iVar3; undefined4 *puVar4; int iVar5; int local_18; uVar1 = *param_1; if (0x80 < uVar1) { std::__malloc_alloc::allocate(uVar1); return; } *param_1 = uVar1 + 7 & 0xfffffff8; iVar2 = FUN_0004d384(); uVar1 = *param_1; iVar5 = ((uVar1 + 7 >> 3) - 1) * 4; if (*(undefined4 **)(iVar2 + iVar5) != (undefined4 *)0x0) { *(undefined4 *)(iVar2 + iVar5) = **(undefined4 **)(iVar2 + iVar5); return; } local_18 = 0x80; iVar3 = FUN_0004d1f0(uVar1,&local_18,iVar2); if (local_18 == 1) { return; } puVar4 = (undefined4 *)(iVar3 + uVar1); *(undefined4 **)(iVar2 + iVar5) = puVar4; if (local_18 != 2) { iVar5 = local_18 + -2; iVar2 = iVar3; do { *(uint *)(iVar2 + uVar1) = iVar2 + uVar1 * 2; iVar2 = iVar2 + uVar1; iVar5 = iVar5 + -1; } while (iVar5 != 0); puVar4 = (undefined4 *)(iVar3 + uVar1 * (local_18 + -1)); } *puVar4 = 0; return; } ### FUNC FUN_0004d534 @ 0004d534 void FUN_0004d534(undefined4 *param_1,uint param_2) { int iVar1; if (0x80 < param_2) { free(param_1); return; } iVar1 = FUN_0004d384(); iVar1 = iVar1 + (param_2 + 7 >> 1 & 0x7ffffffc); *param_1 = *(undefined4 *)(iVar1 + -4); *(undefined4 **)(iVar1 + -4) = param_1; return; } ### FUNC FUN_0004d564 @ 0004d564 undefined4 * FUN_0004d564(uint *param_1,int param_2) { uint uVar1; undefined4 *puVar2; undefined4 *puVar3; int iVar4; int local_18; uVar1 = *param_1; if (uVar1 < 0x81) { *param_1 = uVar1 + 7 & 0xfffffff8; pthread_mutex_lock((pthread_mutex_t *)(param_2 + 0x44)); uVar1 = *param_1; iVar4 = ((uVar1 + 7 >> 3) - 1) * 4; puVar2 = *(undefined4 **)(param_2 + iVar4); if (puVar2 == (undefined4 *)0x0) { local_18 = 0x80; puVar2 = (undefined4 *)FUN_0004d1f0(uVar1,&local_18,param_2); if (local_18 != 1) { puVar3 = (undefined4 *)((int)puVar2 + uVar1); *(undefined4 **)(param_2 + iVar4) = puVar3; if (local_18 != 2) { iVar4 = local_18 + -2; puVar3 = puVar2; do { *(uint *)((int)puVar3 + uVar1) = (int)puVar3 + uVar1 * 2; puVar3 = (undefined4 *)((int)puVar3 + uVar1); iVar4 = iVar4 + -1; } while (iVar4 != 0); puVar3 = (undefined4 *)((int)puVar2 + uVar1 * (local_18 + -1)); } *puVar3 = 0; } } else { *(undefined4 *)(param_2 + iVar4) = *puVar2; } pthread_mutex_unlock((pthread_mutex_t *)(param_2 + 0x44)); } else { puVar2 = (undefined4 *)std::__malloc_alloc::allocate(uVar1); } return puVar2; } ### FUNC allocate @ 0004d6c4 /* std::priv::_Pthread_alloc::allocate(unsigned int&) */ void std::priv::_Pthread_alloc::allocate(uint *param_1) { FUN_0004d4b8(); return; } ### FUNC deallocate @ 0004d6d0 /* std::priv::_Pthread_alloc::deallocate(void*, unsigned int) */ void std::priv::_Pthread_alloc::deallocate(void *param_1,uint param_2) { int iVar1; if (0x80 < param_2) { free(param_1); return; } iVar1 = FUN_0004d384(); iVar1 = iVar1 + (param_2 + 7 >> 1 & 0x7ffffffc); *(undefined4 *)param_1 = *(undefined4 *)(iVar1 + -4); *(void **)(iVar1 + -4) = param_1; return; } ### FUNC allocate @ 0004d700 /* std::priv::_Pthread_alloc::allocate(unsigned int&, std::priv::_Pthread_alloc_per_thread_state*) */ void std::priv::_Pthread_alloc::allocate(uint *param_1,_Pthread_alloc_per_thread_state *param_2) { FUN_0004d564(); return; } ### FUNC deallocate @ 0004d70c /* std::priv::_Pthread_alloc::deallocate(void*, unsigned int, std::priv::_Pthread_alloc_per_thread_state*) */ void std::priv::_Pthread_alloc::deallocate (void *param_1,uint param_2,_Pthread_alloc_per_thread_state *param_3) { uint uVar1; if (0x80 < param_2) { free(param_1); return; } pthread_mutex_lock((pthread_mutex_t *)(param_3 + 0x44)); uVar1 = param_2 + 7 >> 1 & 0x7ffffffc; *(undefined4 *)param_1 = *(undefined4 *)(param_3 + (uVar1 - 4)); *(void **)(param_3 + (uVar1 - 4)) = param_1; pthread_mutex_unlock((pthread_mutex_t *)(param_3 + 0x44)); return; } ### FUNC reallocate @ 0004d754 /* std::priv::_Pthread_alloc::reallocate(void*, unsigned int, unsigned int&) */ void * std::priv::_Pthread_alloc::reallocate(void *param_1,uint param_2,uint *param_3) { void *pvVar1; int iVar2; uint uVar3; uVar3 = *param_3; if ((param_2 < 0x81) || (uVar3 < 0x81)) { if (7 < (uVar3 + 7 ^ param_2 + 7)) { pvVar1 = (void *)FUN_0004d4b8(param_3); uVar3 = param_2; if (*param_3 <= param_2) { uVar3 = *param_3; } __aeabi_memcpy(pvVar1,param_1,uVar3); if (param_2 < 0x81) { iVar2 = FUN_0004d384(); iVar2 = iVar2 + (param_2 + 7 >> 1 & 0x7ffffffc); *(undefined4 *)param_1 = *(undefined4 *)(iVar2 + -4); *(void **)(iVar2 + -4) = param_1; param_1 = pvVar1; } else { free(param_1); param_1 = pvVar1; } } } else { param_1 = realloc(param_1,uVar3); } return param_1; } ### FUNC _S_get_per_thread_state @ 0004d7d0 /* std::priv::_Pthread_alloc::_S_get_per_thread_state() */ void std::priv::_Pthread_alloc::_S_get_per_thread_state(void) { FUN_0004d384(); return; } ### FUNC FUN_0004d7dc @ 0004d7dc void FUN_0004d7dc(void) { int iVar1; int iVar2; ushort *puVar3; bool bVar4; puVar3 = &DAT_00070e54; iVar2 = 0; do { iVar1 = isalpha(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 0x20; } iVar1 = iscntrl(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 4; } if (iVar2 - 0x30U < 10) { *puVar3 = *puVar3 | 0x40; } iVar1 = isprint(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 2; } iVar1 = ispunct(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 0x80; } iVar1 = isspace(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 1; } iVar1 = isxdigit(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 0x100; } iVar1 = isupper(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 8; } iVar1 = islower(iVar2); if (iVar1 != 0) { *puVar3 = *puVar3 | 0x10; } puVar3 = puVar3 + 1; bVar4 = iVar2 != 0x7f; iVar2 = iVar2 + 1; } while (bVar4); __aeabi_memclr4(&DAT_00070f54); return; } ### FUNC FUN_0004d8ac @ 0004d8ac void FUN_0004d8ac(void) { return; } ### FUNC FUN_0004d8c4 @ 0004d8c4 undefined4 FUN_0004d8c4(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d8da @ 0004d8da undefined4 FUN_0004d8da(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d8f0 @ 0004d8f0 undefined4 FUN_0004d8f0(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d906 @ 0004d906 undefined4 FUN_0004d906(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d91c @ 0004d91c undefined4 FUN_0004d91c(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d932 @ 0004d932 undefined4 FUN_0004d932(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d948 @ 0004d948 undefined4 FUN_0004d948(char *param_1,undefined4 param_2,undefined4 *param_3) { undefined4 uVar1; if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) { *param_3 = 3; uVar1 = 0; } return uVar1; } ### FUNC FUN_0004d960 @ 0004d960 undefined * FUN_0004d960(void) { return &DAT_0004d964; } ### FUNC FUN_0004d968 @ 0004d968 undefined * FUN_0004d968(void) { return &DAT_0004d96c; } ### FUNC FUN_0004d970 @ 0004d970 undefined * FUN_0004d970(void) { return &DAT_0004d974; } ### FUNC FUN_0004d978 @ 0004d978 undefined * FUN_0004d978(void) { return &DAT_0004d97c; } ### FUNC FUN_0004d980 @ 0004d980 undefined * FUN_0004d980(void) { return &DAT_0004d984; } ### FUNC FUN_0004d988 @ 0004d988 undefined * FUN_0004d988(void) { return &DAT_0004d98c; } ### FUNC FUN_0004d990 @ 0004d990 undefined * FUN_0004d990(void) { return &DAT_0004d994; } ### FUNC FUN_0004d998 @ 0004d998 undefined * FUN_0004d998(void) { return &DAT_0004d99c; } ### FUNC FUN_0004d9a0 @ 0004d9a0 undefined * FUN_0004d9a0(void) { return &DAT_0004d9a4; } ### FUNC FUN_0004d9a8 @ 0004d9a8 undefined * FUN_0004d9a8(void) { return &DAT_0004d9ac; } ### FUNC FUN_0004d9b0 @ 0004d9b0 undefined * FUN_0004d9b0(void) { return &DAT_0004d9b4; } ### FUNC FUN_0004d9b8 @ 0004d9b8 undefined * FUN_0004d9b8(void) { return &DAT_0004d9bc; } ### FUNC FUN_0004d9c0 @ 0004d9c0 undefined * FUN_0004d9c0(void) { return &DAT_0004d9c4; } ### FUNC FUN_0004d9c8 @ 0004d9c8 void FUN_0004d9c8(void) { return; } ### FUNC FUN_0004d9ca @ 0004d9ca void FUN_0004d9ca(void) { return; } ### FUNC FUN_0004d9cc @ 0004d9cc void FUN_0004d9cc(void) { return; } ### FUNC FUN_0004d9ce @ 0004d9ce void FUN_0004d9ce(void) { return; } ### FUNC FUN_0004d9d0 @ 0004d9d0 void FUN_0004d9d0(void) { return; } ### FUNC FUN_0004d9d2 @ 0004d9d2 void FUN_0004d9d2(void) { return; } ### FUNC FUN_0004d9d4 @ 0004d9d4 void FUN_0004d9d4(void) { return; } ### FUNC FUN_0004d9d8 @ 0004d9d8 undefined * FUN_0004d9d8(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) { undefined *puVar1; puVar1 = &DAT_0004d9f4; if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { *param_4 = 3; puVar1 = (undefined *)0x0; } return puVar1; } ### FUNC FUN_0004d9f8 @ 0004d9f8 undefined * FUN_0004d9f8(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) { undefined *puVar1; puVar1 = &DAT_0004da14; if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { *param_4 = 3; puVar1 = (undefined *)0x0; } return puVar1; } ### FUNC FUN_0004da18 @ 0004da18 undefined * FUN_0004da18(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) { undefined *puVar1; puVar1 = &DAT_0004da34; if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { *param_4 = 3; puVar1 = (undefined *)0x0; } return puVar1; } ### FUNC FUN_0004da38 @ 0004da38 undefined * FUN_0004da38(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) { undefined *puVar1; puVar1 = &DAT_0004da54; if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { *param_4 = 3; puVar1 = (undefined *)0x0; } return puVar1; } ### FUNC FUN_0004da58 @ 0004da58 undefined * FUN_0004da58(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) { undefined *puVar1; puVar1 = &DAT_0004da74; if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { *param_4 = 3; puVar1 = (undefined *)0x0; } return puVar1; } ### FUNC FUN_0004da78 @ 0004da78 undefined * FUN_0004da78(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4) { undefined *puVar1; puVar1 = &DAT_0004da94; if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) { *param_4 = 3; puVar1 = (undefined *)0x0; } return puVar1; } ### FUNC FUN_0004da98 @ 0004da98 undefined4 FUN_0004da98(void) { return 0; } ### FUNC FUN_0004da9c @ 0004da9c undefined4 FUN_0004da9c(void) { return 0; } ### FUNC FUN_0004daa0 @ 0004daa0 undefined4 FUN_0004daa0(void) { return 0; } ### FUNC FUN_0004daa4 @ 0004daa4 undefined4 FUN_0004daa4(void) { return 0; } ### FUNC FUN_0004daa8 @ 0004daa8 undefined4 FUN_0004daa8(void) { return 0; } ### FUNC FUN_0004dab0 @ 0004dab0 undefined2 * FUN_0004dab0(void) { return &DAT_00070e54; } ### FUNC FUN_0004dabc @ 0004dabc void FUN_0004dabc(undefined4 param_1,int param_2) { toupper(param_2); return; } ### FUNC FUN_0004dac8 @ 0004dac8 void FUN_0004dac8(undefined4 param_1,int param_2) { tolower(param_2); return; } ### FUNC FUN_0004dad4 @ 0004dad4 uint FUN_0004dad4(undefined4 param_1,wint_t param_2,uint param_3) { int iVar1; uint uVar2; uVar2 = 0; if (((param_3 & 0x20) != 0) && (iVar1 = iswalpha(param_2), uVar2 = 0x20, iVar1 == 0)) { uVar2 = 0; } if ((int)(param_3 << 0x1d) < 0) { iVar1 = iswcntrl(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 4; } } if ((int)(param_3 << 0x19) < 0) { iVar1 = iswdigit(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 0x40; } } if ((int)(param_3 << 0x1e) < 0) { iVar1 = iswprint(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 2; } } if ((int)(param_3 << 0x18) < 0) { iVar1 = iswpunct(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 0x80; } } if ((param_3 & 1) != 0) { iVar1 = iswspace(param_2); uVar2 = uVar2 | iVar1 != 0; } if ((int)(param_3 << 0x17) < 0) { iVar1 = iswxdigit(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 0x100; } } if ((int)(param_3 << 0x1c) < 0) { iVar1 = iswupper(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 8; } } if (-1 < (int)(param_3 << 0x1b)) { return uVar2; } iVar1 = iswlower(param_2); if (iVar1 != 0) { uVar2 = uVar2 | 0x10; } return uVar2; } ### FUNC FUN_0004dbac @ 0004dbac void FUN_0004dbac(undefined4 param_1,wint_t param_2) { towlower(param_2); return; } ### FUNC FUN_0004dbb8 @ 0004dbb8 void FUN_0004dbb8(undefined4 param_1,wint_t param_2) { towupper(param_2); return; } ### FUNC FUN_0004dbc4 @ 0004dbc4 undefined4 FUN_0004dbc4(void) { return 1; } ### FUNC FUN_0004dbc8 @ 0004dbc8 undefined4 FUN_0004dbc8(void) { return 1; } ### FUNC FUN_0004dbcc @ 0004dbcc undefined4 FUN_0004dbcc(void) { return 1; } ### FUNC FUN_0004dbd0 @ 0004dbd0 undefined4 FUN_0004dbd0(undefined4 param_1,uint *param_2,byte *param_3) { *param_2 = (uint)*param_3; return 1; } ### FUNC FUN_0004dbd8 @ 0004dbd8 undefined4 FUN_0004dbd8(undefined4 param_1,undefined1 *param_2,undefined4 param_3,undefined1 param_4) { *param_2 = param_4; return 1; } ### FUNC FUN_0004dbde @ 0004dbde undefined4 FUN_0004dbde(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 *param_5) { *param_5 = param_3; return 0; } ### FUNC FUN_0004dbe6 @ 0004dbe6 uint FUN_0004dbe6(undefined4 param_1,char *param_2,uint param_3,char *param_4,uint param_5) { int iVar1; uint __n; uint __n_00; uint local_98; char acStack_94 [64]; char acStack_54 [64]; local_98 = param_5; if (param_5 != 0 || param_3 != 0) { do { __n = param_3; if (0x3e < param_3) { __n = 0x3f; } strncpy(acStack_54,param_2,__n); acStack_54[__n] = '\0'; __n_00 = local_98; if (0x3e < local_98) { __n_00 = 0x3f; } strncpy(acStack_94,param_4,__n_00); acStack_94[__n_00] = '\0'; iVar1 = strcmp(acStack_54,acStack_94); if (iVar1 != 0) { return iVar1 >> 0x1f | 1; } param_3 = param_3 - __n; local_98 = local_98 - __n_00; param_4 = param_4 + __n_00; param_2 = param_2 + __n; } while (local_98 != 0 || param_3 != 0); } return 0; } ### FUNC FUN_0004dc70 @ 0004dc70 uint FUN_0004dc70(undefined4 param_1,wchar_t *param_2,uint param_3,wchar_t *param_4,uint param_5) { int iVar1; uint __n; uint __n_00; uint local_218; wchar_t awStack_214 [64]; wchar_t awStack_114 [64]; local_218 = param_5; if (param_5 != 0 || param_3 != 0) { do { __n = param_3; if (0x3e < param_3) { __n = 0x3f; } wcsncpy(awStack_114,param_2,__n); awStack_114[__n] = L'\0'; __n_00 = local_218; if (0x3e < local_218) { __n_00 = 0x3f; } wcsncpy(awStack_214,param_4,__n_00); awStack_214[__n_00] = L'\0'; iVar1 = wcscmp(awStack_114,awStack_214); if (iVar1 != 0) { return iVar1 >> 0x1f | 1; } param_3 = param_3 - __n; local_218 = local_218 - __n_00; param_4 = param_4 + __n_00; param_2 = param_2 + __n; } while (local_218 != 0 || param_3 != 0); } return 0; } ### FUNC FUN_0004dd0a @ 0004dd0a undefined4 FUN_0004dd0a(undefined4 param_1,char *param_2,int param_3,char *param_4,undefined4 param_5) { if (param_2 != (char *)0x0) { strncpy(param_2,param_4,param_3 - 1U); param_2[param_3 - 1U] = '\0'; } return param_5; } ### FUNC FUN_0004dd2e @ 0004dd2e undefined4 FUN_0004dd2e(undefined4 param_1,wchar_t *param_2,int param_3,wchar_t *param_4,undefined4 param_5) { if (param_2 != (wchar_t *)0x0) { wcsncpy(param_2,param_4,param_3 - 1U); param_2[param_3 - 1U] = L'\0'; } return param_5; } ### FUNC FUN_0004dd54 @ 0004dd54 undefined4 FUN_0004dd54(void) { return 0x2e; } ### FUNC FUN_0004dd58 @ 0004dd58 undefined4 FUN_0004dd58(void) { return 0x2c; } ### FUNC FUN_0004dd5c @ 0004dd5c undefined * FUN_0004dd5c(void) { return &DAT_0006478a; } ### FUNC FUN_0004dd68 @ 0004dd68 undefined * FUN_0004dd68(void) { return &DAT_0004dd6c; } ### FUNC FUN_0004dd74 @ 0004dd74 char * FUN_0004dd74(void) { return "false"; } ### FUNC FUN_0004dd80 @ 0004dd80 undefined4 FUN_0004dd80(void) { return 0x2e; } ### FUNC FUN_0004dd84 @ 0004dd84 undefined4 FUN_0004dd84(void) { return 0x2c; } ### FUNC FUN_0004dd88 @ 0004dd88 undefined * FUN_0004dd88(void) { return &DAT_0004dd8c; } ### FUNC FUN_0004dda0 @ 0004dda0 wchar_t * FUN_0004dda0(void) { return L"false"; } ### FUNC FUN_0004ddbc @ 0004ddbc undefined * FUN_0004ddbc(void) { return &DAT_0006478a; } ### FUNC FUN_0004ddc8 @ 0004ddc8 undefined * FUN_0004ddc8(void) { return &DAT_0006478a; } ### FUNC FUN_0004ddd4 @ 0004ddd4 undefined4 FUN_0004ddd4(void) { return 0x2e; } ### FUNC FUN_0004ddd8 @ 0004ddd8 undefined4 FUN_0004ddd8(void) { return 0x2c; } ### FUNC FUN_0004dddc @ 0004dddc undefined * FUN_0004dddc(void) { return &DAT_0006478a; } ### FUNC FUN_0004dde8 @ 0004dde8 undefined * FUN_0004dde8(void) { return &DAT_0006478a; } ### FUNC FUN_0004ddf4 @ 0004ddf4 undefined * FUN_0004ddf4(void) { return &DAT_0006478a; } ### FUNC FUN_0004de00 @ 0004de00 undefined4 FUN_0004de00(void) { return 0; } ### FUNC FUN_0004de04 @ 0004de04 undefined4 FUN_0004de04(void) { return 0; } ### FUNC FUN_0004de08 @ 0004de08 undefined4 FUN_0004de08(void) { return 0xff; } ### FUNC FUN_0004de0c @ 0004de0c undefined4 FUN_0004de0c(void) { return 0xff; } ### FUNC FUN_0004de10 @ 0004de10 undefined4 FUN_0004de10(void) { return 0xff; } ### FUNC FUN_0004de14 @ 0004de14 undefined4 FUN_0004de14(void) { return 0xff; } ### FUNC FUN_0004de18 @ 0004de18 undefined4 FUN_0004de18(void) { return 0xff; } ### FUNC FUN_0004de1c @ 0004de1c undefined4 FUN_0004de1c(void) { return 0xff; } ### FUNC FUN_0004de20 @ 0004de20 undefined * FUN_0004de20(void) { return &DAT_0004de24; } ### FUNC FUN_0004de28 @ 0004de28 undefined * FUN_0004de28(void) { return &DAT_0004de2c; } ### FUNC FUN_0004de38 @ 0004de38 undefined * FUN_0004de38(void) { return &DAT_0004de3c; } ### FUNC FUN_0004de40 @ 0004de40 undefined * FUN_0004de40(void) { return &DAT_0004de44; } ### FUNC FUN_0004de48 @ 0004de48 undefined * FUN_0004de48(undefined4 param_1,int param_2) { return (&PTR_s_January_00069898)[param_2]; } ### FUNC FUN_0004de58 @ 0004de58 undefined * FUN_0004de58(undefined4 param_1,int param_2) { return (&PTR_DAT_000698c8)[param_2]; } ### FUNC FUN_0004de68 @ 0004de68 undefined * FUN_0004de68(undefined4 param_1,int param_2) { return (&PTR_s_Sunday_000698f8)[param_2]; } ### FUNC FUN_0004de78 @ 0004de78 undefined * FUN_0004de78(undefined4 param_1,int param_2) { return (&PTR_DAT_00069914)[param_2]; } ### FUNC FUN_0004de88 @ 0004de88 char * FUN_0004de88(void) { return "%m/%d/%y"; } ### FUNC FUN_0004de94 @ 0004de94 char * FUN_0004de94(void) { return "%m/%d/%y"; } ### FUNC FUN_0004dea0 @ 0004dea0 char * FUN_0004dea0(void) { return "%H:%M:%S"; } ### FUNC FUN_0004deb0 @ 0004deb0 undefined * FUN_0004deb0(void) { return &DAT_0006478a; } ### FUNC FUN_0004debc @ 0004debc undefined * FUN_0004debc(void) { return &DAT_0006478a; } ### FUNC FUN_0004dec8 @ 0004dec8 undefined * FUN_0004dec8(void) { return &DAT_0004decc; } ### FUNC FUN_0004ded0 @ 0004ded0 undefined * FUN_0004ded0(void) { return &DAT_0004ded4; } ### FUNC FUN_0004ded8 @ 0004ded8 undefined * FUN_0004ded8(undefined4 param_1,int param_2) { return (&PTR_u_January_00069930)[param_2]; } ### FUNC FUN_0004dee8 @ 0004dee8 undefined * FUN_0004dee8(undefined4 param_1,int param_2) { return (&PTR_DAT_00069960)[param_2]; } ### FUNC FUN_0004def8 @ 0004def8 undefined * FUN_0004def8(undefined4 param_1,int param_2) { return (&PTR_u_Sunday_00069990)[param_2]; } ### FUNC FUN_0004df08 @ 0004df08 undefined * FUN_0004df08(undefined4 param_1,int param_2) { return (&PTR_DAT_000699ac)[param_2]; } ### FUNC FUN_0004df18 @ 0004df18 undefined * FUN_0004df18(void) { return &DAT_0004df1c; } ### FUNC FUN_0004df28 @ 0004df28 undefined * FUN_0004df28(void) { return &DAT_0004df2c; } ### FUNC FUN_0004df38 @ 0004df38 undefined4 FUN_0004df38(void) { return 0xffffffff; } ### FUNC FUN_0004df3e @ 0004df3e void FUN_0004df3e(void) { return; } ### FUNC FUN_0004df40 @ 0004df40 undefined4 FUN_0004df40(void) { undefined4 in_stack_00000000; return in_stack_00000000; } ### FUNC __cxa_end_cleanup @ 0004df44 void __cxa_end_cleanup(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 uVar1; uVar1 = FUN_0004e004(); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar1,param_2,param_3,param_4); } ### FUNC __cxa_type_match @ 0004df54 undefined4 __cxa_type_match(int param_1,int *param_2,undefined4 param_3,undefined4 *param_4) { int iVar1; undefined4 uVar2; int iVar3; undefined4 uVar4; undefined4 *local_18; iVar3 = *(int *)(param_1 + -0x34); uVar4 = 0; if (iVar3 != 0) { local_18 = (undefined4 *)(param_1 + 0x58); iVar1 = FUN_00030ba0(iVar3,&DAT_00068e30,&PTR_PTR_FUN_00031728_1_00068dc4,0); uVar2 = 1; if (iVar1 != 0) { local_18 = *(undefined4 **)(param_1 + 0x58); uVar2 = 2; } uVar4 = 0; if (param_2 != (int *)0x0) { iVar3 = (**(code **)(*param_2 + 8))(param_2,iVar3,&local_18); if (iVar3 == 1) { *param_4 = local_18; uVar4 = uVar2; } } } return uVar4; } ### FUNC __cxa_begin_cleanup @ 0004dfc4 undefined4 __cxa_begin_cleanup(int *param_1) { int iVar1; int iVar2; iVar1 = FUN_000306d8(); if (*param_1 == 0x432b2b00 && param_1[1] == 0x474e5543) { iVar2 = param_1[-6]; param_1[-6] = iVar2 + 1; if (iVar2 != 0) { return 1; } param_1[-7] = *(int *)(iVar1 + 8); } *(int **)(iVar1 + 8) = param_1 + -0xe; return 1; } ### FUNC FUN_0004e004 @ 0004e004 int FUN_0004e004(void) { int iVar1; undefined4 *puVar2; int iVar3; iVar1 = FUN_000306d8(); iVar3 = *(int *)(iVar1 + 8); puVar2 = (undefined4 *)(iVar1 + 8); if (iVar3 == 0) { /* WARNING: Subroutine does not return */ FUN_0003178c(); } if (*(int *)(iVar3 + 0x38) == 0x432b2b00 && *(int *)(iVar3 + 0x3c) == 0x474e5543) { iVar1 = *(int *)(iVar3 + 0x20) + -1; *(int *)(iVar3 + 0x20) = iVar1; if (iVar1 != 0) { return iVar3 + 0x38; } *puVar2 = *(undefined4 *)(iVar3 + 0x1c); puVar2 = (undefined4 *)(iVar3 + 0x1c); } *puVar2 = 0; return iVar3 + 0x38; } ### FUNC __cxa_call_unexpected @ 0004e054 void __cxa_call_unexpected(int *param_1) { if (*param_1 == 0x432b2b00 && param_1[1] == 0x474e5543) { FUN_000308d8(param_1); (*(code *)param_1[-0xb])((code *)param_1[-0xb],0); /* WARNING: Subroutine does not return */ FUN_0003178c(); } FUN_000308d8(param_1); FUN_00031844(); FUN_000308d8(); /* WARNING: Subroutine does not return */ FUN_0003178c(); } ### FUNC FUN_0004e1d4 @ 0004e1d4 uint FUN_0004e1d4(undefined4 *param_1) { byte bVar1; uint uVar2; byte *pbVar3; uint uVar4; pbVar3 = (byte *)*param_1; uVar4 = 0; uVar2 = 0; do { bVar1 = *pbVar3; uVar2 = uVar2 | (bVar1 & 0x7f) << (uVar4 & 0xff); uVar4 = uVar4 + 7; pbVar3 = pbVar3 + 1; } while ((bVar1 & 0x80) != 0); *param_1 = pbVar3; return uVar2; } ### FUNC FUN_0004e1f8 @ 0004e1f8 uint FUN_0004e1f8(undefined4 *param_1) { byte bVar1; uint uVar2; uint uVar3; uint uVar4; byte *pbVar5; pbVar5 = (byte *)*param_1; uVar3 = 0; uVar2 = 0; do { bVar1 = *pbVar5; uVar2 = uVar2 | (bVar1 & 0x7f) << (uVar3 & 0xff); uVar3 = uVar3 + 7; pbVar5 = pbVar5 + 1; } while ((bVar1 & 0x80) != 0); *param_1 = pbVar5; uVar4 = bVar1 & 0x40; if ((bVar1 & 0x40) != 0) { uVar4 = -1 << (uVar3 & 0xff); } if (0x1f < uVar3) { return uVar2; } return uVar4 | uVar2; } ### FUNC FUN_0004e23c @ 0004e23c /* WARNING: Type propagation algorithm not settling */ byte * FUN_0004e23c(undefined4 *param_1,uint param_2) { byte bVar1; ushort uVar2; uint uVar3; byte *pbVar4; uint uVar5; byte *pbVar6; ushort *puVar7; ushort *puVar8; uint uVar9; if (param_2 == 0xff) { return (byte *)0x0; } if (0xc < (param_2 & 0xf)) goto switchD_0004e25e_caseD_5; puVar7 = (ushort *)*param_1; puVar8 = puVar7; switch(param_2 & 0xf) { case 0: case 3: case 0xb: pbVar6 = *(byte **)puVar7; puVar8 = puVar7 + 2; break; case 1: uVar3 = 0; pbVar6 = (byte *)0x0; do { uVar2 = *puVar8; pbVar6 = (byte *)((uint)pbVar6 | ((byte)uVar2 & 0x7f) << (uVar3 & 0xff)); uVar3 = uVar3 + 7; puVar8 = (ushort *)((int)puVar8 + 1); } while (((byte)uVar2 & 0x80) != 0); break; case 2: pbVar6 = (byte *)(uint)*puVar7; goto LAB_0004e30a; case 4: case 0xc: pbVar6 = *(byte **)puVar7; puVar8 = puVar7 + 4; break; default: goto switchD_0004e25e_caseD_5; case 9: uVar9 = 0; uVar3 = 0; do { bVar1 = (byte)*puVar8; uVar3 = uVar3 | (bVar1 & 0x7f) << (uVar9 & 0xff); uVar9 = uVar9 + 7; puVar8 = (ushort *)((int)puVar8 + 1); } while ((bVar1 & 0x80) != 0); uVar5 = -1 << (uVar9 & 0xff); if ((bVar1 & 0x40) == 0) { uVar5 = bVar1 & 0x40; } if (0x1f < uVar9) { uVar5 = 0; } pbVar6 = (byte *)(uVar5 | uVar3); break; case 10: pbVar6 = (byte *)(int)(short)*puVar7; LAB_0004e30a: puVar8 = puVar7 + 1; } pbVar4 = pbVar6; if ((param_2 & 0x70) != 0) { if ((param_2 & 0x70) != 0x10) { switchD_0004e25e_caseD_5: /* WARNING: Subroutine does not return */ abort(); } pbVar4 = (byte *)0x0; if (pbVar6 == (byte *)0x0) goto LAB_0004e330; pbVar4 = pbVar6 + (int)puVar7; } if (((int)(param_2 << 0x18) < 0) && (pbVar4 != (byte *)0x0)) { pbVar4 = *(byte **)pbVar4; } LAB_0004e330: *param_1 = puVar8; return pbVar4; } ### FUNC FUN_0004e34a @ 0004e34a void FUN_0004e34a(void *param_1) { FUN_00030670(); operator_delete(param_1); return; } ### FUNC FUN_0004e370 @ 0004e370 void FUN_0004e370(void) { FUN_00030670(); return; } ### FUNC FUN_0004e37a @ 0004e37a void FUN_0004e37a(void *param_1) { FUN_00030670(); operator_delete(param_1); return; } ### FUNC FUN_0004e3a4 @ 0004e3a4 undefined4 FUN_0004e3a4(uint *param_1) { uint uVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4); uVar1 = *param_1; while( true ) { if ((uVar1 & 1) != 0) { pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); return 0; } if ((uVar1 & 0x100) == 0) break; *param_1 = uVar1 | 0x200; pthread_cond_wait((pthread_cond_t *)&DAT_00071054,(pthread_mutex_t *)&DAT_0006b8e4); uVar1 = *param_1; } *param_1 = 0x100; pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); return 1; } ### FUNC FUN_0004e40c @ 0004e40c void FUN_0004e40c(uint *param_1) { uint uVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4); uVar1 = *param_1; *param_1 = 1; if ((uVar1 & 0x200) != 0) { pthread_cond_broadcast((pthread_cond_t *)&DAT_00071054); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); return; } ### FUNC FUN_0004e444 @ 0004e444 void FUN_0004e444(uint *param_1) { uint uVar1; pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4); uVar1 = *param_1; *param_1 = 0; if ((uVar1 & 0x200) != 0) { pthread_cond_broadcast((pthread_cond_t *)&DAT_00071054); } pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4); return; } ### FUNC FUN_0004e480 @ 0004e480 void FUN_0004e480(void) { FUN_00030670(); return; } ### FUNC FUN_0004e48c @ 0004e48c undefined4 FUN_0004e48c(int *param_1,undefined4 param_2,undefined4 param_3) { int iVar1; undefined4 uVar2; uVar2 = 1; iVar1 = (**(code **)(*param_1 + 0xc))(param_1,param_2,param_3,1); if (iVar1 == 0) { uVar2 = FUN_0003186c(param_2,&decltype(nullptr)::typeinfo); } return uVar2; } ### FUNC FUN_0004e4bc @ 0004e4bc uint FUN_0004e4bc(int *param_1,int *param_2,undefined4 param_3,uint param_4) { int iVar1; int *piVar2; uint uVar3; uint uVar4; int *piVar5; byte local_18 [4]; iVar1 = FUN_0003186c(); uVar3 = 1; if (iVar1 == 0) { if ((param_1 == (int *)0x0) || (param_2 == (int *)0x0)) { /* WARNING: Subroutine does not return */ FUN_00055980(); } uVar3 = 0; iVar1 = FUN_00031886(*(undefined4 *)(*param_1 + -4),*(undefined4 *)(*param_2 + -4)); if ((iVar1 == 0) && ((param_2[2] & (param_1[2] ^ 0xffffffffU)) == 0)) { uVar4 = param_4 | 2; if (param_4 != 1) { uVar4 = param_4 & 0xfffffffe; } if ((uVar4 & 5) != 4) { uVar4 = ~(param_1[2] << 2) & 4U | uVar4; iVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,param_3,uVar4,local_18); if (iVar1 == 1) { uVar3 = (uint)local_18[0]; if (uVar3 != 0) { uVar3 = 1; } } else { piVar5 = (int *)param_1[3]; if ((piVar5 == (int *)0x0) || (piVar2 = (int *)FUN_00030ba0(piVar5,&PTR_PTR_FUN_00031728_1_00068d20, &PTR_PTR_FUN_00031728_1_00069dc8,0), piVar2 == (int *)0x0 )) { uVar3 = (**(code **)(*piVar5 + 8))(piVar5,param_2[3],param_3); } else { uVar3 = (**(code **)(*piVar2 + 0xc))(piVar2,param_2[3],param_3,uVar4); } } } } } return uVar3; } ### FUNC FUN_0004e5a0 @ 0004e5a0 undefined4 FUN_0004e5a0(int *param_1,int param_2,undefined4 param_3,undefined4 param_4) { int iVar1; undefined4 uVar2; int *piVar3; int *piVar4; char local_18 [4]; iVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,param_3,param_4,local_18); if (iVar1 == 1) { uVar2 = 1; if (local_18[0] == '\0') { return 0; } } else { piVar4 = (int *)param_1[3]; if ((piVar4 != (int *)0x0) && (piVar3 = (int *)FUN_00030ba0(piVar4,&PTR_PTR_FUN_00031728_1_00068d20, &PTR_PTR_FUN_00031728_1_00069dc8,0), piVar3 != (int *)0x0)) { uVar2 = (**(code **)(*piVar3 + 0xc))(piVar3,*(undefined4 *)(param_2 + 0xc),param_3,param_4); return uVar2; } uVar2 = (**(code **)(*piVar4 + 8))(piVar4,*(undefined4 *)(param_2 + 0xc),param_3); } return uVar2; } ### FUNC _Filebuf_base @ 0004e61c /* std::_Filebuf_base::_Filebuf_base() */ void __thiscall std::_Filebuf_base::_Filebuf_base(_Filebuf_base *this) { *(undefined2 *)(this + 8) = 0; *(undefined4 *)this = 0xffffffff; *(undefined4 *)(this + 4) = 0; return; } ### FUNC _S_initialize @ 0004e628 /* std::_Filebuf_base::_S_initialize() */ void std::_Filebuf_base::_S_initialize(void) { _M_page_size = sysconf(0x27); return; } ### FUNC _M_file_size @ 0004e640 /* std::_Filebuf_base::_M_file_size() */ int __thiscall std::_Filebuf_base::_M_file_size(_Filebuf_base *this) { bool bVar1; int iVar2; int iVar3; stat sStack_70; iVar2 = fstat(*(int *)this,&sStack_70); iVar3 = 0; if ((iVar2 == 0) && ((sStack_70.st_mode & 0xf000) == 0x8000)) { bVar1 = 0 < sStack_70.st_blocks; if (sStack_70.st_blocks == 0) { bVar1 = sStack_70.st_blksize != 0; } iVar3 = sStack_70.st_blksize; if (!bVar1) { iVar3 = 0; } } return iVar3; } ### FUNC _M_open @ 0004e698 /* std::_Filebuf_base::_M_open(char const*, int, long) */ bool __thiscall std::_Filebuf_base::_M_open(_Filebuf_base *this,char *param_1,int param_2,long param_3) { __off_t _Var1; int iVar2; _Filebuf_base _Var3; bool bVar4; stat sStack_80; bVar4 = false; if (this[8] != (_Filebuf_base)0x0) { return false; } iVar2 = 0x241; switch(param_2 & 0xfffffff9) { case 1: case 0x11: iVar2 = 0x441; break; case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 0xb: case 0xc: case 0xd: case 0xe: case 0xf: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: return false; case 8: param_3 = 0; iVar2 = 0; break; case 9: case 0x19: iVar2 = 0x442; break; case 0x10: case 0x30: break; case 0x18: iVar2 = 2; break; case 0x38: iVar2 = 0x242; break; default: goto switchD_0004e6ca_default; } iVar2 = open(param_1,iVar2,param_3); if (-1 < iVar2) { _Var3 = (_Filebuf_base)0x1; this[8] = (_Filebuf_base)0x1; if ((param_2 & 3U) != 0) { _Var3 = (_Filebuf_base)0x0; _Var1 = lseek(iVar2,0,2); if (_Var1 == -1) { this[8] = (_Filebuf_base)0x0; } else { _Var3 = this[8]; } } this[9] = _Var3; *(int *)this = iVar2; *(int *)(this + 4) = param_2; if (_Var3 != (_Filebuf_base)0x0) { iVar2 = fstat(iVar2,&sStack_80); _Var3 = (_Filebuf_base)0x0; if ((iVar2 == 0) && (_Var3 = (_Filebuf_base)0x1, (sStack_80.st_mode & 0xf000) != 0x8000)) { _Var3 = (_Filebuf_base)0x0; } this[10] = _Var3; bVar4 = this[8] != (_Filebuf_base)0x0; } } switchD_0004e6ca_default: return bVar4; } ### FUNC _M_open @ 0004e794 /* std::_Filebuf_base::_M_open(char const*, int) */ void __thiscall std::_Filebuf_base::_M_open(_Filebuf_base *this,char *param_1,int param_2) { _M_open(this,param_1,param_2,0x1b6); return; } ### FUNC _M_open @ 0004e7a4 /* std::_Filebuf_base::_M_open(int, int) */ undefined4 std::_Filebuf_base::_M_open(int param_1,int param_2) { uint uVar1; int iVar2; undefined1 uVar3; undefined4 uVar4; stat sStack_80; uVar4 = 0; if ((-1 < param_2) && (*(char *)(param_1 + 8) == '\0')) { uVar1 = fcntl(param_2,3); if (uVar1 != 0xffffffff) { *(int *)param_1 = param_2; *(undefined2 *)(param_1 + 8) = 1; *(uint *)(param_1 + 4) = *(uint *)(&DAT_0004e814 + (uVar1 & 3 ^ 2) * 4) | uVar1 >> 10 & 1; iVar2 = fstat(param_2,&sStack_80); uVar3 = 0; if ((iVar2 == 0) && (uVar3 = 1, (sStack_80.st_mode & 0xf000) != 0x8000)) { uVar3 = 0; } *(undefined1 *)(param_1 + 10) = uVar3; uVar4 = 1; } } return uVar4; } ### FUNC _M_close @ 0004e824 /* std::_Filebuf_base::_M_close() */ undefined4 __thiscall std::_Filebuf_base::_M_close(_Filebuf_base *this) { undefined4 uVar1; int iVar2; uVar1 = 0; if (this[8] != (_Filebuf_base)0x0) { uVar1 = 1; if (this[9] != (_Filebuf_base)0x0) { iVar2 = close(*(int *)this); uVar1 = 1; if (iVar2 != 0) { uVar1 = 0; } } *(undefined4 *)(this + 4) = 0; *(undefined2 *)(this + 8) = 0; } return uVar1; } ### FUNC _M_read @ 0004e854 /* std::_Filebuf_base::_M_read(char*, int) */ void __thiscall std::_Filebuf_base::_M_read(_Filebuf_base *this,char *param_1,int param_2) { read(*(int *)this,param_1,param_2); return; } ### FUNC _M_write @ 0004e860 /* std::_Filebuf_base::_M_write(char*, int) */ undefined4 __thiscall std::_Filebuf_base::_M_write(_Filebuf_base *this,char *param_1,int param_2) { size_t sVar1; sVar1 = write(*(int *)this,param_1,param_2); if (sVar1 != param_2) { do { if ((int)sVar1 < 1) { return 0; } if (param_2 <= (int)sVar1) { return 0; } param_1 = param_1 + sVar1; param_2 = param_2 - sVar1; sVar1 = write(*(int *)this,param_1,param_2); } while (param_2 != sVar1); } return 1; } ### FUNC _M_seek @ 0004e89e /* WARNING: Type propagation algorithm not settling */ /* std::_Filebuf_base::_M_seek(long, int) */ __off_t __thiscall std::_Filebuf_base::_M_seek(_Filebuf_base *this,long param_1,int param_2) { bool bVar1; __off_t _Var2; int iVar3; int iVar4; stat sStack_80; iVar3 = 1; if (param_2 == 4) { iVar3 = fstat(*(int *)this,&sStack_80); iVar4 = 0; if ((iVar3 == 0) && ((sStack_80.st_mode & 0xf000) == 0x8000)) { bVar1 = 0 < sStack_80.st_blocks; if (sStack_80.st_blocks == 0) { bVar1 = sStack_80.st_blksize != 0; } iVar4 = sStack_80.st_blksize; if (!bVar1) { iVar4 = 0; } } iVar3 = 2; if (iVar4 < -param_1) { return -1; } } else if (param_2 != 2) { if (param_2 != 1) { return -1; } iVar3 = 0; if (param_1 < 0) { return -1; } } _Var2 = lseek(*(int *)this,param_1,iVar3); return _Var2; } ### FUNC _M_mmap @ 0004e92a /* std::_Filebuf_base::_M_mmap(long, long) */ void * __thiscall std::_Filebuf_base::_M_mmap(_Filebuf_base *this,long param_1,long param_2) { void *__addr; __off_t _Var1; void *pvVar2; __addr = mmap((void *)0x0,param_2,1,2,*(int *)this,param_1); pvVar2 = (void *)0x0; if (__addr != (void *)0xffffffff) { _Var1 = lseek(*(int *)this,param_2 + param_1,0); pvVar2 = __addr; if (_Var1 < 0) { munmap(__addr,param_2); pvVar2 = (void *)0x0; } } return pvVar2; } ### FUNC _M_unmap @ 0004e97a /* std::_Filebuf_base::_M_unmap(void*, long) */ void __thiscall std::_Filebuf_base::_M_unmap(_Filebuf_base *this,void *param_1,long param_2) { munmap(param_1,param_2); return; } ### FUNC _M_doit @ 0004e988 /* WARNING: Type propagation algorithm not settling */ /* std::_Underflow >::_M_doit(std::filebuf*) */ uint std::_Underflow>::_M_doit(filebuf *param_1) { bool bVar1; __off_t _Var2; int iVar3; void *__addr; uint uVar4; byte *pbVar5; int extraout_r1; int extraout_r1_00; int iVar6; size_t __len; stat sStack_80; if (param_1[0x2f] == (filebuf)0x0) { if (param_1[0x28] == (filebuf)0x0) { return 0xffffffff; } if (-1 < (int)((uint)(byte)param_1[0x24] << 0x1c)) { return 0xffffffff; } if (param_1[0x30] != (filebuf)0x0) { return 0xffffffff; } if (param_1[0x31] != (filebuf)0x0) { return 0xffffffff; } if (*(int *)(param_1 + 0x34) == 0) { iVar6 = _Filebuf_base::_M_page_size + 0xfff; __aeabi_uidivmod(); iVar6 = FUN_000352a0(param_1,0,iVar6 - extraout_r1); if (iVar6 != 1) { return 0xffffffff; } } *(undefined4 *)(param_1 + 0x44) = *(undefined4 *)(param_1 + 0x3c); *(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(param_1 + 0x3c); *(undefined4 *)(param_1 + 0x50) = *(undefined4 *)(param_1 + 0x4c); param_1[0x2f] = (filebuf)0x1; } else if (param_1[0x32] != (filebuf)0x0) { pbVar5 = *(byte **)(param_1 + 0x60); *(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_1 + 0x5c); *(byte **)(param_1 + 8) = pbVar5; *(byte **)(param_1 + 0xc) = *(byte **)(param_1 + 100); param_1[0x32] = (filebuf)0x0; if (pbVar5 != *(byte **)(param_1 + 100)) { return (uint)*pbVar5; } } if ((param_1[0x2a] == (filebuf)0x0) || (param_1[0x2d] == (filebuf)0x0)) goto LAB_0004eb1c; if (*(void **)(param_1 + 0x54) != (void *)0x0) { munmap(*(void **)(param_1 + 0x54),*(size_t *)(param_1 + 0x58)); } iVar6 = 0; _Var2 = lseek(*(int *)(param_1 + 0x20),0,1); iVar3 = fstat(*(int *)(param_1 + 0x20),&sStack_80); if (iVar3 == 0) { if ((sStack_80.st_mode & 0xf000) == 0x8000) { bVar1 = 0 < sStack_80.st_blocks; if (sStack_80.st_blocks == 0) { bVar1 = sStack_80.st_blksize != 0; } iVar6 = sStack_80.st_blksize; if (!bVar1) { iVar6 = 0; } } if (_Var2 < iVar6) goto LAB_0004ea9e; LAB_0004eb18: *(undefined4 *)(param_1 + 0x54) = 0; } else { if (-1 < _Var2) goto LAB_0004eb18; LAB_0004ea9e: if ((_Var2 < 0) || (iVar6 < 1)) goto LAB_0004eb18; __aeabi_uidivmod(_Var2,_Filebuf_base::_M_page_size); iVar3 = _Var2 - extraout_r1_00; __len = iVar6 - iVar3; if (0xfffff < iVar6 - iVar3) { __len = 0x100000; } *(size_t *)(param_1 + 0x58) = __len; __addr = mmap((void *)0x0,__len,1,2,*(int *)(param_1 + 0x20),iVar3); if (__addr == (void *)0xffffffff) goto LAB_0004eb18; _Var2 = lseek(*(int *)(param_1 + 0x20),__len + iVar3,0); if (_Var2 < 0) { munmap(__addr,__len); goto LAB_0004eb18; } *(void **)(param_1 + 0x54) = __addr; if (__addr != (void *)0x0) { *(void **)(param_1 + 4) = __addr; *(int *)(param_1 + 8) = (int)__addr + extraout_r1_00; *(int *)(param_1 + 0xc) = (int)__addr + *(int *)(param_1 + 0x58); return (uint)*(byte *)((int)__addr + extraout_r1_00); } } *(undefined4 *)(param_1 + 0x58) = 0; LAB_0004eb1c: uVar4 = FUN_0004eb44(param_1); return uVar4; } ### FUNC FUN_0004eb44 @ 0004eb44 uint FUN_0004eb44(int param_1) { byte *pbVar1; uint uVar2; int iVar3; void *__buf; int iVar4; byte *local_1c; int local_18; *(undefined4 *)(param_1 + 0x4c) = *(undefined4 *)(param_1 + 0x50); __buf = *(void **)(param_1 + 0x3c); uVar2 = *(uint *)(param_1 + 0x44); if ((uVar2 < *(uint *)(param_1 + 0x48)) && (iVar4 = *(uint *)(param_1 + 0x48) - uVar2, iVar4 != 0) ) { __aeabi_memmove(__buf,uVar2,iVar4); __buf = (void *)((int)__buf + iVar4); } *(void **)(param_1 + 0x48) = __buf; iVar4 = read(*(int *)(param_1 + 0x20),__buf,*(int *)(param_1 + 0x40) - (int)__buf); if (-1 < iVar4) { while( true ) { iVar3 = *(int *)(param_1 + 0x48) + iVar4; *(int *)(param_1 + 0x48) = iVar3; if (*(int *)(param_1 + 0x3c) == iVar3) break; iVar3 = (**(code **)(**(int **)(param_1 + 0x68) + 0xc)) (*(int **)(param_1 + 0x68),param_1 + 0x50,*(int *)(param_1 + 0x3c),iVar3, &local_18,*(undefined4 *)(param_1 + 0x34),*(undefined4 *)(param_1 + 0x38), &local_1c); if (iVar3 == 2) { LAB_0004ec20: if (*(void **)(param_1 + 0x54) != (void *)0x0) { munmap(*(void **)(param_1 + 0x54),*(size_t *)(param_1 + 0x58)); *(undefined4 *)(param_1 + 0x54) = 0; *(undefined4 *)(param_1 + 0x58) = 0; } *(undefined1 *)(param_1 + 0x30) = 0; *(undefined1 *)(param_1 + 0x2f) = 0; *(undefined1 *)(param_1 + 0x31) = 1; *(undefined4 *)(param_1 + 4) = 0; *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0xc) = 0; return 0xffffffff; } if (iVar3 == 3) { pbVar1 = *(byte **)(param_1 + 0x3c); local_1c = *(byte **)(param_1 + 0x48); *(byte **)(param_1 + 0x44) = local_1c; LAB_0004ec56: *(byte **)(param_1 + 4) = pbVar1; *(byte **)(param_1 + 8) = pbVar1; *(byte **)(param_1 + 0xc) = local_1c; return (uint)*pbVar1; } pbVar1 = *(byte **)(param_1 + 0x34); if (((local_1c != pbVar1) && (local_18 == *(int *)(param_1 + 0x3c))) || ((*(char *)(param_1 + 0x2c) != '\0' && (((int)local_1c - (int)pbVar1) * *(int *)(param_1 + 0x6c) - (local_18 - *(int *)(param_1 + 0x3c)) != 0)))) goto LAB_0004ec20; if (local_1c != pbVar1) { *(int *)(param_1 + 0x44) = local_18; goto LAB_0004ec56; } if (*(int *)(param_1 + 0x70) <= local_18 - *(int *)(param_1 + 0x3c)) goto LAB_0004ec20; if ((iVar4 < 1) || (iVar4 = read(*(int *)(param_1 + 0x20),*(void **)(param_1 + 0x48), *(int *)(param_1 + 0x40) - (int)*(void **)(param_1 + 0x48)), iVar4 < 0)) break; } } *(undefined4 *)(param_1 + 4) = 0; *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0xc) = 0; return 0xffffffff; } ### FUNC FUN_0004ec64 @ 0004ec64 undefined4 * FUN_0004ec64(undefined4 *param_1,undefined4 param_2) { param_1[6] = 0; param_1[5] = 0; param_1[4] = 0; param_1[3] = 0; param_1[2] = 0; param_1[1] = 0; *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::locale((locale *)(param_1 + 7)); param_1[8] = param_2; *param_1 = &PTR_FUN_0004eca0_1_00069df8; return param_1; } ### FUNC FUN_0004eca0 @ 0004eca0 undefined4 * FUN_0004eca0(undefined4 *param_1) { *param_1 = &PTR_FUN_0004eca0_1_00069df8; fflush((FILE *)param_1[8]); *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); return param_1; } ### FUNC FUN_0004ecd0 @ 0004ecd0 void FUN_0004ecd0(undefined4 *param_1) { *param_1 = &PTR_FUN_0004eca0_1_00069df8; fflush((FILE *)param_1[8]); *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_0004ed04 @ 0004ed04 int FUN_0004ed04(int param_1,char *param_2,size_t param_3) { int __modes; __modes = 2; if (param_2 != (char *)0x0 || param_3 != 0) { __modes = 0; } setvbuf(*(FILE **)(param_1 + 0x20),param_2,__modes,param_3); return param_1; } ### FUNC FUN_0004ed24 @ 0004ed24 void FUN_0004ed24(fpos_t *param_1,int param_2,long param_3,int param_4) { int iVar1; iVar1 = 0; if (param_4 == 1) { LAB_0004ed44: iVar1 = fseek(*(FILE **)(param_2 + 0x20),param_3,iVar1); if (iVar1 == 0) { fgetpos(*(FILE **)(param_2 + 0x20),param_1); goto LAB_0004ed62; } } else { if (param_4 == 4) { iVar1 = 2; goto LAB_0004ed44; } if (param_4 == 2) { iVar1 = 1; goto LAB_0004ed44; } } param_1->__pos = -1; LAB_0004ed62: (param_1->__state).__count = 0; return; } ### FUNC FUN_0004ed6a @ 0004ed6a void FUN_0004ed6a(__off_t *param_1,int param_2,__off_t param_3,__off_t param_4) { int iVar1; __off_t local_18; local_18 = param_3; iVar1 = fsetpos(*(FILE **)(param_2 + 0x20),(fpos_t *)&local_18); if (iVar1 != 0) { *param_1 = -1; param_1[1] = 0; return; } *param_1 = param_3; param_1[1] = param_4; return; } ### FUNC FUN_0004ed98 @ 0004ed98 undefined4 FUN_0004ed98(int param_1) { int iVar1; undefined4 uVar2; iVar1 = fflush(*(FILE **)(param_1 + 0x20)); uVar2 = 0xffffffff; if (iVar1 == 0) { uVar2 = 0; } return uVar2; } ### FUNC FUN_0004edb0 @ 0004edb0 void FUN_0004edb0(undefined4 *param_1) { *param_1 = &PTR_FUN_0004eca0_1_00069df8; fflush((FILE *)param_1[8]); *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_0004ede8 @ 0004ede8 int FUN_0004ede8(int param_1) { int __c; int iVar1; __c = getc(*(FILE **)(param_1 + 0x20)); iVar1 = -1; if (__c != -1) { ungetc(__c,*(FILE **)(param_1 + 0x20)); iVar1 = __c; } return iVar1; } ### FUNC FUN_0004ee0a @ 0004ee0a void FUN_0004ee0a(int param_1) { getc(*(FILE **)(param_1 + 0x20)); return; } ### FUNC FUN_0004ee16 @ 0004ee16 int FUN_0004ee16(int param_1,int param_2) { int iVar1; if (param_2 != -1) { iVar1 = ungetc(param_2,*(FILE **)(param_1 + 0x20)); return iVar1; } if (*(uint *)(param_1 + 4) < *(uint *)(param_1 + 8)) { *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) - 1; return 0; } return -1; } ### FUNC FUN_0004ee44 @ 0004ee44 void FUN_0004ee44(undefined4 *param_1) { *param_1 = &PTR_FUN_0004eca0_1_00069df8; fflush((FILE *)param_1[8]); *param_1 = &PTR_FUN_00035128_1_000690ec; std::locale::~locale((locale *)(param_1 + 7)); operator_delete(param_1); return; } ### FUNC FUN_0004ee7e @ 0004ee7e int FUN_0004ee7e(int param_1,int param_2) { int iVar1; int iVar2; int iVar3; if (param_2 == -1) { iVar2 = *(int *)(param_1 + 0x10); iVar3 = *(int *)(param_1 + 0x14); iVar1 = 0; if (iVar3 != iVar2) { fflush(*(FILE **)(param_1 + 0x20)); iVar1 = -1; if (*(int *)(param_1 + 0x14) - *(int *)(param_1 + 0x10) < iVar3 - iVar2) { return 0; } } } else { iVar1 = putc(param_2,*(FILE **)(param_1 + 0x20)); } return iVar1; } ### FUNC ~codecvt @ 0004eeb8 /* std::codecvt::~codecvt() */ void __thiscall std::codecvt::~codecvt(codecvt *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~codecvt @ 0004eec2 /* std::codecvt::~codecvt() */ void __thiscall std::codecvt::~codecvt(codecvt *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_length @ 0004eee2 /* std::codecvt::do_length(mbstate_t&, char const*, char const*, unsigned int) const */ uint __thiscall std::codecvt::do_length (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, uint param_4) { if ((uint)((int)param_3 - (int)param_2) <= param_4) { param_4 = (int)param_3 - (int)param_2; } return param_4; } ### FUNC do_max_length @ 0004eeee /* std::codecvt::do_max_length() const */ undefined4 std::codecvt::do_max_length(void) { return 1; } ### FUNC do_always_noconv @ 0004eef2 /* std::codecvt::do_always_noconv() const */ undefined4 std::codecvt::do_always_noconv(void) { return 1; } ### FUNC do_encoding @ 0004eef6 /* std::codecvt::do_encoding() const */ undefined4 std::codecvt::do_encoding(void) { return 1; } ### FUNC do_unshift @ 0004eefa /* std::codecvt::do_unshift(mbstate_t&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt::do_unshift (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, char **param_4) { *param_4 = param_2; return 3; } ### FUNC do_in @ 0004ef02 /* std::codecvt::do_in(mbstate_t&, char const*, char const*, char const*&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt::do_in (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, char **param_4,char *param_5,char *param_6,char **param_7) { *param_4 = param_2; *param_7 = param_5; return 3; } ### FUNC do_out @ 0004ef10 /* std::codecvt::do_out(mbstate_t&, char const*, char const*, char const*&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt::do_out (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, char **param_4,char *param_5,char *param_6,char **param_7) { *param_4 = param_2; *param_7 = param_5; return 3; } ### FUNC ~codecvt @ 0004ef1e /* std::codecvt::~codecvt() */ void __thiscall std::codecvt::~codecvt(codecvt *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~codecvt @ 0004ef28 /* std::codecvt::~codecvt() */ void __thiscall std::codecvt::~codecvt(codecvt *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_out @ 0004ef48 /* std::codecvt::do_out(mbstate_t&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt::do_out (codecvt *this,mbstate_t *param_1,wchar_t *param_2, wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7) { int iVar1; char *pcVar2; int iVar3; wchar_t *pwVar4; wchar_t wVar5; iVar1 = (int)param_3 - (int)param_2 >> 2; iVar3 = (int)param_6 - (int)param_5; if (iVar1 <= (int)param_6 - (int)param_5) { iVar3 = iVar1; } pwVar4 = param_2 + iVar3; if (0 < iVar3 * 4) { iVar1 = iVar3 + 1; pcVar2 = param_5; do { wVar5 = *param_2; param_2 = param_2 + 1; *pcVar2 = (char)wVar5; iVar1 = iVar1 + -1; pcVar2 = pcVar2 + 1; } while (1 < iVar1); } *param_4 = pwVar4; *param_7 = param_5 + iVar3; return 0; } ### FUNC do_in @ 0004ef8e /* std::codecvt::do_in(mbstate_t&, char const*, char const*, char const*&, wchar_t*, wchar_t*, wchar_t*&) const */ undefined4 __thiscall std::codecvt::do_in (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, char **param_4,wchar_t *param_5,wchar_t *param_6,wchar_t **param_7) { char *pcVar1; wchar_t *pwVar2; int iVar3; int iVar4; iVar3 = (int)param_6 - (int)param_5 >> 2; if ((int)param_3 - (int)param_2 <= iVar3) { iVar3 = (int)param_3 - (int)param_2; } pcVar1 = param_2 + iVar3; if (0 < iVar3) { iVar4 = iVar3 + 1; pwVar2 = param_5; do { *pwVar2 = (uint)(byte)*param_2; pwVar2 = pwVar2 + 1; iVar4 = iVar4 + -1; param_2 = (char *)((byte *)param_2 + 1); } while (1 < iVar4); } *param_4 = pcVar1; *param_7 = param_5 + iVar3; return 0; } ### FUNC do_unshift @ 0004efd4 /* std::codecvt::do_unshift(mbstate_t&, char*, char*, char*&) const */ undefined4 __thiscall std::codecvt::do_unshift (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, char **param_4) { *param_4 = param_2; return 3; } ### FUNC do_encoding @ 0004efdc /* std::codecvt::do_encoding() const */ undefined4 std::codecvt::do_encoding(void) { return 1; } ### FUNC do_always_noconv @ 0004efe0 /* std::codecvt::do_always_noconv() const */ undefined4 std::codecvt::do_always_noconv(void) { return 1; } ### FUNC do_length @ 0004efe4 /* std::codecvt::do_length(mbstate_t&, char const*, char const*, unsigned int) const */ uint __thiscall std::codecvt::do_length (codecvt *this,mbstate_t *param_1,char *param_2,char *param_3, uint param_4) { if ((uint)((int)param_3 - (int)param_2) <= param_4) { param_4 = (int)param_3 - (int)param_2; } return param_4; } ### FUNC do_max_length @ 0004eff0 /* std::codecvt::do_max_length() const */ undefined4 std::codecvt::do_max_length(void) { return 1; } ### FUNC ~collate @ 0004eff4 /* std::collate::~collate() */ void __thiscall std::collate::~collate(collate *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~collate @ 0004effe /* std::collate::~collate() */ void __thiscall std::collate::~collate(collate *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_compare @ 0004f01e /* std::collate::do_compare(char const*, char const*, char const*, char const*) const */ undefined4 __thiscall std::collate::do_compare (collate *this,char *param_1,char *param_2,char *param_3,char *param_4) { int iVar1; size_t __n; undefined4 uVar2; size_t sVar3; size_t sVar4; sVar3 = (int)param_4 - (int)param_3; sVar4 = (int)param_2 - (int)param_1; __n = sVar3; if ((int)sVar4 <= (int)sVar3) { __n = sVar4; } iVar1 = memcmp(param_1,param_3,__n); if (iVar1 == 0) { uVar2 = 0; if ((sVar4 != sVar3) && (uVar2 = 0xffffffff, (int)sVar3 <= (int)sVar4)) { uVar2 = 1; } } else { uVar2 = 0xffffffff; if (0 < iVar1) { uVar2 = 1; } } return uVar2; } ### FUNC do_transform @ 0004f05c /* std::collate::do_transform(char const*, char const*) const */ void std::collate::do_transform(char *param_1,char *param_2) { FUN_0004f078(); return; } ### FUNC FUN_0004f078 @ 0004f078 undefined4 * FUN_0004f078(undefined4 *param_1,int param_2,int param_3) { undefined4 *puVar1; int iVar2; uint uVar3; uint local_18; param_1[4] = param_1; param_1[5] = param_1; iVar2 = param_3 - param_2; uVar3 = iVar2 + 1; if (uVar3 != 0) { puVar1 = param_1; if (0x10 < uVar3) { local_18 = uVar3; if (uVar3 < 0x81) { puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); uVar3 = local_18; } else { puVar1 = (undefined4 *)operator_new(uVar3); } param_1[4] = puVar1; param_1[5] = puVar1; *param_1 = (undefined1 *)((int)puVar1 + uVar3); } if (param_3 != param_2) { __aeabi_memcpy(puVar1,param_2,iVar2); puVar1 = (undefined4 *)((int)puVar1 + iVar2); } param_1[4] = puVar1; *(undefined1 *)puVar1 = 0; return param_1; } /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } ### FUNC do_hash @ 0004f114 /* std::collate::do_hash(char const*, char const*) const */ int __thiscall std::collate::do_hash(collate *this,char *param_1,char *param_2) { int iVar1; iVar1 = 0; if (param_1 < param_2) { iVar1 = 0; do { iVar1 = iVar1 * 5 + (uint)(byte)*param_1; param_1 = (char *)((byte *)param_1 + 1); } while (param_2 != param_1); } return iVar1; } ### FUNC ~collate @ 0004f12c /* std::collate::~collate() */ void __thiscall std::collate::~collate(collate *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~collate @ 0004f136 /* std::collate::~collate() */ void __thiscall std::collate::~collate(collate *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_compare @ 0004f156 /* std::collate::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*) const */ undefined4 __thiscall std::collate::do_compare (collate *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3, wchar_t *param_4) { undefined4 uVar1; uint uVar2; uint uVar3; int iVar4; int iVar5; int iVar6; bool bVar7; bool bVar8; wchar_t *local_1c; bVar7 = param_3 == param_4; local_1c = param_1; if ((param_1 != param_2) && (param_3 != param_4)) { iVar6 = (int)param_3 + (4 - (int)param_4); iVar5 = 0; do { uVar3 = *(uint *)((int)param_3 + -iVar5); uVar2 = *(uint *)((int)param_1 + -iVar5); if (uVar2 < uVar3) { return 0xffffffff; } if (uVar3 < uVar2) { return 1; } bVar7 = iVar6 == iVar5; iVar4 = iVar5 + -4; } while ((iVar6 != iVar5) && (bVar8 = (int)param_1 + (4 - (int)param_2) != iVar5, iVar5 = iVar4, bVar8)); local_1c = (wchar_t *)((int)param_1 - iVar4); } uVar1 = 0xffffffff; if ((bVar7) && (uVar1 = 1, local_1c == param_2)) { uVar1 = 0; } return uVar1; } ### FUNC do_transform @ 0004f1d8 /* std::collate::do_transform(wchar_t const*, wchar_t const*) const */ void std::collate::do_transform(wchar_t *param_1,wchar_t *param_2) { FUN_0004f1f4(); return; } ### FUNC FUN_0004f1f4 @ 0004f1f4 int * FUN_0004f1f4(int *param_1,int param_2,int param_3) { uint uVar1; int *piVar2; undefined4 uVar3; int iVar4; uint local_18; param_1[0x10] = (int)param_1; param_1[0x11] = (int)param_1; iVar4 = param_3 - param_2; uVar1 = (iVar4 >> 2) + 1; if (0x3ffffffe < (uint)(iVar4 >> 2)) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } piVar2 = param_1; if (0x10 < uVar1) { if (0x3fffffff < uVar1) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } uVar1 = uVar1 * 4; local_18 = uVar1; if (uVar1 < 0x81) { piVar2 = (int *)std::__node_alloc::_M_allocate(&local_18); uVar1 = local_18; } else { piVar2 = (int *)operator_new(uVar1); } param_1[0x10] = (int)piVar2; param_1[0x11] = (int)piVar2; *param_1 = (int)piVar2 + (uVar1 & 0xfffffffc); } if (param_3 != param_2) { __aeabi_memcpy(piVar2,param_2,iVar4); piVar2 = (int *)((int)piVar2 + iVar4); } param_1[0x10] = (int)piVar2; *piVar2 = 0; return param_1; } ### FUNC do_hash @ 0004f2c8 /* std::collate::do_hash(wchar_t const*, wchar_t const*) const */ int __thiscall std::collate::do_hash(collate *this,wchar_t *param_1,wchar_t *param_2) { int iVar1; wchar_t wVar2; iVar1 = 0; if (param_1 < param_2) { iVar1 = 0; do { wVar2 = *param_1; param_1 = param_1 + 1; iVar1 = wVar2 + iVar1 * 5; } while (param_1 < param_2); } return iVar1; } ### FUNC classic_table @ 0004f2e0 /* std::ctype::classic_table() */ undefined * std::ctype::classic_table(void) { return &DAT_00065b4c; } ### FUNC ctype @ 0004f2ec /* std::ctype::ctype(std::ctype_base::mask const*, bool, unsigned int) */ ctype * __thiscall std::ctype::ctype(ctype *this,mask *param_1,bool param_2,uint param_3) { mask *pmVar1; *(uint *)(this + 4) = (uint)(param_3 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__ctype_00069fe8; pmVar1 = param_1; if (param_1 == (mask *)0x0) { pmVar1 = &DAT_00065b4c; } *(mask **)(this + 0xc) = pmVar1; this[0x10] = (ctype)(param_1 != (mask *)0x0 && param_2); return this; } ### FUNC ~ctype @ 0004f344 /* std::ctype::~ctype() */ void __thiscall std::ctype::~ctype(ctype *this) { *(undefined ***)this = &PTR__ctype_00069fe8; if ((this[0x10] != (ctype)0x0) && (*(void **)(this + 0xc) != (void *)0x0)) { operator_delete__(*(void **)(this + 0xc)); } locale::facet::~facet((facet *)this); return; } ### FUNC ~ctype @ 0004f370 /* std::ctype::~ctype() */ void __thiscall std::ctype::~ctype(ctype *this) { *(undefined ***)this = &PTR__ctype_00069fe8; if ((this[0x10] != (ctype)0x0) && (*(void **)(this + 0xc) != (void *)0x0)) { operator_delete__(*(void **)(this + 0xc)); } locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC scan_is @ 0004f3b0 /* std::ctype::scan_is(std::ctype_base::mask, char const*, char const*) const */ byte * __thiscall std::ctype::scan_is(ctype *this,uint param_2,byte *param_3,byte *param_4) { int iVar1; int iVar2; iVar2 = (int)param_4 - (int)param_3 >> 2; iVar1 = *(int *)(this + 0xc); if (0 < iVar2) { iVar2 = iVar2 + 1; do { if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { return param_3; } if ((*(uint *)(iVar1 + (uint)param_3[1] * 4) & param_2) != 0) { return param_3 + 1; } if ((*(uint *)(iVar1 + (uint)param_3[2] * 4) & param_2) != 0) { return param_3 + 2; } if ((*(uint *)(iVar1 + (uint)param_3[3] * 4) & param_2) != 0) { return param_3 + 3; } iVar2 = iVar2 + -1; param_3 = param_3 + 4; } while (1 < iVar2); } iVar2 = (int)param_4 - (int)param_3; if (iVar2 != 1) { if (iVar2 != 2) { if (iVar2 != 3) { return param_4; } if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { return param_3; } param_3 = param_3 + 1; } if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { return param_3; } param_3 = param_3 + 1; } if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { return param_4; } return param_3; } ### FUNC scan_not @ 0004f43c /* std::ctype::scan_not(std::ctype_base::mask, char const*, char const*) const */ byte * __thiscall std::ctype::scan_not(ctype *this,uint param_2,byte *param_3,byte *param_4) { int iVar1; int iVar2; iVar2 = (int)param_4 - (int)param_3 >> 2; iVar1 = *(int *)(this + 0xc); if (0 < iVar2) { iVar2 = iVar2 + 1; do { if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { return param_3; } if ((*(uint *)(iVar1 + (uint)param_3[1] * 4) & param_2) == 0) { return param_3 + 1; } if ((*(uint *)(iVar1 + (uint)param_3[2] * 4) & param_2) == 0) { return param_3 + 2; } if ((*(uint *)(iVar1 + (uint)param_3[3] * 4) & param_2) == 0) { return param_3 + 3; } iVar2 = iVar2 + -1; param_3 = param_3 + 4; } while (1 < iVar2); } iVar2 = (int)param_4 - (int)param_3; if (iVar2 != 1) { if (iVar2 != 2) { if (iVar2 != 3) { return param_4; } if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { return param_3; } param_3 = param_3 + 1; } if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) { return param_3; } param_3 = param_3 + 1; } if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) { return param_4; } return param_3; } ### FUNC do_toupper @ 0004f4c8 /* std::ctype::do_toupper(char) const */ undefined1 __thiscall std::ctype::do_toupper(ctype *this,char param_1) { return (&DAT_00065f4c)[param_1]; } ### FUNC do_tolower @ 0004f4d4 /* std::ctype::do_tolower(char) const */ undefined1 __thiscall std::ctype::do_tolower(ctype *this,char param_1) { return (&DAT_0006604c)[param_1]; } ### FUNC do_toupper @ 0004f4e0 /* std::ctype::do_toupper(char*, char const*) const */ char * __thiscall std::ctype::do_toupper(ctype *this,char *param_1,char *param_2) { if (param_1 < param_2) { do { *param_1 = (&DAT_00065f4c)[(byte)*param_1]; param_1 = (char *)((byte *)param_1 + 1); } while (param_2 != param_1); } return param_2; } ### FUNC do_tolower @ 0004f4fc /* std::ctype::do_tolower(char*, char const*) const */ char * __thiscall std::ctype::do_tolower(ctype *this,char *param_1,char *param_2) { if (param_1 < param_2) { do { *param_1 = (&DAT_0006604c)[(byte)*param_1]; param_1 = (char *)((byte *)param_1 + 1); } while (param_2 != param_1); } return param_2; } ### FUNC do_widen @ 0004f518 /* std::ctype::do_widen(char) const */ int __thiscall std::ctype::do_widen(ctype *this,char param_1) { return (int)param_1; } ### FUNC do_widen @ 0004f51c /* std::ctype::do_widen(char const*, char const*, char*) const */ char * __thiscall std::ctype::do_widen(ctype *this,char *param_1,char *param_2,char *param_3) { if (param_2 != param_1) { __aeabi_memmove(param_3); } return param_2; } ### FUNC do_narrow @ 0004f530 /* std::ctype::do_narrow(char, char) const */ int std::ctype::do_narrow(char param_1,char param_2) { return (int)param_2; } ### FUNC do_narrow @ 0004f534 /* std::ctype::do_narrow(char const*, char const*, char, char*) const */ char * __thiscall std::ctype::do_narrow (ctype *this,char *param_1,char *param_2,char param_3,char *param_4) { if ((int)param_2 - (int)param_1 != 0) { __aeabi_memmove(param_4,param_1,(int)param_2 - (int)param_1,(int)param_3); } return param_2; } ### FUNC ~ctype @ 0004f548 /* std::ctype::~ctype() */ void __thiscall std::ctype::~ctype(ctype *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~ctype @ 0004f552 /* std::ctype::~ctype() */ void __thiscall std::ctype::~ctype(ctype *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_is @ 0004f574 /* std::ctype::do_is(std::ctype_base::mask, wchar_t) const */ undefined4 __thiscall std::ctype::do_is(undefined4 param_1,uint param_2,uint param_3) { undefined4 uVar1; uVar1 = 0; if (param_3 < 0x100) { uVar1 = 1; if ((*(uint *)(&DAT_00065b4c + param_3 * 4) & param_2) == 0) { uVar1 = 0; } } return uVar1; } ### FUNC do_is @ 0004f594 /* std::ctype::do_is(wchar_t const*, wchar_t const*, std::ctype_base::mask*) const */ wchar_t * __thiscall std::ctype::do_is(ctype *this,wchar_t *param_1,wchar_t *param_2,mask *param_3) { undefined4 uVar1; if (param_1 < param_2) { do { uVar1 = 0; if ((uint)*param_1 < 0x100) { uVar1 = *(undefined4 *)(&DAT_00065b4c + *param_1 * 4); } *(undefined4 *)param_3 = uVar1; param_3 = (mask *)((int)param_3 + 4); param_1 = param_1 + 1; } while (param_1 < param_2); } return param_2; } ### FUNC do_scan_is @ 0004f5bc /* std::ctype::do_scan_is(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */ uint * __thiscall std::ctype::do_scan_is(undefined4 param_1,uint param_2,uint *param_3,uint *param_4) { int iVar1; iVar1 = (int)param_4 - (int)param_3 >> 4; if (0 < iVar1) { iVar1 = iVar1 + 1; do { if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { return param_3; } if ((param_3[1] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[1] * 4) & param_2) != 0)) { return param_3 + 1; } if ((param_3[2] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[2] * 4) & param_2) != 0)) { return param_3 + 2; } if ((param_3[3] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[3] * 4) & param_2) != 0)) { return param_3 + 3; } iVar1 = iVar1 + -1; param_3 = param_3 + 4; } while (1 < iVar1); } iVar1 = (int)param_4 - (int)param_3 >> 2; if (iVar1 != 1) { if (iVar1 != 2) { if (iVar1 != 3) { return param_4; } if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { return param_3; } param_3 = param_3 + 1; } if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { return param_3; } param_3 = param_3 + 1; } if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) { return param_3; } return param_4; } ### FUNC do_scan_not @ 0004f6b4 /* std::ctype::do_scan_not(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */ uint * __thiscall std::ctype::do_scan_not(undefined4 param_1,uint param_2,uint *param_3,uint *param_4) { int iVar1; iVar1 = (int)param_4 - (int)param_3 >> 4; if (0 < iVar1) { iVar1 = iVar1 + 1; do { if (0xff < *param_3) { return param_3; } if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) { return param_3; } if (0xff < param_3[1]) { return param_3 + 1; } if ((*(uint *)(&DAT_00065b4c + param_3[1] * 4) & param_2) == 0) { return param_3 + 1; } if (0xff < param_3[2]) { return param_3 + 2; } if ((*(uint *)(&DAT_00065b4c + param_3[2] * 4) & param_2) == 0) { return param_3 + 2; } if (0xff < param_3[3]) { return param_3 + 3; } if ((*(uint *)(&DAT_00065b4c + param_3[3] * 4) & param_2) == 0) { return param_3 + 3; } iVar1 = iVar1 + -1; param_3 = param_3 + 4; } while (1 < iVar1); } iVar1 = (int)param_4 - (int)param_3 >> 2; if (iVar1 != 1) { if (iVar1 != 2) { if (iVar1 != 3) { return param_4; } if (0xff < *param_3) { return param_3; } if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) { return param_3; } param_3 = param_3 + 1; } if (0xff < *param_3) { return param_3; } if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) { return param_3; } param_3 = param_3 + 1; } if (0xff < *param_3) { return param_3; } if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0) { return param_4; } return param_3; } ### FUNC do_toupper @ 0004f7bc /* std::ctype::do_toupper(wchar_t) const */ wchar_t __thiscall std::ctype::do_toupper(ctype *this,wchar_t param_1) { if ((uint)param_1 < 0x100) { param_1 = (wchar_t)(byte)(&DAT_00065f4c)[param_1]; } return param_1; } ### FUNC do_toupper @ 0004f7d0 /* std::ctype::do_toupper(wchar_t*, wchar_t const*) const */ wchar_t * __thiscall std::ctype::do_toupper(ctype *this,wchar_t *param_1,wchar_t *param_2) { wchar_t wVar1; if (param_1 < param_2) { do { wVar1 = *param_1; if ((uint)wVar1 < 0x100) { wVar1 = (wchar_t)(byte)(&DAT_00065f4c)[wVar1]; } *param_1 = wVar1; param_1 = param_1 + 1; } while (param_1 < param_2); } return param_2; } ### FUNC do_tolower @ 0004f7f0 /* std::ctype::do_tolower(wchar_t) const */ wchar_t __thiscall std::ctype::do_tolower(ctype *this,wchar_t param_1) { if ((uint)param_1 < 0x100) { param_1 = (wchar_t)(byte)(&DAT_0006604c)[param_1]; } return param_1; } ### FUNC do_tolower @ 0004f804 /* std::ctype::do_tolower(wchar_t*, wchar_t const*) const */ wchar_t * __thiscall std::ctype::do_tolower(ctype *this,wchar_t *param_1,wchar_t *param_2) { wchar_t wVar1; if (param_1 < param_2) { do { wVar1 = *param_1; if ((uint)wVar1 < 0x100) { wVar1 = (wchar_t)(byte)(&DAT_0006604c)[wVar1]; } *param_1 = wVar1; param_1 = param_1 + 1; } while (param_1 < param_2); } return param_2; } ### FUNC do_widen @ 0004f824 /* std::ctype::do_widen(char) const */ int __thiscall std::ctype::do_widen(ctype *this,char param_1) { return (int)param_1; } ### FUNC do_widen @ 0004f828 /* std::ctype::do_widen(char const*, char const*, wchar_t*) const */ char * __thiscall std::ctype::do_widen(ctype *this,char *param_1,char *param_2,wchar_t *param_3) { if (param_1 != param_2) { do { *param_3 = (uint)(byte)*param_1; param_3 = param_3 + 1; param_1 = (char *)((byte *)param_1 + 1); } while (param_2 != param_1); } return param_2; } ### FUNC do_narrow @ 0004f83a /* std::ctype::do_narrow(wchar_t, char) const */ wchar_t __thiscall std::ctype::do_narrow(ctype *this,wchar_t param_1,char param_2) { wchar_t wVar1; wVar1 = (int)param_2; if ((param_1 & 0xffU) == param_1) { wVar1 = param_1 & 0xffU; } return wVar1; } ### FUNC do_narrow @ 0004f848 /* std::ctype::do_narrow(wchar_t const*, wchar_t const*, char, char*) const */ wchar_t * __thiscall std::ctype::do_narrow (ctype *this,wchar_t *param_1,wchar_t *param_2,char param_3,char *param_4) { char cVar1; wchar_t wVar2; if (param_1 != param_2) { do { wVar2 = *param_1; param_1 = param_1 + 1; cVar1 = param_3; if ((wVar2 & 0xffU) == wVar2) { cVar1 = (char)wVar2; } *param_4 = cVar1; param_4 = param_4 + 1; } while (param_2 != param_1); } return param_2; } ### FUNC moneypunct @ 0004f870 /* std::moneypunct::moneypunct(unsigned int) */ moneypunct * __thiscall std::moneypunct::moneypunct(moneypunct *this,uint param_1) { *(uint *)(this + 4) = (uint)(param_1 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__moneypunct_0006a0a8; this[0xc] = (moneypunct)0x2; this[0xd] = (moneypunct)0x3; this[0xf] = (moneypunct)0x4; this[0xe] = (moneypunct)0x0; this[0x10] = (moneypunct)0x2; this[0x12] = (moneypunct)0x0; this[0x11] = (moneypunct)0x3; this[0x13] = (moneypunct)0x4; return this; } ### FUNC ~moneypunct @ 0004f8b4 /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~moneypunct @ 0004f8be /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004f8de /* std::moneypunct::do_decimal_point() const */ undefined4 std::moneypunct::do_decimal_point(void) { return 0x20; } ### FUNC do_thousands_sep @ 0004f8e2 /* std::moneypunct::do_thousands_sep() const */ undefined4 std::moneypunct::do_thousands_sep(void) { return 0x20; } ### FUNC do_grouping @ 0004f8e8 /* std::moneypunct::do_grouping() const */ void __thiscall std::moneypunct::do_grouping(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_curr_symbol @ 0004f904 /* std::moneypunct::do_curr_symbol() const */ void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_positive_sign @ 0004f920 /* std::moneypunct::do_positive_sign() const */ void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_negative_sign @ 0004f93c /* std::moneypunct::do_negative_sign() const */ void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_pos_format @ 0004f958 /* std::moneypunct::do_pos_format() const */ undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) { return *(undefined4 *)(this + 0xc); } ### FUNC do_neg_format @ 0004f96e /* std::moneypunct::do_neg_format() const */ undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) { return *(undefined4 *)(this + 0x10); } ### FUNC do_frac_digits @ 0004f984 /* std::moneypunct::do_frac_digits() const */ undefined4 std::moneypunct::do_frac_digits(void) { return 0; } ### FUNC moneypunct @ 0004f988 /* std::moneypunct::moneypunct(unsigned int) */ moneypunct * __thiscall std::moneypunct::moneypunct(moneypunct *this,uint param_1) { *(uint *)(this + 4) = (uint)(param_1 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__moneypunct_0006a0dc; this[0xc] = (moneypunct)0x2; this[0xd] = (moneypunct)0x3; this[0xf] = (moneypunct)0x4; this[0xe] = (moneypunct)0x0; this[0x10] = (moneypunct)0x2; this[0x12] = (moneypunct)0x0; this[0x11] = (moneypunct)0x3; this[0x13] = (moneypunct)0x4; return this; } ### FUNC ~moneypunct @ 0004f9cc /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~moneypunct @ 0004f9d6 /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004f9f6 /* std::moneypunct::do_decimal_point() const */ undefined4 std::moneypunct::do_decimal_point(void) { return 0x20; } ### FUNC do_thousands_sep @ 0004f9fa /* std::moneypunct::do_thousands_sep() const */ undefined4 std::moneypunct::do_thousands_sep(void) { return 0x20; } ### FUNC do_grouping @ 0004fa00 /* std::moneypunct::do_grouping() const */ void __thiscall std::moneypunct::do_grouping(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_curr_symbol @ 0004fa1c /* std::moneypunct::do_curr_symbol() const */ void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_positive_sign @ 0004fa38 /* std::moneypunct::do_positive_sign() const */ void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_negative_sign @ 0004fa54 /* std::moneypunct::do_negative_sign() const */ void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_pos_format @ 0004fa70 /* std::moneypunct::do_pos_format() const */ undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) { return *(undefined4 *)(this + 0xc); } ### FUNC do_neg_format @ 0004fa86 /* std::moneypunct::do_neg_format() const */ undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) { return *(undefined4 *)(this + 0x10); } ### FUNC do_frac_digits @ 0004fa9c /* std::moneypunct::do_frac_digits() const */ undefined4 std::moneypunct::do_frac_digits(void) { return 0; } ### FUNC moneypunct @ 0004faa0 /* std::moneypunct::moneypunct(unsigned int) */ moneypunct * __thiscall std::moneypunct::moneypunct(moneypunct *this,uint param_1) { *(uint *)(this + 4) = (uint)(param_1 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__moneypunct_0006a110; this[0xc] = (moneypunct)0x2; this[0xd] = (moneypunct)0x3; this[0xf] = (moneypunct)0x4; this[0xe] = (moneypunct)0x0; this[0x10] = (moneypunct)0x2; this[0x12] = (moneypunct)0x0; this[0x11] = (moneypunct)0x3; this[0x13] = (moneypunct)0x4; return this; } ### FUNC ~moneypunct @ 0004fae4 /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~moneypunct @ 0004faee /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004fb0e /* std::moneypunct::do_decimal_point() const */ undefined4 std::moneypunct::do_decimal_point(void) { return 0x20; } ### FUNC do_thousands_sep @ 0004fb12 /* std::moneypunct::do_thousands_sep() const */ undefined4 std::moneypunct::do_thousands_sep(void) { return 0x20; } ### FUNC do_grouping @ 0004fb18 /* std::moneypunct::do_grouping() const */ void __thiscall std::moneypunct::do_grouping(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_curr_symbol @ 0004fb34 /* std::moneypunct::do_curr_symbol() const */ void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) { size_t sVar1; *(moneypunct **)(this + 0x40) = this; *(moneypunct **)(this + 0x44) = this; sVar1 = wcslen(L""); FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); return; } ### FUNC do_positive_sign @ 0004fb8c /* std::moneypunct::do_positive_sign() const */ void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) { size_t sVar1; *(moneypunct **)(this + 0x40) = this; *(moneypunct **)(this + 0x44) = this; sVar1 = wcslen(L""); FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); return; } ### FUNC do_negative_sign @ 0004fbe4 /* std::moneypunct::do_negative_sign() const */ void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) { size_t sVar1; *(moneypunct **)(this + 0x40) = this; *(moneypunct **)(this + 0x44) = this; sVar1 = wcslen(L""); FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); return; } ### FUNC do_frac_digits @ 0004fc3c /* std::moneypunct::do_frac_digits() const */ undefined4 std::moneypunct::do_frac_digits(void) { return 0; } ### FUNC do_pos_format @ 0004fc40 /* std::moneypunct::do_pos_format() const */ undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) { return *(undefined4 *)(this + 0xc); } ### FUNC do_neg_format @ 0004fc56 /* std::moneypunct::do_neg_format() const */ undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) { return *(undefined4 *)(this + 0x10); } ### FUNC moneypunct @ 0004fc6c /* std::moneypunct::moneypunct(unsigned int) */ moneypunct * __thiscall std::moneypunct::moneypunct(moneypunct *this,uint param_1) { *(uint *)(this + 4) = (uint)(param_1 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__moneypunct_0006a144; this[0xc] = (moneypunct)0x2; this[0xd] = (moneypunct)0x3; this[0xf] = (moneypunct)0x4; this[0xe] = (moneypunct)0x0; this[0x10] = (moneypunct)0x2; this[0x12] = (moneypunct)0x0; this[0x11] = (moneypunct)0x3; this[0x13] = (moneypunct)0x4; return this; } ### FUNC ~moneypunct @ 0004fcb0 /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~moneypunct @ 0004fcba /* std::moneypunct::~moneypunct() */ void __thiscall std::moneypunct::~moneypunct(moneypunct *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 0004fcda /* std::moneypunct::do_decimal_point() const */ undefined4 std::moneypunct::do_decimal_point(void) { return 0x20; } ### FUNC do_thousands_sep @ 0004fcde /* std::moneypunct::do_thousands_sep() const */ undefined4 std::moneypunct::do_thousands_sep(void) { return 0x20; } ### FUNC do_grouping @ 0004fce4 /* std::moneypunct::do_grouping() const */ void __thiscall std::moneypunct::do_grouping(moneypunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00066173,auStack_c); return; } ### FUNC do_curr_symbol @ 0004fd00 /* std::moneypunct::do_curr_symbol() const */ void __thiscall std::moneypunct::do_curr_symbol(moneypunct *this) { size_t sVar1; *(moneypunct **)(this + 0x40) = this; *(moneypunct **)(this + 0x44) = this; sVar1 = wcslen(L""); FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); return; } ### FUNC do_positive_sign @ 0004fd58 /* std::moneypunct::do_positive_sign() const */ void __thiscall std::moneypunct::do_positive_sign(moneypunct *this) { size_t sVar1; *(moneypunct **)(this + 0x40) = this; *(moneypunct **)(this + 0x44) = this; sVar1 = wcslen(L""); FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); return; } ### FUNC do_negative_sign @ 0004fdb0 /* std::moneypunct::do_negative_sign() const */ void __thiscall std::moneypunct::do_negative_sign(moneypunct *this) { size_t sVar1; *(moneypunct **)(this + 0x40) = this; *(moneypunct **)(this + 0x44) = this; sVar1 = wcslen(L""); FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4); return; } ### FUNC do_frac_digits @ 0004fe08 /* std::moneypunct::do_frac_digits() const */ undefined4 std::moneypunct::do_frac_digits(void) { return 0; } ### FUNC do_pos_format @ 0004fe0c /* std::moneypunct::do_pos_format() const */ undefined4 __thiscall std::moneypunct::do_pos_format(moneypunct *this) { return *(undefined4 *)(this + 0xc); } ### FUNC do_neg_format @ 0004fe22 /* std::moneypunct::do_neg_format() const */ undefined4 __thiscall std::moneypunct::do_neg_format(moneypunct *this) { return *(undefined4 *)(this + 0x10); } ### FUNC FUN_0004fe38 @ 0004fe38 void FUN_0004fe38(int *param_1,int param_2,int param_3) { uint uVar1; undefined4 *puVar2; undefined4 uVar3; uint uVar4; uint local_18; uVar4 = param_3 - param_2 >> 2; uVar1 = uVar4 + 1; if (0x3ffffffe < uVar4) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (uVar1 < 0x11) { puVar2 = (undefined4 *)param_1[0x11]; } else { if (0x3fffffff < uVar1) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } uVar1 = uVar1 * 4; local_18 = uVar1; if (uVar1 < 0x81) { puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); uVar1 = local_18; } else { puVar2 = (undefined4 *)operator_new(uVar1); } param_1[0x10] = (int)puVar2; param_1[0x11] = (int)puVar2; *param_1 = (int)puVar2 + (uVar1 & 0xfffffffc); } if (param_3 != param_2) { __aeabi_memcpy(puVar2,param_2); puVar2 = (undefined4 *)((int)puVar2 + (param_3 - param_2)); } param_1[0x10] = (int)puVar2; *puVar2 = 0; return; } ### FUNC __valid_grouping @ 0004fee0 /* std::priv::__valid_grouping(char const*, char const*, char const*, char const*) */ undefined4 std::priv::__valid_grouping(char *param_1,char *param_2,char *param_3,char *param_4) { byte bVar1; byte bVar2; char *pcVar3; undefined4 uVar4; uVar4 = 1; if ((param_1 != param_2) && (param_3 != param_4)) { bVar2 = param_2[-1]; bVar1 = *param_3; for (pcVar3 = param_2 + -1; pcVar3 != param_1; pcVar3 = pcVar3 + -1) { if (bVar2 != bVar1) { return 0; } if (param_3 != param_4 + -1) { param_3 = (char *)((byte *)param_3 + 1); } bVar1 = *param_3; bVar2 = pcVar3[-1]; } uVar4 = 1; if (bVar1 < bVar2) { uVar4 = 0; } } return uVar4; } ### FUNC __digit_val_table @ 0004ff38 /* std::priv::__digit_val_table(unsigned int) */ undefined1 std::priv::__digit_val_table(uint param_1) { return (&DAT_00066206)[param_1]; } ### FUNC __narrow_atoms @ 0004ff44 /* std::priv::__narrow_atoms() */ char * std::priv::__narrow_atoms(void) { return "+-0xX"; } ### FUNC __get_fdigit @ 0004ff50 /* std::priv::__get_fdigit(wchar_t&, wchar_t const*) */ undefined4 std::priv::__get_fdigit(wchar_t *param_1,wchar_t *param_2) { wchar_t wVar1; wchar_t wVar2; wVar1 = *param_1; wVar2 = L'0'; if ((((((*param_2 != wVar1) && (wVar2 = L'1', param_2[1] != wVar1)) && (wVar2 = L'2', param_2[2] != wVar1)) && ((wVar2 = L'3', param_2[3] != wVar1 && (wVar2 = L'4', param_2[4] != wVar1)))) && ((wVar2 = L'5', param_2[5] != wVar1 && ((wVar2 = L'6', param_2[6] != wVar1 && (wVar2 = L'7', param_2[7] != wVar1)))))) && ((wVar2 = L'8', param_2[8] != wVar1 && (wVar2 = L'9', param_2[9] != wVar1)))) { return 0; } *param_1 = wVar2; return 1; } ### FUNC __get_fdigit_or_sep @ 0004ffb0 /* std::priv::__get_fdigit_or_sep(wchar_t&, wchar_t, wchar_t const*) */ undefined4 std::priv::__get_fdigit_or_sep(wchar_t *param_1,wchar_t param_2,wchar_t *param_3) { wchar_t wVar1; wchar_t wVar2; wVar1 = *param_1; wVar2 = L','; if ((((((wVar1 != param_2) && (wVar2 = L'0', *param_3 != wVar1)) && (wVar2 = L'1', param_3[1] != wVar1)) && ((wVar2 = L'2', param_3[2] != wVar1 && (wVar2 = L'3', param_3[3] != wVar1)))) && ((wVar2 = L'4', param_3[4] != wVar1 && ((wVar2 = L'5', param_3[5] != wVar1 && (wVar2 = L'6', param_3[6] != wVar1)))))) && ((wVar2 = L'7', param_3[7] != wVar1 && ((wVar2 = L'8', param_3[8] != wVar1 && (wVar2 = L'9', param_3[9] != wVar1)))))) { return 0; } *param_1 = wVar2; return 1; } ### FUNC __hex_char_table_lo @ 00050018 /* std::priv::__hex_char_table_lo() */ char * std::priv::__hex_char_table_lo(void) { return "0123456789abcdefx"; } ### FUNC __hex_char_table_hi @ 00050024 /* std::priv::__hex_char_table_hi() */ char * std::priv::__hex_char_table_hi(void) { return "0123456789ABCDEFX"; } ### FUNC FUN_00050030 @ 00050030 int FUN_00050030(int param_1) { int iVar1; int iVar2; iVar1 = FUN_00041ecc(&stack0xfffffff0); iVar2 = (int)&stack0xfffffff0 - iVar1; if (iVar2 != 0) { __aeabi_memmove(param_1,iVar1,iVar2); param_1 = param_1 + iVar2; } return param_1; } ### FUNC FUN_00050058 @ 00050058 byte * FUN_00050058(byte *param_1,byte *param_2,int param_3,byte param_4,uint param_5,uint param_6, int param_7) { byte *pbVar1; byte *pbVar2; int iVar3; uint uVar4; uint uVar5; uint uVar6; pbVar1 = (byte *)0x0; if (param_1 != param_2) { uVar5 = 0; uVar6 = (uint)(*param_1 == param_5 || *param_1 == param_6); pbVar2 = param_1 + 1; if (uVar6 == 0) { pbVar2 = param_1; } uVar4 = 0; pbVar1 = param_2; while( true ) { if (uVar4 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { uVar5 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar4); uVar4 = uVar4 + 1; } if (((uVar5 == 0) || ((int)param_2 - (int)(pbVar2 + param_7) <= (int)uVar5)) || (uVar5 == 0xff)) break; param_2 = param_2 + -uVar5; iVar3 = (int)(pbVar1 + 1) - (int)param_2; if (0 < iVar3) { __aeabi_memmove(pbVar1 + (2 - iVar3),param_2); } *param_2 = param_4; pbVar1 = pbVar1 + 1; } pbVar1 = pbVar1 + ((uVar6 + param_7) - (int)(pbVar2 + param_7)); } return pbVar1; } ### FUNC FUN_000500f4 @ 000500f4 void FUN_000500f4(byte *param_1,uint param_2,int param_3,undefined4 param_4,uint param_5, uint param_6,int param_7) { byte bVar1; byte *pbVar2; byte *pbVar3; byte *pbVar4; byte *pbVar5; uint uVar6; uint uVar7; uint uVar8; uint uVar9; uint uVar10; uint uVar11; byte *pbVar12; uint local_30; pbVar4 = param_1 + 0x118; pbVar2 = *(byte **)(param_1 + 0x118); if (param_2 <= (uint)(*(int *)(param_1 + 0x10) - (int)pbVar2)) { bVar1 = *pbVar2; uVar8 = 0; pbVar2 = pbVar2 + param_2; uVar9 = uVar8; while( true ) { if (uVar8 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { uVar9 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar8); uVar8 = uVar8 + 1; } if (uVar9 == 0) break; pbVar3 = *(byte **)pbVar4; if (uVar9 == 0xff) { return; } if ((int)(pbVar2 + ((-param_7 - (uint)(bVar1 == param_5 || bVar1 == param_6)) - (int)pbVar3)) <= (int)uVar9) { return; } pbVar2 = pbVar2 + -uVar9; pbVar12 = *(byte **)(param_1 + 0x10); if (pbVar12 == pbVar2) { pbVar5 = param_1 + 0x10; if (pbVar3 != param_1) { pbVar5 = *(byte **)param_1; } if ((int)pbVar5 - (int)pbVar12 == 1) { uVar6 = (int)pbVar12 - (int)pbVar3; if (uVar6 == 0xfffffffe) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar10 = uVar6; if (uVar6 < 2) { uVar10 = 1; } uVar11 = uVar6 + uVar10 + 1; local_30 = 0xfffffffe; uVar7 = 0xfffffffe; if (uVar6 <= uVar11) { uVar7 = uVar11; } if (uVar6 + uVar10 != -2) { local_30 = uVar7; } pbVar5 = param_1 + 0x14; if (0x80 < local_30 >> 1) { pbVar5 = (byte *)operator_new(local_30); pbVar12 = *(byte **)(param_1 + 0x10); pbVar3 = *(byte **)pbVar4; } pbVar2 = pbVar5; if (0 < (int)pbVar12 - (int)pbVar3) { pbVar12 = pbVar12 + (1 - (int)pbVar3); do { *pbVar2 = *pbVar3; pbVar12 = pbVar12 + -1; pbVar2 = pbVar2 + 1; pbVar3 = pbVar3 + 1; } while (1 < (int)pbVar12); } *pbVar2 = 0; pbVar3 = *(byte **)pbVar4; if (((pbVar3 != param_1) && (pbVar3 != (byte *)0x0)) && (param_1 + 0x14 != pbVar3)) { if ((uint)(*(int *)param_1 - (int)pbVar3) < 0x81) { std::__node_alloc::_M_deallocate(pbVar3,*(int *)param_1 - (int)pbVar3); } else { operator_delete(pbVar3); } } *(byte **)(param_1 + 0x10) = pbVar2; *(byte **)param_1 = pbVar5 + local_30; *(byte **)pbVar4 = pbVar5; } pbVar2[1] = 0; **(undefined1 **)(param_1 + 0x10) = (char)param_4; pbVar2 = *(byte **)(param_1 + 0x10); *(byte **)(param_1 + 0x10) = pbVar2 + 1; } else { pbVar2 = (byte *)FUN_00050418(param_1,pbVar2,param_4); } } } return; } ### FUNC FUN_00050274 @ 00050274 int FUN_00050274(int *param_1,int *param_2,int param_3,int param_4,int param_5,int param_6, int param_7) { int *piVar1; int iVar2; int *piVar3; uint uVar4; uint uVar5; uint uVar6; iVar2 = 0; if (param_1 != param_2) { uVar5 = 0; uVar6 = (uint)(*param_1 == param_5 || *param_1 == param_6); piVar3 = param_1 + 1; if (uVar6 == 0) { piVar3 = param_1; } uVar4 = 0; piVar1 = param_2; while( true ) { if (uVar4 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { uVar5 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar4); uVar4 = uVar4 + 1; } if (((uVar5 == 0) || ((int)param_2 - (int)(piVar3 + param_7) >> 2 <= (int)uVar5)) || (uVar5 == 0xff)) break; param_2 = param_2 + -uVar5; iVar2 = (int)(piVar1 + 1) - (int)param_2; if (0 < iVar2) { __aeabi_memmove((int)piVar1 + (8 - iVar2),param_2); } *param_2 = param_4; piVar1 = piVar1 + 1; } iVar2 = uVar6 + param_7 + ((int)piVar1 - (int)(piVar3 + param_7) >> 2); } return iVar2; } ### FUNC FUN_0005031c @ 0005031c void FUN_0005031c(int *param_1,uint param_2,int param_3,int param_4,int param_5,int param_6, int param_7) { int *piVar1; int *piVar2; uint uVar3; int *piVar4; uint uVar5; uint uVar6; uint uVar7; int iVar8; uint uVar9; piVar1 = (int *)param_1[0x112]; if (param_2 <= (uint)(param_1[0x10] - (int)piVar1 >> 2)) { iVar8 = *piVar1; uVar7 = 0; piVar1 = piVar1 + param_2; uVar9 = 0; while( true ) { if (uVar9 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) { uVar7 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar9); uVar9 = uVar9 + 1; } if (uVar7 == 0) break; piVar2 = (int *)param_1[0x112]; if (uVar7 == 0xff) { return; } if ((int)((-param_7 - (uint)(iVar8 == param_5 || iVar8 == param_6)) + ((int)piVar1 - (int)piVar2 >> 2)) <= (int)uVar7) { return; } piVar1 = piVar1 + -uVar7; piVar4 = (int *)param_1[0x10]; if (piVar4 == piVar1) { if (piVar2 == param_1) { if ((int)piVar4 - (int)param_1 >> 2 == 0xf) goto LAB_000503d4; } else if (*param_1 - (int)piVar4 >> 2 == 1) { LAB_000503d4: uVar3 = (int)piVar4 - (int)piVar2 >> 2; uVar5 = uVar3; if (uVar3 < 2) { uVar5 = 1; } uVar6 = uVar3 + uVar5 + 1; uVar5 = 0x3ffffffe; if (uVar3 <= uVar6) { uVar5 = uVar6; } uVar3 = 0x3ffffffe; if (uVar6 < 0x3fffffff) { uVar3 = uVar5; } FUN_000506a4(param_1,uVar3); piVar1 = (int *)param_1[0x10]; } *piVar1 = param_4; piVar1[1] = 0; param_1[0x10] = (int)(piVar1 + 1); } else { piVar1 = (int *)FUN_00050548(param_1,piVar1,param_4); } } } return; } ### FUNC FUN_00050418 @ 00050418 int * FUN_00050418(int *param_1,int *param_2,undefined1 param_3) { int *piVar1; int *piVar2; int iVar3; uint uVar4; undefined1 *puVar5; uint uVar6; uint uVar7; uint uVar8; int *piVar9; int *piVar10; int *local_1c; piVar9 = (int *)param_1[0x46]; piVar1 = param_1 + 0x46; if (piVar9 == param_1) { iVar3 = param_1[4]; uVar6 = (int)param_1 + (0x10 - iVar3); } else { iVar3 = param_1[4]; uVar6 = *param_1 - iVar3; } if (uVar6 < 2) { local_1c = param_1 + 4; uVar6 = iVar3 - (int)piVar9; if (uVar6 == 0xfffffffe) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar7 = uVar6; if (uVar6 < 2) { uVar7 = 1; } uVar8 = uVar6 + uVar7 + 1; uVar4 = 0xfffffffe; if (uVar6 <= uVar8) { uVar4 = uVar8; } uVar8 = 0xfffffffe; if (uVar6 + uVar7 != -2) { uVar8 = uVar4; } if (uVar8 >> 1 < 0x81) { piVar2 = param_1 + 5; } else { piVar2 = (int *)operator_new(uVar8); piVar9 = (int *)*piVar1; } piVar10 = piVar2; if (0 < (int)param_2 - (int)piVar9) { puVar5 = (undefined1 *)((int)param_2 + (1 - (int)piVar9)); do { *(char *)piVar10 = (char)*piVar9; puVar5 = puVar5 + -1; piVar10 = (int *)((int)piVar10 + 1); piVar9 = (int *)((int)piVar9 + 1); } while (1 < (int)puVar5); } *(undefined1 *)piVar10 = param_3; puVar5 = (undefined1 *)((int)piVar10 + 1); if (0 < *local_1c - (int)param_2) { iVar3 = (*local_1c + 1) - (int)param_2; do { *puVar5 = (char)*param_2; iVar3 = iVar3 + -1; puVar5 = puVar5 + 1; param_2 = (int *)((int)param_2 + 1); } while (1 < iVar3); } *puVar5 = 0; piVar9 = (int *)*piVar1; if (((piVar9 != param_1) && (piVar9 != (int *)0x0)) && (param_1 + 5 != piVar9)) { if ((uint)(*param_1 - (int)piVar9) < 0x81) { std::__node_alloc::_M_deallocate(piVar9,*param_1 - (int)piVar9); } else { operator_delete(piVar9); } } param_1[4] = (int)puVar5; *param_1 = (int)((int)piVar2 + uVar8); *piVar1 = (int)piVar2; } else { local_1c = param_1 + 4; *(undefined1 *)(iVar3 + 1) = 0; if ((int *)*local_1c != param_2) { __aeabi_memmove((undefined1 *)((int)param_2 + 1),param_2); } *(undefined1 *)param_2 = param_3; *local_1c = *local_1c + 1; piVar10 = param_2; } return piVar10; } ### FUNC FUN_00050548 @ 00050548 wchar_t * FUN_00050548(wchar_t *param_1,wchar_t *param_2,wchar_t param_3) { wchar_t *pwVar1; wchar_t *pwVar2; undefined4 uVar3; wchar_t wVar4; int iVar5; uint uVar6; uint uVar7; wchar_t *pwVar8; wchar_t *pwVar9; uint uVar10; wchar_t *pwVar11; uint local_18; pwVar1 = (wchar_t *)param_1[0x112]; if (pwVar1 == param_1) { wVar4 = param_1[0x10]; uVar6 = 0x10 - (wVar4 - (int)param_1 >> 2); } else { wVar4 = param_1[0x10]; uVar6 = *param_1 - wVar4 >> 2; } pwVar9 = param_1 + 0x10; if (uVar6 < 2) { uVar7 = wVar4 - (int)pwVar1 >> 2; uVar6 = uVar7; if (uVar7 < 2) { uVar6 = 1; } uVar10 = uVar7 + uVar6 + 1; uVar6 = 0x3ffffffe; if (uVar7 <= uVar10) { uVar6 = uVar10; } uVar7 = 0x3ffffffe; if (uVar10 < 0x3fffffff) { uVar7 = uVar6; } if (uVar7 >> 1 < 0x81) { pwVar2 = param_1 + 0x11; } else { if (0x3fffffff < uVar7) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } local_18 = uVar7 << 2; if (local_18 < 0x81) { pwVar2 = (wchar_t *)std::__node_alloc::_M_allocate(&local_18); } else { pwVar2 = (wchar_t *)operator_new(local_18); } pwVar1 = (wchar_t *)param_1[0x112]; } pwVar11 = pwVar2; if (0 < (int)param_2 - (int)pwVar1) { iVar5 = ((uint)((int)param_2 - (int)pwVar1) >> 2) + 1; pwVar8 = pwVar1; do { wVar4 = *pwVar8; pwVar8 = pwVar8 + 1; *pwVar11 = wVar4; pwVar11 = pwVar11 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); } *pwVar11 = param_3; pwVar8 = pwVar11 + 1; if (0 < *pwVar9 - (int)param_2) { iVar5 = ((uint)(*pwVar9 - (int)param_2) >> 2) + 1; do { wVar4 = *param_2; param_2 = param_2 + 1; *pwVar8 = wVar4; pwVar8 = pwVar8 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); } *pwVar8 = L'\0'; if (((pwVar1 != param_1) && (pwVar1 != (wchar_t *)0x0)) && (param_1 + 0x11 != pwVar1)) { if ((uint)(*param_1 - (int)pwVar1) < 0x81) { std::__node_alloc::_M_deallocate(pwVar1,*param_1 - (int)pwVar1); } else { operator_delete(pwVar1); } } param_1[0x10] = (wchar_t)pwVar8; *param_1 = (wchar_t)(pwVar2 + uVar7); param_1[0x112] = (wchar_t)pwVar2; } else { *(undefined4 *)(wVar4 + L'\x04') = 0; wmemmove(param_2 + 1,param_2,wVar4 - (int)param_2 >> 2); *param_2 = param_3; *pwVar9 = *pwVar9 + L'\x04'; pwVar11 = param_2; } return pwVar11; } ### FUNC FUN_000506a4 @ 000506a4 void FUN_000506a4(int *param_1,uint param_2) { int *piVar1; int *piVar2; undefined4 uVar3; int iVar4; int *piVar5; int iVar6; int *piVar7; uint local_18; if (param_2 >> 1 < 0x81) { piVar1 = param_1 + 0x11; } else { if (param_2 >> 0x1e != 0) { FUN_00030824(4); uVar3 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } local_18 = param_2 << 2; if (local_18 < 0x81) { piVar1 = (int *)std::__node_alloc::_M_allocate(&local_18); } else { piVar1 = (int *)operator_new(local_18); } } piVar2 = (int *)param_1[0x112]; piVar7 = piVar1; if (0 < param_1[0x10] - (int)piVar2) { iVar4 = ((uint)(param_1[0x10] - (int)piVar2) >> 2) + 1; piVar5 = piVar2; do { iVar6 = *piVar5; piVar5 = piVar5 + 1; *piVar7 = iVar6; piVar7 = piVar7 + 1; iVar4 = iVar4 + -1; } while (1 < iVar4); } *piVar7 = 0; if (((piVar2 != param_1) && (piVar2 != (int *)0x0)) && (param_1 + 0x11 != piVar2)) { if ((uint)(*param_1 - (int)piVar2) < 0x81) { std::__node_alloc::_M_deallocate(piVar2,*param_1 - (int)piVar2); } else { operator_delete(piVar2); } } param_1[0x10] = (int)piVar7; *param_1 = (int)(piVar1 + param_2); param_1[0x112] = (int)piVar1; return; } ### FUNC _Initialize_get_float @ 00050758 /* std::priv::_Initialize_get_float(std::ctype const&, wchar_t&, wchar_t&, wchar_t&, wchar_t&, wchar_t*) */ void std::priv::_Initialize_get_float (ctype *param_1,wchar_t *param_2,wchar_t *param_3,wchar_t *param_4,wchar_t *param_5, wchar_t *param_6) { wchar_t wVar1; undefined4 local_20; undefined4 local_1c; undefined2 local_18; undefined1 local_16 [2]; local_16[0] = 0; local_18 = 0x3938; local_1c = 0x37363534; local_20 = 0x33323130; wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x2b); *param_2 = wVar1; wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x2d); *param_3 = wVar1; wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x65); *param_4 = wVar1; wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x45); *param_5 = wVar1; (**(code **)(*(int *)param_1 + 0x2c))(param_1,&local_20,local_16,param_6); return; } ### FUNC __string_to_float @ 000507d0 /* std::priv::__string_to_float(std::priv::__basic_iostring const&, float&) */ void std::priv::__string_to_float(__basic_iostring *param_1,float *param_2) { float fVar1; FUN_000507e8(*(undefined4 *)(param_1 + 0x118)); fVar1 = (float)__truncdfsf2(); *param_2 = fVar1; return; } ### FUNC FUN_000507e8 @ 000507e8 undefined8 FUN_000507e8(byte *param_1) { bool bVar1; bool bVar2; undefined8 uVar3; longlong lVar4; bool bVar5; uint uVar6; int iVar7; byte *pbVar8; byte *pbVar9; uint uVar10; int iVar11; uint uVar12; uint uVar13; uint uVar14; uint uVar15; uint uVar16; longlong lVar17; undefined8 uVar18; uint local_4c; uint local_44; uint local_40; int local_3c; byte local_38 [20]; int local_24; undefined8 local_20; lVar17 = CONCAT44(local_20._4_4_,(uint)local_20); uVar10 = (uint)*param_1; pbVar8 = param_1 + 1; bVar5 = false; if (uVar10 != 0x2b) { bVar2 = false; bVar5 = true; if (uVar10 != 0x2d) goto LAB_00050808; } bVar2 = bVar5; uVar10 = (uint)param_1[1]; pbVar8 = param_1 + 2; LAB_00050808: iVar11 = 0; local_3c = 0; uVar15 = 0; do { pbVar9 = pbVar8 + 1; uVar10 = uVar10 - 0x30; if (uVar10 < 10) { uVar6 = uVar15; if (iVar11 == 0x11) { local_3c = local_3c + (uVar15 ^ 1); iVar11 = 0x11; } else { iVar7 = 0; if (iVar11 != 0 || uVar10 != 0) { local_38[iVar11] = (byte)uVar10; iVar7 = iVar11 + 1; } local_3c = local_3c - uVar15; iVar11 = iVar7; } } else { uVar6 = 1; if ((uVar10 != 0xfffffffe) || (uVar15 != 0)) break; } uVar10 = (uint)*pbVar8; uVar15 = uVar6; pbVar8 = pbVar9; } while( true ); if (iVar11 == 0) { return 0; } local_40 = 0x20; if ((uVar10 | 0x20) == 0x35) { uVar10 = (uint)*pbVar8; bVar5 = false; if ((uVar10 == 0x20) || (uVar10 == 0x2b)) { LAB_0005088e: bVar1 = bVar5; uVar10 = (uint)*pbVar9; pbVar9 = pbVar8 + 2; } else { bVar1 = false; bVar5 = true; if (uVar10 == 0x2d) goto LAB_0005088e; } uVar10 = uVar10 - 0x30; if (uVar10 < 10) { iVar7 = 0; do { iVar7 = iVar7 * 10 + uVar10; uVar10 = *pbVar9 - 0x30; pbVar9 = pbVar9 + 1; } while (uVar10 < 10); if (bVar1) { iVar7 = -iVar7; } local_3c = iVar7 + local_3c; } } uVar10 = 0; uVar15 = 0; if (-0x133 < local_3c + iVar11) { uVar15 = 0x7ff00000; uVar10 = 0; lVar17 = CONCAT44(local_20._4_4_,(uint)local_20); if (local_3c + iVar11 < 0x136) { lVar17 = 0; lVar4 = 0; if (0 < iVar11) { pbVar8 = local_38; do { local_20._4_4_ = (uint)((ulonglong)lVar4 >> 0x20); local_20._0_4_ = (uint)lVar4; lVar17 = __muldi3((uint)local_20,local_20._4_4_,10,0); local_20 = lVar4; local_20 = lVar17; lVar4 = lVar17 + (ulonglong)*pbVar8; uVar10 = (uint)lVar4; uVar15 = (uint)((ulonglong)lVar4 >> 0x20); pbVar8 = pbVar8 + 1; } while (pbVar8 < local_38 + iVar11); lVar17 = lVar4; if (lVar4 != 0) { if (uVar15 == 0) { local_40 = 0; } uVar13 = local_40 | 0x10; uVar16 = uVar13 - 0x20; local_4c = 0; uVar6 = 0; if ((int)uVar16 < 0) { uVar6 = uVar15 >> (local_40 | 0x10); } uVar14 = uVar15 >> (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 0x10); } if (uVar14 != 0 || uVar6 != 0) { local_40 = uVar13; } uVar13 = local_40 | 8; uVar16 = uVar13 - 0x20; uVar6 = 0; if ((int)uVar16 < 0) { uVar6 = uVar15 >> (local_40 | 8); } uVar14 = uVar15 >> (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 8); } if (uVar14 != 0 || uVar6 != 0) { local_40 = uVar13; } uVar13 = local_40 | 4; uVar16 = uVar13 - 0x20; uVar6 = 0; if ((int)uVar16 < 0) { uVar6 = uVar15 >> (local_40 | 4); } uVar14 = uVar15 >> (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 4); } if (uVar14 != 0 || uVar6 != 0) { local_40 = uVar13; } uVar13 = local_40 + 2; uVar16 = local_40 - 0x1e; uVar6 = 0; if ((int)uVar16 < 0) { uVar6 = uVar15 >> uVar13; } uVar14 = uVar15 >> (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar14 = uVar10 >> uVar13 | uVar15 << (0x1e - local_40 & 0xff); } if (uVar14 != 0 || uVar6 != 0) { local_40 = uVar13; } uVar13 = local_40 + 1; uVar16 = local_40 - 0x1f; uVar6 = 0; if ((int)uVar16 < 0) { uVar6 = uVar15 >> uVar13; } uVar14 = uVar15 >> (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar14 = uVar10 >> uVar13 | uVar15 << (0x1f - local_40 & 0xff); } if (uVar14 != 0 || uVar6 != 0) { local_40 = uVar13; } uVar6 = local_40 - 0x20; local_44 = 0; if ((int)uVar6 < 0) { local_44 = uVar15 >> local_40; } uVar13 = uVar15 >> (uVar6 & 0xff); if ((int)uVar6 < 0) { uVar13 = uVar15 << (0x20 - local_40 & 0xff) | uVar10 >> local_40; } uVar6 = local_40 + 1; if (uVar13 == 0 && local_44 == 0) { uVar6 = local_40; } uVar13 = 0x20 - uVar6; uVar16 = 0x40 - uVar6; if ((int)uVar13 < 0) { local_4c = uVar10 << (uVar16 & 0xff); } local_20._0_4_ = local_4c; local_20._4_4_ = uVar10 << (uVar13 & 0xff); if ((int)uVar13 < 0) { local_20._4_4_ = uVar10 >> (0x20 - uVar16 & 0xff) | uVar15 << (uVar16 & 0xff); } FUN_00050d84(&local_20,local_3c,&local_24); local_24 = local_24 + uVar6; if (-0x3fe < local_24) { uVar6 = local_20._4_4_ >> 0xb; uVar15 = (uint)local_20 >> 0xb | local_20._4_4_ << 0x15; uVar10 = uVar15; local_20._4_4_ = uVar6; if ((((uint)local_20 & 0x400) != 0) && (((uint)local_20 >> 0xb & 1) != 0 || ((uint)local_20 & 0x3ff) != 0)) { local_20._4_4_ = uVar6 + (0xfffffffe < uVar15); uVar10 = uVar15 + 1; if ((local_20._4_4_ & 0x200000) != 0) { local_24 = local_24 + 1; uVar10 = local_20._4_4_ * -0x80000000 | uVar15 + 1 >> 1; local_20._4_4_ = local_20._4_4_ >> 1; } } local_20._0_4_ = uVar10; uVar15 = 0x7ff00000; uVar10 = 0; lVar17 = CONCAT44(local_20._4_4_,(uint)local_20); if (local_24 < 0x401) { uVar15 = (local_24 + 0x3fe) * 0x100000 & 0x7ff00000U | local_20._4_4_ & 0x800fffff; uVar10 = (uint)local_20; lVar17 = CONCAT44(uVar15,(uint)local_20); } goto LAB_00050ae0; } if (-0x434 < local_24) { uVar6 = -local_24 - 0x3f2; if ((int)uVar6 < 0x41) { if (uVar6 == 0x40) { uVar12 = local_20._4_4_ >> 0x1f; uVar13 = 0x7fffffff; uVar10 = 0; uVar15 = 0; } else { uVar16 = -local_24 - 0x412; uVar13 = 1 << (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar13 = 1 >> (0x20 - uVar6 & 0xff); } uVar14 = 0; if ((int)uVar16 < 0) { uVar14 = 1 << (uVar6 & 0xff); } uVar13 = uVar13 - (uVar14 < 2); uVar10 = local_20._4_4_ >> (uVar16 & 0xff); if ((int)uVar16 < 0) { uVar10 = local_20._4_4_ << (0x20 - uVar6 & 0xff) | (uint)local_20 >> (uVar6 & 0xff); } uVar12 = ~uVar10 & 1; uVar15 = 0; if ((int)uVar16 < 0) { uVar15 = local_20._4_4_ >> (uVar6 & 0xff); } local_20._0_4_ = (uint)local_20 & uVar14 - 2; } lVar17 = CONCAT44(uVar15,uVar10); if ((uVar12 != 0) && (lVar17 = CONCAT44(uVar15,uVar10), ((uint)local_20 != 0 || (uVar10 & 1) != 0) || (local_20._4_4_ & uVar13) != 0)) { uVar6 = uVar10 + 1; uVar15 = uVar15 + (0xfffffffe < uVar10); uVar10 = uVar6; lVar17 = CONCAT44(uVar15,uVar6); } goto LAB_00050ae0; } } lVar17 = 0; } } uVar15 = 0; uVar10 = uVar15; } } LAB_00050ae0: local_20 = lVar17; uVar18 = __subdf3(0,0x80000000,uVar10,uVar15); uVar3 = CONCAT44(uVar15,uVar10); if (bVar2) { uVar3 = uVar18; } return uVar3; } ### FUNC __string_to_float @ 00050c2c /* std::priv::__string_to_float(std::priv::__basic_iostring const&, double&) */ void std::priv::__string_to_float(__basic_iostring *param_1,double *param_2) { double dVar1; dVar1 = (double)FUN_000507e8(*(undefined4 *)(param_1 + 0x118)); *param_2 = dVar1; return; } ### FUNC __string_to_float @ 00050c40 /* std::priv::__string_to_float(std::priv::__basic_iostring const&, long double&) */ void std::priv::__string_to_float(__basic_iostring *param_1,longdouble *param_2) { longdouble lVar1; lVar1 = (longdouble)FUN_00050c54(*(undefined4 *)(param_1 + 0x118)); *param_2 = lVar1; return; } ### FUNC FUN_00050c54 @ 00050c54 undefined8 FUN_00050c54(byte *param_1) { bool bVar1; bool bVar2; bool bVar3; uint uVar4; byte *pbVar5; int iVar6; int iVar7; int iVar8; int iVar9; byte *pbVar10; uint uVar11; uint uVar12; undefined8 uVar13; undefined8 uVar14; undefined1 local_24 [16]; uVar11 = (uint)*param_1; pbVar5 = param_1 + 1; bVar3 = false; if (uVar11 != 0x2b) { bVar1 = false; bVar3 = true; if (uVar11 != 0x2d) goto LAB_00050c78; } bVar1 = bVar3; uVar11 = (uint)param_1[1]; pbVar5 = param_1 + 2; LAB_00050c78: iVar6 = 0; iVar9 = 0; uVar12 = 0; do { pbVar10 = pbVar5 + 1; uVar11 = uVar11 - 0x30; if (uVar11 < 10) { uVar4 = uVar12; if (iVar6 == 0xf) { iVar9 = iVar9 + (uVar12 ^ 1); iVar6 = 0xf; } else { iVar7 = 0; if (iVar6 != 0 || uVar11 != 0) { local_24[iVar6] = (char)uVar11; iVar7 = iVar6 + 1; } iVar9 = iVar9 - uVar12; iVar6 = iVar7; } } else { uVar4 = 1; if ((uVar11 != 0xfffffffe) || (uVar12 != 0)) { if (iVar6 == 0) { uVar14 = 0; } else { if ((uVar11 | 0x20) == 0x35) { uVar11 = (uint)*pbVar5; bVar3 = false; if (((uVar11 == 0x20) || (uVar11 == 0x2b)) || (bVar2 = false, bVar3 = true, uVar11 == 0x2d)) { bVar2 = bVar3; uVar11 = (uint)*pbVar10; pbVar10 = pbVar5 + 2; } uVar11 = uVar11 - 0x30; if (uVar11 < 10) { iVar7 = 0; do { iVar7 = iVar7 * 10 + uVar11; uVar11 = *pbVar10 - 0x30; pbVar10 = pbVar10 + 1; } while (uVar11 < 10); iVar8 = -iVar7; if (!bVar2) { iVar8 = iVar7; } iVar9 = iVar8 + iVar9; } } uVar14 = 0; if (-0x133 < iVar9 + iVar6) { uVar13 = 0x7ff0000000000000; if (iVar9 + iVar6 < 0x136) { uVar13 = FUN_00051158(local_24,iVar6,iVar9); } uVar14 = __subdf3(0,0x80000000,(int)uVar13,(int)((ulonglong)uVar13 >> 0x20)); if (!bVar1) { uVar14 = uVar13; } } } return uVar14; } } uVar11 = (uint)*pbVar5; uVar12 = uVar4; pbVar5 = pbVar10; } while( true ); } ### FUNC FUN_00050d84 @ 00050d84 /* WARNING: Removing unreachable block (ram,0x00051064) */ /* WARNING: Removing unreachable block (ram,0x00050eb6) */ /* WARNING: Removing unreachable block (ram,0x00050ef8) */ /* WARNING: Removing unreachable block (ram,0x0005109c) */ void FUN_00050d84(uint *param_1,int param_2,int *param_3) { int iVar1; uint uVar2; int iVar3; int iVar4; uint uVar5; uint uVar6; uint uVar7; undefined4 uVar8; uint uVar9; int iVar10; uint uVar11; ulonglong uVar12; longlong lVar13; undefined8 uVar14; int local_64; int local_50; int local_4c; uint local_48; uint local_2c; uint local_24; uint local_20; uint local_1c; *param_3 = 0; if (param_2 == 0) { return; } local_48 = 0x80000000; if (param_2 < 1) { iVar1 = param_2; if (param_2 < -0x1b) { iVar1 = -0x1c; } iVar1 = __udivsi3((iVar1 + 0x1b) - param_2,0x1c); local_64 = iVar1 * 0x1c + param_2 + 0x1c; local_4c = 0x24; local_50 = 0xd; LAB_00050e1c: local_1c = *param_1; local_24 = param_1[1]; iVar1 = iVar1 + 1; iVar10 = 0; do { iVar3 = local_50; if (iVar1 <= local_50) { iVar3 = iVar1; } iVar4 = (iVar3 + local_4c) * 8; uVar8 = *(undefined4 *)(&DAT_000662b0 + iVar4); uVar12 = __muldi3(uVar8,0,local_1c,0); local_20 = (uint)uVar12; lVar13 = __muldi3(uVar8,0,local_24,0); uVar12 = lVar13 + (uVar12 >> 0x20); uVar9 = (uint)(uVar12 >> 0x20); uVar8 = *(undefined4 *)(&DAT_000662b4 + iVar4); lVar13 = __muldi3(uVar8,0,local_1c,0); lVar13 = lVar13 + (uVar12 & 0xffffffff); local_2c = (uint)lVar13; uVar2 = (uint)((ulonglong)lVar13 >> 0x20); uVar14 = __muldi3(uVar8,0,local_24,0); uVar7 = uVar9 + (uint)uVar14; uVar6 = uVar7 + uVar2; uVar7 = (int)((ulonglong)uVar14 >> 0x20) + (uint)CARRY4(uVar9,(uint)uVar14) + (uint)CARRY4(uVar7,uVar2); iVar1 = iVar1 - iVar3; if (uVar7 < 0x80000000) { if ((uVar6 != 0xffffffff || uVar7 != 0x7fffffff) || (local_2c < 0xc0000000)) { uVar9 = uVar6 * 2 | local_2c >> 0x1f; uVar7 = uVar7 * 2 | uVar6 >> 0x1f; *param_1 = uVar9; param_1[1] = uVar7; local_2c = local_2c * 2 | local_20 >> 0x1f; local_20 = local_20 << 1; iVar4 = 1; uVar6 = uVar9; goto LAB_00050f50; } iVar4 = 0; *param_1 = 0; param_1[1] = 0x80000000; local_1c = 0; uVar9 = local_48; uVar2 = local_1c; } else { *param_1 = uVar6; param_1[1] = uVar7; iVar4 = 0; LAB_00050f50: uVar9 = uVar7; uVar2 = uVar6; if ((int)local_2c < 0) { local_1c = 1; if ((local_20 != 0 || local_2c != 0x80000000) || ((uVar6 & 1) != 0)) { uVar2 = uVar6 + 1; *param_1 = uVar2; local_24 = 0; uVar9 = uVar7 + (0xfffffffe < uVar6); param_1[1] = uVar9; if (uVar2 == 0 && uVar9 == 0) { *param_1 = uVar6 + 2; param_1[1] = uVar7 + (0xfffffffd < uVar6); uVar9 = local_24; uVar2 = local_1c; } } } } local_1c = uVar2; local_24 = uVar9; iVar10 = (*(short *)(&DAT_00066530 + (iVar3 + local_4c) * 2) - iVar4) + iVar10; } while (iVar1 != 0); *param_3 = iVar10; if (local_64 == 0) { return; } } else { iVar10 = 0; local_64 = param_2; if (0x1b < param_2) { iVar1 = -2 - param_2; if (-2 - param_2 < -0x37) { iVar1 = -0x38; } iVar1 = __udivsi3(iVar1 + param_2 + 0x1d,0x1c); local_64 = param_2 + iVar1 * -0x1c + -0x1b; local_4c = 0x19; local_50 = 0xb; goto LAB_00050e1c; } } uVar6 = *param_1; iVar1 = (local_64 + -1) * 8; uVar8 = *(undefined4 *)(&DAT_000662b0 + iVar1); uVar12 = __muldi3(uVar8,0,uVar6,0); uVar9 = (uint)uVar12; uVar7 = param_1[1]; lVar13 = __muldi3(uVar8,0,uVar7,0); uVar12 = lVar13 + (uVar12 >> 0x20); uVar5 = (uint)(uVar12 >> 0x20); uVar8 = *(undefined4 *)(&DAT_000662b4 + iVar1); lVar13 = __muldi3(uVar8,0,uVar6,0); lVar13 = lVar13 + (uVar12 & 0xffffffff); uVar6 = (uint)lVar13; uVar11 = (uint)((ulonglong)lVar13 >> 0x20); uVar14 = __muldi3(uVar8,0,uVar7,0); uVar7 = uVar5 + (uint)uVar14; uVar2 = uVar7 + uVar11; uVar7 = (int)((ulonglong)uVar14 >> 0x20) + (uint)CARRY4(uVar5,(uint)uVar14) + (uint)CARRY4(uVar7,uVar11); if (uVar7 < 0x80000000) { if ((uVar2 == 0xffffffff && uVar7 == 0x7fffffff) && (0xbfffffff < uVar6)) { iVar1 = 0; *param_1 = 0; param_1[1] = 0x80000000; goto LAB_00051122; } uVar5 = uVar2 * 2 | uVar6 >> 0x1f; uVar7 = uVar7 * 2 | uVar2 >> 0x1f; *param_1 = uVar5; param_1[1] = uVar7; uVar6 = uVar6 * 2 | uVar9 >> 0x1f; uVar9 = uVar9 << 1; iVar1 = 1; } else { *param_1 = uVar2; param_1[1] = uVar7; iVar1 = 0; uVar5 = uVar2; } if (((int)uVar6 < 0) && ((uVar9 != 0 || uVar6 != 0x80000000 || ((uVar5 & 1) != 0)))) { *param_1 = uVar5 + 1; uVar6 = uVar7 + (0xfffffffe < uVar5); param_1[1] = uVar6; if (uVar6 == 0 && uVar5 + 1 == 0) { *param_1 = uVar5 + 2; param_1[1] = uVar7 + (0xfffffffd < uVar5); } } LAB_00051122: *param_3 = (*(short *)(&DAT_00066530 + (local_64 + -1) * 2) - iVar1) + iVar10; return; } ### FUNC FUN_00051158 @ 00051158 undefined8 FUN_00051158(byte *param_1,int param_2,undefined4 param_3) { longlong lVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; byte *pbVar6; uint uVar7; uint uVar8; uint uVar9; bool bVar10; longlong lVar11; uint uStack_3c; uint local_2c; int local_24; undefined8 local_20; lVar1 = 0; pbVar6 = param_1 + param_2; if (0 < param_2) { do { local_20._4_4_ = (uint)((ulonglong)lVar1 >> 0x20); local_20._0_4_ = (uint)lVar1; lVar11 = __muldi3((uint)local_20,local_20._4_4_,10,0); local_20 = lVar1; lVar1 = lVar11 + (ulonglong)*param_1; uVar2 = (uint)lVar1; uVar3 = (uint)((ulonglong)lVar1 >> 0x20); param_1 = param_1 + 1; } while (param_1 < pbVar6); if (lVar1 != 0) { uVar5 = 0x20; if (uVar3 == 0) { uVar5 = 0; } uVar7 = uVar5 | 0x10; uVar9 = uVar7 - 0x20; local_2c = 0; uVar8 = 0; if ((int)uVar9 < 0) { uVar8 = uVar3 >> (uVar5 | 0x10); } uVar4 = uVar3 >> (uVar9 & 0xff); if ((int)uVar9 < 0) { uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 0x10); } if (uVar4 != 0 || uVar8 != 0) { uVar5 = uVar7; } uVar7 = uVar5 | 8; uVar9 = uVar7 - 0x20; uVar8 = 0; if ((int)uVar9 < 0) { uVar8 = uVar3 >> (uVar5 | 8); } uVar4 = uVar3 >> (uVar9 & 0xff); if ((int)uVar9 < 0) { uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 8); } if (uVar4 != 0 || uVar8 != 0) { uVar5 = uVar7; } uVar7 = uVar5 | 4; uVar9 = uVar7 - 0x20; uVar8 = 0; if ((int)uVar9 < 0) { uVar8 = uVar3 >> (uVar5 | 4); } uVar4 = uVar3 >> (uVar9 & 0xff); if ((int)uVar9 < 0) { uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 4); } if (uVar4 != 0 || uVar8 != 0) { uVar5 = uVar7; } uVar7 = uVar5 + 2; uVar9 = uVar5 - 0x1e; uVar8 = 0; if ((int)uVar9 < 0) { uVar8 = uVar3 >> uVar7; } uVar4 = uVar3 >> (uVar9 & 0xff); if ((int)uVar9 < 0) { uVar4 = uVar2 >> uVar7 | uVar3 << (0x1e - uVar5 & 0xff); } if (uVar4 != 0 || uVar8 != 0) { uVar5 = uVar7; } uVar7 = uVar5 + 1; uVar9 = uVar5 - 0x1f; uVar8 = 0; if ((int)uVar9 < 0) { uVar8 = uVar3 >> uVar7; } uVar4 = uVar3 >> (uVar9 & 0xff); if ((int)uVar9 < 0) { uVar4 = uVar2 >> uVar7 | uVar3 << (0x1f - uVar5 & 0xff); } if (uVar4 != 0 || uVar8 != 0) { uVar5 = uVar7; } uVar7 = uVar5 - 0x20; uVar8 = 0; if ((int)uVar7 < 0) { uVar8 = uVar3 >> uVar5; } uVar9 = uVar3 >> (uVar7 & 0xff); if ((int)uVar7 < 0) { uVar9 = uVar3 << (0x20 - uVar5 & 0xff) | uVar2 >> uVar5; } uVar7 = uVar5 + 1; if (uVar9 == 0 && uVar8 == 0) { uVar7 = uVar5; } uVar8 = 0x20 - uVar7; uVar5 = 0x40 - uVar7; if ((int)uVar8 < 0) { local_2c = uVar2 << (uVar5 & 0xff); } local_20._0_4_ = local_2c; local_20._4_4_ = uVar2 << (uVar8 & 0xff); if ((int)uVar8 < 0) { local_20._4_4_ = uVar2 >> (0x20 - uVar5 & 0xff) | uVar3 << (uVar5 & 0xff); } FUN_00050d84(&local_20,param_3,&local_24); local_24 = local_24 + uVar7; if (-0x3fe < local_24) { uVar2 = local_20._4_4_ >> 0xf; uVar3 = (uint)local_20 >> 0xf | local_20._4_4_ << 0x11; if ((((uint)local_20 & 0x4000) != 0) && (((uint)local_20 >> 0xf & 1) != 0 || ((uint)local_20 & 0x7ff) != 0)) { bVar10 = 0xfffffffe < uVar3; uVar3 = uVar3 + 1; uVar2 = uVar2 + bVar10; } uStack_3c = 0x7ff00000; uVar5 = 0; if (local_24 < 0x401) { uStack_3c = uVar2; uVar5 = uVar3; } goto LAB_000513c2; } if (local_24 < -0x4033) { LAB_0005139a: uVar8 = 0; uVar3 = 0; } else { uVar2 = -local_24 - 0x3fee; if (0x40 < (int)uVar2) goto LAB_0005139a; if (uVar2 == 0x40) { uVar4 = local_20._4_4_ >> 0x1f; uVar9 = local_20._4_4_ & 0x7fffffff; uVar8 = 0; uVar3 = 0; } else { uVar5 = -local_24 - 0x400e; local_2c = 1 << (uVar5 & 0xff); if ((int)uVar5 < 0) { local_2c = 1 >> (0x20 - uVar2 & 0xff); } uVar7 = 0; if ((int)uVar5 < 0) { uVar7 = 1 << (uVar2 & 0xff); } uVar9 = local_2c - (uVar7 < 2) & local_20._4_4_; uVar8 = local_20._4_4_ >> (uVar5 & 0xff); if ((int)uVar5 < 0) { uVar8 = local_20._4_4_ << (0x20 - uVar2 & 0xff) | (uint)local_20 >> (uVar2 & 0xff); } uVar4 = ~uVar8 & 1; uVar3 = 0; if ((int)uVar5 < 0) { uVar3 = local_20._4_4_ >> (uVar2 & 0xff); } local_20._0_4_ = (uint)local_20 & uVar7 - 2; } if ((uVar4 != 0) && (((uVar8 & 1) != 0 || (uint)local_20 != 0) || uVar9 != 0)) { bVar10 = 0xfffffffe < uVar8; uVar8 = uVar8 + 1; uVar5 = 0; uVar3 = uVar3 + bVar10; uStack_3c = 0; if (uVar3 == 0x100000 && uVar8 == 0) goto LAB_000513c2; } } uStack_3c = uVar3; uVar5 = uVar8; goto LAB_000513c2; } } uStack_3c = 0; uVar5 = 0; LAB_000513c2: return CONCAT44(uStack_3c,uVar5); } ### FUNC FUN_00051490 @ 00051490 /* WARNING: Removing unreachable block (ram,0x00051594) */ int FUN_00051490(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5, undefined4 param_6) { undefined4 *puVar1; size_t sVar2; char *pcVar3; char *pcVar4; char cVar5; char *pcVar6; int iVar7; char cVar8; char *pcVar9; char local_170 [32]; char acStack_150 [316]; local_170[0] = '%'; iVar7 = 1; if ((int)(param_2 * 0x100000) < 0) { local_170[1] = 0x2b; iVar7 = 2; } if ((int)(param_2 << 0x15) < 0) { local_170[iVar7] = '#'; iVar7 = iVar7 + 1; } local_170[iVar7] = '.'; local_170[iVar7 + 1] = '*'; if ((param_2 & 0xc0) == 0x40) { cVar8 = 'F'; cVar5 = 'f'; } else if ((param_2 & 0xc0) == 0x80) { cVar8 = 'E'; cVar5 = 'e'; } else { cVar8 = 'G'; cVar5 = 'g'; } if ((param_2 & 0x4000) == 0) { cVar8 = cVar5; } local_170[iVar7 + 2] = cVar8; local_170[iVar7 + 3] = '\0'; snprintf(acStack_150,0x13a,local_170,param_3,param_5,param_6); puVar1 = (undefined4 *)(param_1 + 0x118); sVar2 = strlen(acStack_150); pcVar3 = *(char **)(param_1 + 0x118); pcVar9 = *(char **)(param_1 + 0x10); if ((uint)((int)pcVar9 - (int)pcVar3) < sVar2) { if (pcVar9 != pcVar3) { __aeabi_memmove(pcVar3,acStack_150); pcVar3 = (char *)*puVar1; pcVar9 = *(char **)(param_1 + 0x10); } FUN_00051ae8(param_1,pcVar9 + (int)(acStack_150 + -(int)pcVar3),acStack_150 + sVar2); pcVar9 = *(char **)(param_1 + 0x10); } else { if (sVar2 != 0) { __aeabi_memmove(pcVar3,acStack_150,sVar2); pcVar9 = *(char **)(param_1 + 0x10); pcVar3 = (char *)*puVar1; } pcVar3 = pcVar3 + sVar2; if (pcVar3 != pcVar9) { __aeabi_memmove(pcVar3,pcVar9); pcVar9 = pcVar3 + (*(int *)(param_1 + 0x10) - (int)pcVar9); *(char **)(param_1 + 0x10) = pcVar9; } } pcVar4 = (char *)*puVar1; iVar7 = (int)pcVar9 - (int)pcVar4 >> 2; pcVar3 = pcVar4; if (0 < iVar7) { iVar7 = iVar7 + 1; do { cVar8 = *pcVar3; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_00051636; cVar8 = pcVar3[1]; pcVar6 = pcVar3 + 1; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c; cVar8 = pcVar3[2]; pcVar6 = pcVar3 + 2; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c; cVar8 = pcVar3[3]; pcVar6 = pcVar3 + 3; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c; iVar7 = iVar7 + -1; pcVar3 = pcVar3 + 4; } while (1 < iVar7); } iVar7 = (int)pcVar9 - (int)pcVar3; pcVar6 = pcVar9; if (iVar7 == 1) { LAB_00051624: cVar8 = *pcVar3; if (((cVar8 != '.') && (cVar8 != 'e')) && (cVar8 != 'E')) goto LAB_0005163c; } else if (iVar7 == 2) { LAB_00051614: cVar8 = *pcVar3; if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { pcVar3 = pcVar3 + 1; goto LAB_00051624; } } else { if (iVar7 != 3) goto LAB_0005163c; cVar8 = *pcVar3; if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { pcVar3 = pcVar3 + 1; goto LAB_00051614; } } LAB_00051636: pcVar6 = pcVar3; LAB_0005163c: return (int)pcVar6 - (int)pcVar4; } ### FUNC FUN_00051642 @ 00051642 /* WARNING: Removing unreachable block (ram,0x0005174a) */ int FUN_00051642(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5, undefined4 param_6) { undefined4 *puVar1; size_t sVar2; char *pcVar3; char *pcVar4; char cVar5; char *pcVar6; int iVar7; char cVar8; char *pcVar9; char local_170 [32]; char acStack_150 [316]; local_170[0] = '%'; iVar7 = 1; if ((int)(param_2 * 0x100000) < 0) { local_170[1] = 0x2b; iVar7 = 2; } if ((int)(param_2 << 0x15) < 0) { local_170[iVar7] = '#'; iVar7 = iVar7 + 1; } local_170[iVar7] = '.'; local_170[iVar7 + 1] = '*'; local_170[iVar7 + 2] = 'L'; if ((param_2 & 0xc0) == 0x40) { cVar8 = 'F'; cVar5 = 'f'; } else if ((param_2 & 0xc0) == 0x80) { cVar8 = 'E'; cVar5 = 'e'; } else { cVar8 = 'G'; cVar5 = 'g'; } if ((param_2 & 0x4000) == 0) { cVar8 = cVar5; } local_170[iVar7 + 3] = cVar8; local_170[iVar7 + 4] = '\0'; snprintf(acStack_150,0x13a,local_170,param_3,param_5,param_6); puVar1 = (undefined4 *)(param_1 + 0x118); sVar2 = strlen(acStack_150); pcVar3 = *(char **)(param_1 + 0x118); pcVar9 = *(char **)(param_1 + 0x10); if ((uint)((int)pcVar9 - (int)pcVar3) < sVar2) { if (pcVar9 != pcVar3) { __aeabi_memmove(pcVar3,acStack_150); pcVar3 = (char *)*puVar1; pcVar9 = *(char **)(param_1 + 0x10); } FUN_00051ae8(param_1,pcVar9 + (int)(acStack_150 + -(int)pcVar3),acStack_150 + sVar2); pcVar9 = *(char **)(param_1 + 0x10); } else { if (sVar2 != 0) { __aeabi_memmove(pcVar3,acStack_150,sVar2); pcVar9 = *(char **)(param_1 + 0x10); pcVar3 = (char *)*puVar1; } pcVar3 = pcVar3 + sVar2; if (pcVar3 != pcVar9) { __aeabi_memmove(pcVar3,pcVar9); pcVar9 = pcVar3 + (*(int *)(param_1 + 0x10) - (int)pcVar9); *(char **)(param_1 + 0x10) = pcVar9; } } pcVar4 = (char *)*puVar1; iVar7 = (int)pcVar9 - (int)pcVar4 >> 2; pcVar3 = pcVar4; if (0 < iVar7) { iVar7 = iVar7 + 1; do { cVar8 = *pcVar3; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517ec; cVar8 = pcVar3[1]; pcVar6 = pcVar3 + 1; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2; cVar8 = pcVar3[2]; pcVar6 = pcVar3 + 2; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2; cVar8 = pcVar3[3]; pcVar6 = pcVar3 + 3; if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2; iVar7 = iVar7 + -1; pcVar3 = pcVar3 + 4; } while (1 < iVar7); } iVar7 = (int)pcVar9 - (int)pcVar3; pcVar6 = pcVar9; if (iVar7 == 1) { LAB_000517da: cVar8 = *pcVar3; if (((cVar8 != '.') && (cVar8 != 'e')) && (cVar8 != 'E')) goto LAB_000517f2; } else if (iVar7 == 2) { LAB_000517ca: cVar8 = *pcVar3; if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { pcVar3 = pcVar3 + 1; goto LAB_000517da; } } else { if (iVar7 != 3) goto LAB_000517f2; cVar8 = *pcVar3; if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) { pcVar3 = pcVar3 + 1; goto LAB_000517ca; } } LAB_000517ec: pcVar6 = pcVar3; LAB_000517f2: return (int)pcVar6 - (int)pcVar4; } ### FUNC FUN_000517f8 @ 000517f8 void FUN_000517f8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { char *pcVar1; size_t sVar2; char acStack_150 [316]; undefined1 auStack_14 [4]; snprintf(acStack_150,0x13a,"%Lf",param_4,param_3,param_4); pcVar1 = strchr(acStack_150,0x2e); if (pcVar1 != (char *)0x0) { FUN_00051c30(param_1,acStack_150,pcVar1,auStack_14); return; } sVar2 = strlen(acStack_150); FUN_00051ae8(param_1,acStack_150,acStack_150 + sVar2); return; } ### FUNC FUN_00051848 @ 00051848 void FUN_00051848(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5) { undefined4 uVar1; undefined4 *puVar2; uint uVar3; int *piVar4; uint uVar5; int iVar6; uint uVar7; char *pcVar8; char *pcVar9; uint local_24; pcVar8 = *(char **)(param_1 + 0x118); pcVar9 = *(char **)(param_1 + 0x10); local_24 = 0x3ffffffe; if (param_5 != 1) { if (pcVar8 != pcVar9) { uVar1 = (**(code **)(*param_3 + 0x28))(param_3,*pcVar8); if ((int *)param_2[0x112] == param_2) { puVar2 = (undefined4 *)param_2[0x10]; iVar6 = 0x10 - ((int)puVar2 - (int)param_2 >> 2); } else { puVar2 = (undefined4 *)param_2[0x10]; iVar6 = *param_2 - (int)puVar2 >> 2; } if (iVar6 == 1) { uVar3 = (int)puVar2 - param_2[0x112] >> 2; uVar7 = uVar3; if (uVar3 < 2) { uVar7 = 1; } uVar5 = uVar3 + uVar7 + 1; uVar7 = 0x3ffffffe; if (uVar3 <= uVar5) { uVar7 = uVar5; } uVar3 = 0x3ffffffe; if (uVar5 < 0x3fffffff) { uVar3 = uVar7; } FUN_000506a4(param_2,uVar3); puVar2 = (undefined4 *)param_2[0x10]; } *puVar2 = uVar1; puVar2[1] = 0; param_2[0x10] = (int)(puVar2 + 1); } goto joined_r0x00051a58; } if (pcVar8 == pcVar9) goto joined_r0x00051a58; while (*pcVar8 != '.') { uVar1 = (**(code **)(*param_3 + 0x28))(); pcVar8 = pcVar8 + 1; piVar4 = (int *)param_2[0x112]; if (piVar4 == param_2) { puVar2 = (undefined4 *)param_2[0x10]; iVar6 = 0x10 - ((int)puVar2 - (int)param_2 >> 2); } else { puVar2 = (undefined4 *)param_2[0x10]; iVar6 = *param_2 - (int)puVar2 >> 2; } if (iVar6 == 1) { uVar3 = (int)puVar2 - (int)piVar4 >> 2; uVar7 = uVar3; if (uVar3 < 2) { uVar7 = 1; } uVar5 = uVar3 + uVar7 + 1; uVar7 = local_24; if (uVar3 <= uVar5) { uVar7 = uVar5; } uVar3 = local_24; if (uVar5 < 0x3fffffff) { uVar3 = uVar7; } FUN_000506a4(param_2,uVar3); puVar2 = (undefined4 *)param_2[0x10]; } *puVar2 = uVar1; puVar2[1] = 0; param_2[0x10] = (int)(puVar2 + 1); if (pcVar9 == pcVar8) { return; } } piVar4 = (int *)param_2[0x112]; if (piVar4 == param_2) { puVar2 = (undefined4 *)param_2[0x10]; if ((int)puVar2 - (int)param_2 >> 2 == 0xf) goto LAB_00051a1a; } else { puVar2 = (undefined4 *)param_2[0x10]; if (*param_2 - (int)puVar2 >> 2 == 1) { LAB_00051a1a: uVar3 = (int)puVar2 - (int)piVar4 >> 2; uVar7 = uVar3; if (uVar3 < 2) { uVar7 = 1; } uVar5 = uVar3 + uVar7 + 1; uVar7 = local_24; if (uVar3 <= uVar5) { uVar7 = uVar5; } uVar3 = local_24; if (uVar5 < 0x3fffffff) { uVar3 = uVar7; } FUN_000506a4(param_2,uVar3); puVar2 = (undefined4 *)param_2[0x10]; } } *puVar2 = param_4; puVar2[1] = 0; param_2[0x10] = (int)(puVar2 + 1); joined_r0x00051a58: if ((pcVar8 != pcVar9) && (pcVar8 = pcVar8 + 1, pcVar8 != pcVar9)) { do { uVar1 = (**(code **)(*param_3 + 0x28))(param_3,*pcVar8); if ((int *)param_2[0x112] == param_2) { puVar2 = (undefined4 *)param_2[0x10]; if ((int)puVar2 - (int)param_2 >> 2 == 0xf) goto LAB_000519c4; } else { puVar2 = (undefined4 *)param_2[0x10]; if (*param_2 - (int)puVar2 >> 2 == 1) { LAB_000519c4: uVar3 = (int)puVar2 - param_2[0x112] >> 2; uVar7 = uVar3; if (uVar3 < 2) { uVar7 = 1; } uVar5 = uVar3 + uVar7 + 1; uVar7 = local_24; if (uVar3 <= uVar5) { uVar7 = uVar5; } uVar3 = local_24; if (uVar5 < 0x3fffffff) { uVar3 = uVar7; } FUN_000506a4(param_2,uVar3); puVar2 = (undefined4 *)param_2[0x10]; } } *puVar2 = uVar1; puVar2[1] = 0; param_2[0x10] = (int)(puVar2 + 1); pcVar8 = pcVar8 + 1; } while (pcVar9 != pcVar8); } return; } ### FUNC FUN_00051a60 @ 00051a60 void FUN_00051a60(int param_1,int param_2) { char *pcVar1; char *pcVar2; char *pcVar3; int iVar4; char *pcVar5; if (param_2 == 0x2e) { return; } pcVar3 = *(char **)(param_1 + 0x118); pcVar2 = *(char **)(param_1 + 0x10); if ((int)pcVar2 - (int)pcVar3 == 0) { return; } iVar4 = (int)pcVar2 - (int)pcVar3 >> 2; pcVar5 = pcVar3; if (0 < iVar4) { iVar4 = iVar4 + 1; do { pcVar1 = pcVar5; if ((((*pcVar5 == '.') || (pcVar1 = pcVar5 + 1, pcVar5[1] == '.')) || (pcVar1 = pcVar5 + 2, pcVar5[2] == '.')) || (pcVar1 = pcVar5 + 3, pcVar5[3] == '.')) goto joined_r0x00051ada; iVar4 = iVar4 + -1; pcVar5 = pcVar5 + 4; } while (1 < iVar4); } iVar4 = (int)pcVar2 - (int)pcVar5; if (iVar4 != 1) { if (iVar4 != 2) { if (iVar4 != 3) { return; } pcVar1 = pcVar5; if (*pcVar5 == '.') goto joined_r0x00051ada; pcVar5 = pcVar5 + 1; } pcVar1 = pcVar5; if (*pcVar5 == '.') goto joined_r0x00051ada; pcVar5 = pcVar5 + 1; } pcVar1 = pcVar5; if (*pcVar5 != '.') { return; } joined_r0x00051ada: if ((pcVar1 != pcVar2) && ((int)pcVar1 - (int)pcVar3 != -1)) { pcVar3[(int)pcVar1 - (int)pcVar3] = (char)param_2; } return; } ### FUNC FUN_00051ae8 @ 00051ae8 int * FUN_00051ae8(int *param_1,undefined1 *param_2,undefined1 *param_3) { int *piVar1; undefined1 *puVar2; int *piVar3; undefined1 *puVar4; uint uVar5; uint uVar6; uint uVar7; uint uVar8; int *piVar9; uint uVar10; int *piVar11; if (param_2 != param_3) { uVar10 = (int)param_3 - (int)param_2; piVar9 = (int *)param_1[0x46]; piVar1 = param_1 + 0x46; if (piVar9 == param_1) { puVar4 = (undefined1 *)param_1[4]; uVar5 = (int)param_1 + (0x10 - (int)puVar4); } else { puVar4 = (undefined1 *)param_1[4]; uVar5 = *param_1 - (int)puVar4; } if (uVar10 < uVar5) { puVar2 = param_2 + 1; if (0 < (int)param_3 - (int)puVar2) { param_3 = param_3 + (1 - (int)puVar2); do { puVar4 = puVar4 + 1; *puVar4 = *puVar2; param_3 = param_3 + -1; puVar2 = puVar2 + 1; } while (1 < (int)param_3); puVar4 = (undefined1 *)param_1[4]; } puVar4[uVar10] = 0; *(undefined1 *)param_1[4] = *param_2; param_1[4] = param_1[4] + uVar10; } else { uVar5 = (int)puVar4 - (int)piVar9; if (-uVar5 - 2 < uVar10) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar7 = uVar5; if (uVar5 <= uVar10) { uVar7 = uVar10; } uVar8 = uVar5 + uVar7 + 1; uVar6 = 0xfffffffe; if (uVar5 <= uVar8) { uVar6 = uVar8; } uVar8 = 0xfffffffe; if (uVar5 + uVar7 != -2) { uVar8 = uVar6; } if (uVar8 >> 1 < 0x81) { piVar3 = param_1 + 5; } else { piVar3 = (int *)operator_new(uVar8); puVar4 = (undefined1 *)param_1[4]; piVar9 = (int *)*piVar1; } piVar11 = piVar3; if (0 < (int)puVar4 - (int)piVar9) { puVar4 = puVar4 + (1 - (int)piVar9); do { *(char *)piVar11 = (char)*piVar9; puVar4 = puVar4 + -1; piVar11 = (int *)((int)piVar11 + 1); piVar9 = (int *)((int)piVar9 + 1); } while (1 < (int)puVar4); } if (0 < (int)uVar10) { param_3 = param_3 + (1 - (int)param_2); do { *(undefined1 *)piVar11 = *param_2; param_3 = param_3 + -1; piVar11 = (int *)((int)piVar11 + 1); param_2 = param_2 + 1; } while (1 < (int)param_3); } *(undefined1 *)piVar11 = 0; piVar9 = (int *)*piVar1; if (((piVar9 != param_1) && (piVar9 != (int *)0x0)) && (param_1 + 5 != piVar9)) { if ((uint)(*param_1 - (int)piVar9) < 0x81) { std::__node_alloc::_M_deallocate(piVar9,*param_1 - (int)piVar9); } else { operator_delete(piVar9); } } param_1[4] = (int)piVar11; *param_1 = (int)((int)piVar3 + uVar8); *piVar1 = (int)piVar3; } } return param_1; } ### FUNC FUN_00051c30 @ 00051c30 int * FUN_00051c30(int *param_1,undefined1 *param_2,undefined1 *param_3) { undefined1 *puVar1; int *piVar2; int *piVar3; int *piVar4; undefined1 *puVar5; undefined1 *puVar6; undefined1 *puVar7; int *piVar8; int *local_1c; if (param_2 != param_3) { puVar1 = param_3 + -(int)param_2; piVar4 = (int *)param_1[0x46]; piVar2 = param_1 + 0x46; if (piVar4 == param_1) { local_1c = (int *)param_1[4]; puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)local_1c)); } else { local_1c = (int *)param_1[4]; puVar6 = (undefined1 *)(*param_1 - (int)local_1c); } piVar8 = param_1 + 4; if (puVar1 < puVar6) { *(undefined1 *)local_1c = *param_2; param_2 = param_2 + 1; if (param_2 != param_3) { __aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2); } puVar1[*piVar8] = 0; *piVar8 = (int)(puVar1 + *piVar8); } else { puVar6 = (undefined1 *)((int)local_1c - (int)piVar4); if ((undefined1 *)(-2 - (int)puVar6) < puVar1) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } puVar7 = puVar6; if (puVar6 <= puVar1) { puVar7 = puVar1; } puVar7 = puVar6 + (int)puVar7; puVar5 = (undefined1 *)0xfffffffe; if (puVar6 <= puVar7 + 1) { puVar5 = puVar7 + 1; } puVar6 = (undefined1 *)0xfffffffe; if (puVar7 != (undefined1 *)0xfffffffe) { puVar6 = puVar5; } if ((uint)puVar6 >> 1 < 0x81) { piVar3 = param_1 + 5; } else { piVar3 = (int *)operator_new((uint)puVar6); local_1c = (int *)*piVar8; piVar4 = (int *)*piVar2; } piVar8 = piVar3; if (local_1c != piVar4) { __aeabi_memcpy(piVar3,piVar4,(int)local_1c - (int)piVar4); piVar8 = (int *)((int)piVar3 + ((int)local_1c - (int)piVar4)); } __aeabi_memcpy(piVar8,param_2); *(undefined1 *)((int)piVar8 + (int)puVar1) = 0; piVar4 = (int *)*piVar2; if (((piVar4 != param_1) && (piVar4 != (int *)0x0)) && (param_1 + 5 != piVar4)) { if ((uint)(*param_1 - (int)piVar4) < 0x81) { std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4); } else { operator_delete(piVar4); } } param_1[4] = (int)((int)piVar8 + (int)puVar1); *param_1 = (int)((int)piVar3 + (int)puVar6); *piVar2 = (int)piVar3; } } return param_1; } ### FUNC do_decimal_point @ 00051d58 /* std::numpunct::do_decimal_point() const */ undefined4 std::numpunct::do_decimal_point(void) { return 0x2e; } ### FUNC do_thousands_sep @ 00051d5c /* std::numpunct::do_thousands_sep() const */ undefined4 std::numpunct::do_thousands_sep(void) { return 0x2c; } ### FUNC do_grouping @ 00051d60 /* std::numpunct::do_grouping() const */ void __thiscall std::numpunct::do_grouping(numpunct *this) { *this = (numpunct)0x0; *(numpunct **)(this + 0x10) = this; *(numpunct **)(this + 0x14) = this; return; } ### FUNC do_truename @ 00051d6c /* std::numpunct::do_truename() const */ void __thiscall std::numpunct::do_truename(numpunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,&DAT_00051d84,auStack_c); return; } ### FUNC do_falsename @ 00051d8c /* std::numpunct::do_falsename() const */ void __thiscall std::numpunct::do_falsename(numpunct *this) { undefined1 auStack_c [4]; FUN_00031c38(this,"false",auStack_c); return; } ### FUNC ~numpunct @ 00051dac /* std::numpunct::~numpunct() */ void __thiscall std::numpunct::~numpunct(numpunct *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~numpunct @ 00051db6 /* std::numpunct::~numpunct() */ void __thiscall std::numpunct::~numpunct(numpunct *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_decimal_point @ 00051dd6 /* std::numpunct::do_decimal_point() const */ undefined4 std::numpunct::do_decimal_point(void) { return 0x2e; } ### FUNC do_thousands_sep @ 00051dda /* std::numpunct::do_thousands_sep() const */ undefined4 std::numpunct::do_thousands_sep(void) { return 0x2c; } ### FUNC do_grouping @ 00051dde /* std::numpunct::do_grouping() const */ void __thiscall std::numpunct::do_grouping(numpunct *this) { *this = (numpunct)0x0; *(numpunct **)(this + 0x10) = this; *(numpunct **)(this + 0x14) = this; return; } ### FUNC do_truename @ 00051de8 /* std::numpunct::do_truename() const */ void __thiscall std::numpunct::do_truename(numpunct *this) { size_t sVar1; *(numpunct **)(this + 0x40) = this; *(numpunct **)(this + 0x44) = this; sVar1 = wcslen(L"true"); FUN_0004fe38(this,&DAT_00051e34,&DAT_00051e34 + sVar1 * 4); return; } ### FUNC do_falsename @ 00051e48 /* std::numpunct::do_falsename() const */ void __thiscall std::numpunct::do_falsename(numpunct *this) { size_t sVar1; *(numpunct **)(this + 0x40) = this; *(numpunct **)(this + 0x44) = this; sVar1 = wcslen(L"false"); FUN_0004fe38(this,L"false",L"false" + sVar1); return; } ### FUNC ~numpunct @ 00051eac /* std::numpunct::~numpunct() */ void __thiscall std::numpunct::~numpunct(numpunct *this) { locale::facet::~facet((facet *)this); return; } ### FUNC ~numpunct @ 00051eb6 /* std::numpunct::~numpunct() */ void __thiscall std::numpunct::~numpunct(numpunct *this) { locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC __write_formatted_time @ 00051ed8 /* std::priv::__write_formatted_time(std::priv::__basic_iostring&, std::ctype const&, char, char, std::priv::_Time_Info const&, tm const*) */ void std::priv::__write_formatted_time (__basic_iostring *param_1,ctype *param_2,char param_3,char param_4, _Time_Info *param_5,tm *param_6) { FUN_00051ef0(param_1,param_2,(int)param_3,(int)param_4,param_5,param_6); return; } ### FUNC FUN_00051ef0 @ 00051ef0 void FUN_00051ef0(undefined4 param_1,int *param_2,int param_3,int param_4,int param_5,tm *param_6) { int *piVar1; int iVar2; undefined4 uVar3; uint uVar4; int iVar5; int extraout_r1; int extraout_r1_00; int extraout_r1_01; int extraout_r1_02; int extraout_r1_03; uint extraout_r1_04; int extraout_r1_05; int *piVar6; int extraout_r1_06; time_t extraout_r1_07; uint uVar7; int extraout_r1_08; int extraout_r1_09; int extraout_r1_10; int extraout_r1_11; int extraout_r1_12; char *pcVar8; int iVar9; int iVar10; time_t tVar11; code *pcVar12; undefined1 uVar13; int iVar14; char *pcVar15; char *pcVar16; undefined1 auStack_a8 [4]; int local_a4 [4]; int *local_94; int *local_90; undefined1 auStack_8c [4]; int local_88 [4]; int *local_78; int *local_74; undefined1 auStack_70 [4]; int local_6c [4]; int *local_5c; int *local_58; char acStack_54 [64]; switch(param_3) { case 0x25: pcVar12 = *(code **)(*param_2 + 0x18); uVar3 = 0x25; goto LAB_00052440; case 0x41: param_5 = param_5 + param_6->tm_wday * 0x18; uVar3 = *(undefined4 *)(param_5 + 0x130); iVar2 = 0x4d; goto LAB_000520c0; case 0x42: param_5 = param_5 + param_6->tm_mon * 0x18; uVar3 = *(undefined4 *)(param_5 + 0x2f8); iVar2 = 0xbf; goto LAB_000520c0; case 0x43: iVar2 = param_6->tm_mday; goto LAB_00052320; case 0x44: pcVar15 = *(char **)(param_5 + 0x28); pcVar8 = *(char **)(param_5 + 0x2c); while (pcVar15 != pcVar8) { if (*pcVar8 == '%') { pcVar16 = pcVar8 + 2; if (pcVar8[1] != '#') { pcVar16 = pcVar8 + 1; } uVar13 = 0; if (pcVar8[1] == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); pcVar8 = pcVar16 + 1; } else { FUN_00054550(param_1,1); pcVar8 = pcVar8 + 1; } } break; case 0x47: case 0x67: iVar9 = param_6->tm_year; iVar5 = param_6->tm_wday; iVar14 = param_6->tm_yday; uVar4 = iVar9 + 0x76c; __aeabi_idivmod((iVar14 + 0x17e) - iVar5,7); iVar2 = (iVar14 + 3) - extraout_r1; if (iVar2 < 0) { uVar7 = iVar9 + 0x76b; iVar2 = 0x16d; if ((uVar7 & 3) == 0) { __aeabi_idivmod(uVar7,100); iVar2 = 0x16e; if (extraout_r1_08 == 0) { __aeabi_idivmod(uVar7,400); iVar2 = 0x16e; if (extraout_r1_09 != 0) { iVar2 = 0x16d; } } } __aeabi_idivmod((iVar2 + iVar14 + 0x17e) - iVar5,7); iVar2 = (iVar2 + iVar14 + 3) - extraout_r1_10; } else { iVar10 = 0x16d; if ((uVar4 & 3) == 0) { __aeabi_idivmod(uVar4,100); iVar10 = 0x16e; if (extraout_r1_00 == 0) { __aeabi_idivmod(uVar4,400); iVar10 = 0x16e; if (extraout_r1_01 != 0) { iVar10 = 0x16d; } } } __aeabi_idivmod(((iVar14 - iVar10) + 0x17e) - iVar5,7); iVar5 = ((iVar14 - iVar10) + 3) - extraout_r1_02; uVar7 = iVar9 + 0x76d; if (iVar5 < 0) { uVar7 = uVar4; } if (-1 < iVar5) { iVar2 = iVar5; } } if (param_3 != 0x47) { if (param_3 == 0x67) { __aeabi_idivmod(uVar7,100); __aeabi_idivmod(extraout_r1_03 + 100,100); uVar7 = extraout_r1_04; } else { iVar2 = __divsi3(iVar2,7); uVar7 = iVar2 + 1; } } uVar4 = FUN_00050030(acStack_54,0,uVar7); goto LAB_000525d2; case 0x48: if (param_4 == 0x23) { pcVar8 = "%ld"; } else { pcVar8 = "%.2ld"; } sprintf(acStack_54,pcVar8,param_6->tm_hour); iVar2 = param_6->tm_hour; goto LAB_000525ba; case 0x49: if (param_4 == 0x23) { pcVar8 = "%ld"; } else { pcVar8 = "%.2ld"; } __aeabi_idivmod(param_6->tm_hour,0xc); iVar2 = 0xc; if (extraout_r1_11 != 0) { iVar2 = extraout_r1_11; } sprintf(acStack_54,pcVar8,iVar2); __aeabi_idivmod(param_6->tm_hour,0xc); uVar4 = 2; if ((extraout_r1_12 != 0) && (uVar4 = 1, 9 < extraout_r1_12)) { uVar4 = 2; } if (param_4 != 0x23) { uVar4 = 2; } uVar4 = uVar4 | (uint)acStack_54; goto LAB_000525d2; case 0x4d: if (param_4 == 0x23) { pcVar8 = "%ld"; } else { pcVar8 = "%.2ld"; } sprintf(acStack_54,pcVar8,param_6->tm_min); iVar2 = param_6->tm_min; goto LAB_000525ba; case 0x52: FUN_00031c38(local_6c,&DAT_000648a8,auStack_70); piVar1 = local_58; local_90 = local_58; while (local_5c != piVar1) { local_58 = local_90; if ((char)*piVar1 == '%') { piVar6 = (int *)((int)piVar1 + 2); if (*(char *)((int)piVar1 + 1) != '#') { piVar6 = (int *)((int)piVar1 + 1); } uVar13 = 0; if (*(char *)((int)piVar1 + 1) == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6); piVar1 = (int *)((int)piVar6 + 1); local_90 = local_58; } else { FUN_00054550(param_1,1); piVar1 = (int *)((int)piVar1 + 1); local_90 = local_58; } } if ((local_90 != local_6c) && (local_90 != (int *)0x0)) { if (0x80 < (uint)(local_6c[0] - (int)local_90)) { LAB_00052652: operator_delete(local_90); return; } std::__node_alloc::_M_deallocate(local_90,local_6c[0] - (int)local_90); } break; case 0x53: if (param_4 == 0x23) { pcVar8 = "%ld"; } else { pcVar8 = "%.2ld"; } sprintf(acStack_54,pcVar8,param_6->tm_sec); iVar2 = param_6->tm_sec; goto LAB_000525ba; case 0x54: FUN_00031c38(local_a4,&DAT_00066294,auStack_a8); piVar1 = local_90; while (local_94 != piVar1) { if ((char)*piVar1 == '%') { piVar6 = (int *)((int)piVar1 + 2); if (*(char *)((int)piVar1 + 1) != '#') { piVar6 = (int *)((int)piVar1 + 1); } uVar13 = 0; if (*(char *)((int)piVar1 + 1) == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6); piVar1 = (int *)((int)piVar6 + 1); } else { FUN_00054550(param_1,1); piVar1 = (int *)((int)piVar1 + 1); } } if ((local_90 != local_a4) && (local_90 != (int *)0x0)) { if (0x80 < (uint)(local_a4[0] - (int)local_90)) goto LAB_00052652; std::__node_alloc::_M_deallocate(local_90,local_a4[0] - (int)local_90); } break; case 0x55: iVar2 = (param_6->tm_yday + 7) - param_6->tm_wday; goto LAB_00052218; case 0x57: iVar2 = 1; if (param_6->tm_wday != 0) { iVar2 = 8 - param_6->tm_wday; } iVar2 = param_6->tm_yday + iVar2; LAB_00052218: tVar11 = __divsi3(iVar2,7); goto LAB_00052482; case 0x58: pcVar15 = *(char **)(param_5 + 0x10); pcVar8 = *(char **)(param_5 + 0x14); while (pcVar15 != pcVar8) { if (*pcVar8 == '%') { pcVar16 = pcVar8 + 2; if (pcVar8[1] != '#') { pcVar16 = pcVar8 + 1; } uVar13 = 0; if (pcVar8[1] == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); pcVar8 = pcVar16 + 1; } else { FUN_00054550(param_1,1); pcVar8 = pcVar8 + 1; } } break; case 0x59: tVar11 = param_6->tm_year + 0x76c; goto LAB_00052482; case 0x61: param_5 = param_5 + param_6->tm_wday * 0x18; uVar3 = *(undefined4 *)(param_5 + 0x88); iVar2 = 0x8c; goto LAB_00052346; case 0x62: case 0x68: param_5 = param_5 + param_6->tm_mon * 0x18; uVar3 = *(undefined4 *)(param_5 + 0x1d8); iVar2 = 0x77; LAB_000520c0: iVar2 = iVar2 << 2; LAB_00052346: FUN_0003dfb8(param_1,*(undefined4 *)(param_5 + iVar2),uVar3,local_6c); return; case 99: iVar2 = param_5 + 0x30; if (param_4 == 0x23) { iVar2 = param_5 + 0x60; } pcVar15 = *(char **)(iVar2 + 0x10); pcVar8 = *(char **)(iVar2 + 0x14); while (pcVar15 != pcVar8) { if (*pcVar8 == '%') { pcVar16 = pcVar8 + 2; if (pcVar8[1] != '#') { pcVar16 = pcVar8 + 1; } uVar13 = 0; if (pcVar8[1] == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); pcVar8 = pcVar16 + 1; } else { FUN_00054550(param_1,1); pcVar8 = pcVar8 + 1; } } break; case 100: if (param_4 == 0x23) { pcVar8 = "%ld"; } else { pcVar8 = "%.2ld"; } sprintf(acStack_54,pcVar8,param_6->tm_mday); iVar2 = param_6->tm_mday; LAB_000525ba: uVar4 = 1; if (9 < iVar2) { LAB_000525c2: uVar4 = 2; } LAB_000525c4: if (param_4 != 0x23) { uVar4 = 2; } uVar4 = uVar4 | (uint)acStack_54; goto LAB_000525d2; case 0x65: iVar2 = param_6->tm_mday; goto LAB_00052320; case 0x6a: tVar11 = param_6->tm_yday + 1; goto LAB_00052482; case 0x6b: iVar2 = param_6->tm_hour; goto LAB_00052320; case 0x6c: __aeabi_idivmod(param_6->tm_hour,0xc); iVar2 = extraout_r1_05; LAB_00052320: sprintf(acStack_54,"%2ld",iVar2); uVar4 = (uint)acStack_54 | 2; goto LAB_000525d2; case 0x6d: if (param_4 == 0x23) { pcVar8 = "%ld"; } else { pcVar8 = "%.2ld"; } sprintf(acStack_54,pcVar8,param_6->tm_mon + 1); uVar4 = 1; if (8 < param_6->tm_mon) goto LAB_000525c2; goto LAB_000525c4; case 0x6e: pcVar12 = *(code **)(*param_2 + 0x18); uVar3 = 10; LAB_00052440: uVar3 = (*pcVar12)(param_2,uVar3); FUN_00054550(param_1,1,uVar3); return; case 0x70: iVar2 = __divsi3(param_6->tm_hour,0xc); param_5 = param_5 + iVar2 * 0x18; uVar3 = *(undefined4 *)(param_5 + 0x418); iVar2 = 0x41c; goto LAB_00052346; case 0x72: FUN_00031c38(local_88,&DAT_000662a4,auStack_8c); piVar1 = local_74; local_90 = local_74; while (local_78 != piVar1) { local_74 = local_90; if ((char)*piVar1 == '%') { piVar6 = (int *)((int)piVar1 + 2); if (*(char *)((int)piVar1 + 1) != '#') { piVar6 = (int *)((int)piVar1 + 1); } uVar13 = 0; if (*(char *)((int)piVar1 + 1) == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6); piVar1 = (int *)((int)piVar6 + 1); local_90 = local_74; } else { FUN_00054550(param_1,1); piVar1 = (int *)((int)piVar1 + 1); local_90 = local_74; } } if ((local_90 != local_88) && (local_90 != (int *)0x0)) { if (0x80 < (uint)(local_88[0] - (int)local_90)) goto LAB_00052652; std::__node_alloc::_M_deallocate(local_90,local_88[0] - (int)local_90); } break; case 0x73: tVar11 = mktime(param_6); goto LAB_00052482; case 0x74: uVar3 = (**(code **)(*param_2 + 0x18))(param_2,9); FUN_00054550(param_1,1,uVar3); goto LAB_00052452; case 0x75: LAB_00052452: __aeabi_idivmod(param_6->tm_wday + 6,7); uVar4 = FUN_00050030(acStack_54,0,extraout_r1_06 + 1); goto LAB_000525d2; case 0x77: tVar11 = param_6->tm_wday; goto LAB_00052482; case 0x78: iVar2 = param_5 + 0x18; if (param_4 == 0x23) { iVar2 = param_5 + 0x48; } pcVar15 = *(char **)(iVar2 + 0x10); pcVar8 = *(char **)(iVar2 + 0x14); while (pcVar15 != pcVar8) { if (*pcVar8 == '%') { pcVar16 = pcVar8 + 2; if (pcVar8[1] != '#') { pcVar16 = pcVar8 + 1; } uVar13 = 0; if (pcVar8[1] == '#') { uVar13 = 0x23; } FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6); pcVar8 = pcVar16 + 1; } else { FUN_00054550(param_1,1); pcVar8 = pcVar8 + 1; } } break; case 0x79: __aeabi_idivmod(param_6->tm_year + 0x76c,100); tVar11 = extraout_r1_07; LAB_00052482: uVar4 = FUN_00050030(acStack_54,0,tVar11); LAB_000525d2: FUN_00051c30(param_1,acStack_54,uVar4,local_6c); } return; } ### FUNC __write_formatted_time @ 0005271c /* std::priv::__write_formatted_time(std::priv::__basic_iostring&, std::ctype const&, char, char, std::priv::_WTime_Info const&, tm const*) */ void std::priv::__write_formatted_time (__basic_iostring *param_1,ctype *param_2,char param_3,char param_4, _WTime_Info *param_5,tm *param_6) { FUN_00052734(param_1,param_2,(int)param_3,(int)param_4,param_5,param_6); return; } ### FUNC FUN_00052734 @ 00052734 void FUN_00052734(int *param_1,int *param_2,int param_3,int param_4,int param_5,tm *param_6) { undefined4 uVar1; uint uVar2; int iVar3; int iVar4; int iVar5; int extraout_r1; int extraout_r1_00; int extraout_r1_01; int extraout_r1_02; int extraout_r1_03; uint extraout_r1_04; int extraout_r1_05; undefined4 *puVar6; time_t extraout_r1_06; int extraout_r1_07; int extraout_r1_08; int extraout_r1_09; int extraout_r1_10; int extraout_r1_11; char *pcVar7; int extraout_r1_12; int iVar8; int iVar9; time_t tVar10; code *pcVar11; uint uVar12; uint uVar13; int *piVar14; undefined1 auStack_190 [4]; int local_18c [5]; int *local_178; undefined1 auStack_174 [4]; int local_170 [5]; int *local_15c; undefined1 auStack_158 [4]; char acStack_154 [64]; int local_114 [5]; int *local_100; switch(param_3) { case 0x25: pcVar11 = *(code **)(*param_2 + 0x28); uVar1 = 0x25; goto LAB_00052b7e; default: goto switchD_0005275e_caseD_26; case 0x41: param_5 = param_5 + param_6->tm_wday * 0x48; uVar1 = *(undefined4 *)(param_5 + 0x2b0); iVar4 = 0x2b4; goto LAB_00052b1e; case 0x42: param_5 = param_5 + param_6->tm_mon * 0x48; uVar1 = *(undefined4 *)(param_5 + 0x808); iVar4 = 0x80c; goto LAB_00052b1e; case 0x43: iVar4 = param_6->tm_mday; goto LAB_00052a90; case 0x44: iVar4 = param_5 + 0x18; goto LAB_00052b6c; case 0x47: case 0x67: iVar3 = param_6->tm_year; iVar5 = param_6->tm_wday; iVar8 = param_6->tm_yday; uVar2 = iVar3 + 0x76c; __aeabi_idivmod((iVar8 + 0x17e) - iVar5,7); iVar4 = (iVar8 + 3) - extraout_r1; if (iVar4 < 0) { uVar12 = iVar3 + 0x76b; iVar4 = 0x16d; if ((uVar12 & 3) == 0) { __aeabi_idivmod(uVar12,100); iVar4 = 0x16e; if (extraout_r1_07 == 0) { __aeabi_idivmod(uVar12,400); iVar4 = 0x16e; if (extraout_r1_08 != 0) { iVar4 = 0x16d; } } } __aeabi_idivmod((iVar4 + iVar8 + 0x17e) - iVar5,7); iVar4 = (iVar4 + iVar8 + 3) - extraout_r1_09; } else { iVar9 = 0x16d; if ((uVar2 & 3) == 0) { __aeabi_idivmod(uVar2,100); iVar9 = 0x16e; if (extraout_r1_00 == 0) { __aeabi_idivmod(uVar2,400); iVar9 = 0x16e; if (extraout_r1_01 != 0) { iVar9 = 0x16d; } } } __aeabi_idivmod(((iVar8 - iVar9) + 0x17e) - iVar5,7); iVar5 = ((iVar8 - iVar9) + 3) - extraout_r1_02; uVar12 = iVar3 + 0x76d; if (iVar5 < 0) { uVar12 = uVar2; } if (-1 < iVar5) { iVar4 = iVar5; } } if (param_3 != 0x47) { if (param_3 == 0x67) { __aeabi_idivmod(uVar12,100); __aeabi_idivmod(extraout_r1_03 + 100,100); uVar12 = extraout_r1_04; } else { iVar4 = __divsi3(iVar4,7); uVar12 = iVar4 + 1; } } iVar4 = FUN_00050030(acStack_154,0,uVar12); (**(code **)(*param_2 + 0x2c))(param_2,acStack_154,iVar4,local_114); iVar4 = iVar4 - (int)acStack_154; goto LAB_00052e3e; case 0x48: if (param_4 == 0x23) { pcVar7 = "%ld"; } else { pcVar7 = "%.2ld"; } sprintf(acStack_154,pcVar7,param_6->tm_hour); iVar4 = param_6->tm_hour; goto LAB_00052d1e; case 0x49: if (param_4 == 0x23) { pcVar7 = "%ld"; } else { pcVar7 = "%.2ld"; } __aeabi_idivmod(param_6->tm_hour,0xc); iVar4 = 0xc; if (extraout_r1_10 != 0) { iVar4 = extraout_r1_10; } sprintf(acStack_154,pcVar7,iVar4); __aeabi_idivmod(param_6->tm_hour,0xc); uVar2 = 1; if (extraout_r1_11 == 0) { uVar2 = 2; } if (9 < extraout_r1_11) { uVar2 = 2; } if (param_4 != 0x23) { uVar2 = 2; } uVar12 = (uint)acStack_154 | uVar2; pcVar11 = *(code **)(*param_2 + 0x2c); goto LAB_00052d44; case 0x4d: if (param_4 == 0x23) { pcVar7 = "%ld"; } else { pcVar7 = "%.2ld"; } sprintf(acStack_154,pcVar7,param_6->tm_min); iVar4 = param_6->tm_min; goto LAB_00052d1e; case 0x52: FUN_00031c38(local_114,&DAT_000648a8,auStack_158); FUN_0005467c(param_1,param_2,local_114,param_5,param_6); if (local_100 == local_114) { return; } if (local_100 == (int *)0x0) { return; } if ((uint)(local_114[0] - (int)local_100) < 0x81) { std::__node_alloc::_M_deallocate(local_100,local_114[0] - (int)local_100); return; } operator_delete(local_100); return; case 0x53: if (param_4 == 0x23) { pcVar7 = "%ld"; } else { pcVar7 = "%.2ld"; } sprintf(acStack_154,pcVar7,param_6->tm_sec); iVar4 = param_6->tm_sec; goto LAB_00052d1e; case 0x54: FUN_00031c38(local_18c,&DAT_00066294,auStack_190); FUN_0005467c(param_1,param_2,local_18c,param_5,param_6); if (local_178 == local_18c) { return; } if (local_178 == (int *)0x0) { return; } if ((uint)(local_18c[0] - (int)local_178) < 0x81) { std::__node_alloc::_M_deallocate(local_178,local_18c[0] - (int)local_178); return; } operator_delete(local_178); return; case 0x55: iVar4 = (param_6->tm_yday + 7) - param_6->tm_wday; goto LAB_00052ac8; case 0x57: iVar4 = 1; if (param_6->tm_wday != 0) { iVar4 = 8 - param_6->tm_wday; } iVar4 = param_6->tm_yday + iVar4; LAB_00052ac8: tVar10 = __divsi3(iVar4,7); break; case 0x58: iVar4 = param_5; goto LAB_00052b6c; case 0x59: iVar4 = FUN_00050030(acStack_154,0,param_6->tm_year + 0x76c); goto LAB_00052e2a; case 0x61: param_5 = param_5 + param_6->tm_wday * 0x48; uVar1 = *(undefined4 *)(param_5 + 0xb8); iVar4 = 0xbc; goto LAB_00052b1e; case 0x62: case 0x68: param_5 = param_5 + param_6->tm_mon * 0x48; uVar1 = *(undefined4 *)(param_5 + 0x4a8); iVar4 = 0x4ac; goto LAB_00052b1e; case 99: iVar4 = param_5 + 0x30; iVar3 = param_5 + 0x60; goto LAB_00052b62; case 100: if (param_4 == 0x23) { pcVar7 = "%ld"; } else { pcVar7 = "%.2ld"; } sprintf(acStack_154,pcVar7,param_6->tm_mday); iVar4 = param_6->tm_mday; LAB_00052d1e: uVar2 = 1; if (9 < iVar4) { LAB_00052d26: uVar2 = 2; } LAB_00052d28: if (param_4 != 0x23) { uVar2 = 2; } uVar12 = (uint)acStack_154 | uVar2; pcVar11 = *(code **)(*param_2 + 0x2c); LAB_00052d44: (*pcVar11)(param_2,acStack_154,uVar12,local_114); piVar14 = local_114 + uVar2; goto LAB_00052e48; case 0x65: iVar4 = param_6->tm_mday; goto LAB_00052a90; case 0x6a: tVar10 = param_6->tm_yday + 1; break; case 0x6b: iVar4 = param_6->tm_hour; goto LAB_00052a90; case 0x6c: __aeabi_idivmod(param_6->tm_hour,0xc); iVar4 = extraout_r1_05; LAB_00052a90: sprintf(acStack_154,"%2ld",iVar4); (**(code **)(*param_2 + 0x2c))(param_2,acStack_154,(uint)acStack_154 | 2,local_114); piVar14 = local_114 + 2; goto LAB_00052e48; case 0x6d: if (param_4 == 0x23) { pcVar7 = "%ld"; } else { pcVar7 = "%.2ld"; } sprintf(acStack_154,pcVar7,param_6->tm_mon + 1); uVar2 = 1; if (8 < param_6->tm_mon) goto LAB_00052d26; goto LAB_00052d28; case 0x6e: pcVar11 = *(code **)(*param_2 + 0x28); uVar1 = 10; LAB_00052b7e: uVar1 = (*pcVar11)(param_2,uVar1); puVar6 = (undefined4 *)param_1[0x10]; uVar2 = (int)puVar6 - param_1[0x112] >> 2; if (param_1 == (int *)param_1[0x112]) { uVar12 = 0x10 - ((int)puVar6 - (int)param_1 >> 2); } else { uVar12 = *param_1 - (int)puVar6 >> 2; } if (uVar12 < 2) { uVar12 = uVar2; if (uVar2 < 2) { uVar12 = 1; } uVar13 = uVar2 + uVar12 + 1; uVar12 = 0x3ffffffe; if (uVar2 <= uVar13) { uVar12 = uVar13; } uVar2 = 0x3ffffffe; if (uVar13 < 0x3fffffff) { uVar2 = uVar12; } FUN_000506a4(param_1,uVar2); puVar6 = (undefined4 *)param_1[0x10]; } *puVar6 = uVar1; puVar6[1] = 0; param_1[0x10] = (int)(puVar6 + 1); return; case 0x70: iVar4 = __divsi3(param_6->tm_hour,0xc); param_5 = param_5 + iVar4 * 0x48; uVar1 = *(undefined4 *)(param_5 + 0xb68); iVar4 = 0xb6c; LAB_00052b1e: FUN_00045484(param_1,*(undefined4 *)(param_5 + iVar4),uVar1,local_114); return; case 0x72: FUN_00031c38(local_170,&DAT_000662a4,auStack_174); FUN_0005467c(param_1,param_2,local_170,param_5,param_6); if (local_15c == local_170) { return; } if (local_15c == (int *)0x0) { return; } if ((uint)(local_170[0] - (int)local_15c) < 0x81) { std::__node_alloc::_M_deallocate(local_15c,local_170[0] - (int)local_15c); return; } operator_delete(local_15c); return; case 0x73: tVar10 = mktime(param_6); break; case 0x74: uVar1 = (**(code **)(*param_2 + 0x28))(param_2,9); puVar6 = (undefined4 *)param_1[0x10]; uVar2 = (int)puVar6 - param_1[0x112] >> 2; if (param_1 == (int *)param_1[0x112]) { uVar12 = 0x10 - ((int)puVar6 - (int)param_1 >> 2); } else { uVar12 = *param_1 - (int)puVar6 >> 2; } if (uVar12 < 2) { uVar12 = uVar2; if (uVar2 < 2) { uVar12 = 1; } uVar13 = uVar2 + uVar12 + 1; uVar12 = 0x3ffffffe; if (uVar2 <= uVar13) { uVar12 = uVar13; } uVar2 = 0x3ffffffe; if (uVar13 < 0x3fffffff) { uVar2 = uVar12; } FUN_000506a4(param_1,uVar2); puVar6 = (undefined4 *)param_1[0x10]; } *puVar6 = uVar1; puVar6[1] = 0; param_1[0x10] = (int)(puVar6 + 1); goto LAB_00052e0e; case 0x75: LAB_00052e0e: __aeabi_idivmod(param_6->tm_wday + 6,7); tVar10 = extraout_r1_12 + 1; break; case 0x77: tVar10 = param_6->tm_wday; break; case 0x78: iVar4 = param_5 + 0x18; iVar3 = param_5 + 0x48; LAB_00052b62: if (param_4 == 0x23) { iVar4 = iVar3; } LAB_00052b6c: FUN_0005467c(param_1,param_2,iVar4,param_5,param_6); return; case 0x79: __aeabi_idivmod(param_6->tm_year + 0x76c,100); tVar10 = extraout_r1_06; } iVar4 = FUN_00050030(acStack_154,0,tVar10); LAB_00052e2a: (**(code **)(*param_2 + 0x2c))(param_2,acStack_154,iVar4,local_114); iVar4 = iVar4 - (int)acStack_154; LAB_00052e3e: piVar14 = local_114 + iVar4; LAB_00052e48: FUN_0005473c(param_1,local_114,piVar14,local_170); switchD_0005275e_caseD_26: return; } ### FUNC time_init @ 00052f04 /* WARNING: Removing unreachable block (ram,0x00052fb4) */ /* WARNING: Removing unreachable block (ram,0x00053050) */ /* std::priv::time_init::time_init() */ int std::priv::time_init::time_init(void) { int iVar1; char *pcVar2; size_t sVar3; int iVar4; undefined1 *puVar5; int iVar6; undefined1 *puVar7; int *piVar8; int iVar9; iVar1 = FUN_00053160(); iVar9 = 0; *(undefined4 *)(iVar1 + 0x438) = 0; piVar8 = (int *)(iVar1 + 0x8c); do { pcVar2 = &DAT_000665ee + iVar9; sVar3 = strlen(pcVar2); iVar6 = piVar8[-1]; iVar4 = *piVar8; if ((uint)(iVar6 - iVar4) < sVar3) { if (iVar6 != iVar4) { __aeabi_memmove(iVar4,pcVar2); iVar6 = piVar8[-1]; iVar4 = *piVar8; } FUN_00037294(piVar8 + -5,&DAT_000665ee + iVar9 + (iVar6 - iVar4),&DAT_000665ee + sVar3 + iVar9 ); } else { if (sVar3 != 0) { __aeabi_memmove(iVar4,pcVar2,sVar3); iVar6 = piVar8[-1]; iVar4 = *piVar8; } iVar4 = iVar4 + sVar3; if (iVar4 != iVar6) { __aeabi_memmove(iVar4,iVar6); piVar8[-1] = piVar8[-1] + (iVar4 - iVar6); } } iVar9 = iVar9 + 0xe; piVar8 = piVar8 + 6; } while (iVar9 != 0xc4); piVar8 = (int *)(iVar1 + 0x1dc); pcVar2 = "Jan"; iVar9 = 0x18; do { sVar3 = strlen(pcVar2); iVar6 = piVar8[-1]; iVar4 = *piVar8; if ((uint)(iVar6 - iVar4) < sVar3) { if (iVar6 != iVar4) { __aeabi_memmove(iVar4,pcVar2); iVar6 = piVar8[-1]; iVar4 = *piVar8; } FUN_00037294(piVar8 + -5,pcVar2 + (iVar6 - iVar4),pcVar2 + sVar3); } else { if (sVar3 != 0) { __aeabi_memmove(iVar4,pcVar2,sVar3); iVar6 = piVar8[-1]; iVar4 = *piVar8; } iVar4 = iVar4 + sVar3; if (iVar4 != iVar6) { __aeabi_memmove(iVar4,iVar6); piVar8[-1] = piVar8[-1] + (iVar4 - iVar6); } } iVar9 = iVar9 + -1; pcVar2 = pcVar2 + 0x18; piVar8 = piVar8 + 6; } while (iVar9 != 0); puVar5 = *(undefined1 **)(iVar1 + 0x41c); puVar7 = *(undefined1 **)(iVar1 + 0x418); piVar8 = (int *)(iVar1 + 0x418); if ((uint)((int)puVar7 - (int)puVar5) < 2) { if (puVar7 != puVar5) { __aeabi_memcpy(puVar5,&DAT_00053148); puVar5 = *(undefined1 **)(iVar1 + 0x41c); puVar7 = (undefined1 *)*piVar8; } FUN_00037294(iVar1 + 0x408,&DAT_00053148 + ((int)puVar7 - (int)puVar5),&DAT_0005314a); } else { *puVar5 = 0x41; puVar5[1] = 0x4d; puVar5 = (undefined1 *)*piVar8; puVar7 = (undefined1 *)(*(int *)(iVar1 + 0x41c) + 2); if (puVar7 != puVar5) { *puVar7 = *puVar5; *piVar8 = (int)(puVar7 + (*piVar8 - (int)puVar5)); } } puVar5 = *(undefined1 **)(iVar1 + 0x434); puVar7 = *(undefined1 **)(iVar1 + 0x430); piVar8 = (int *)(iVar1 + 0x430); if ((uint)((int)puVar7 - (int)puVar5) < 2) { if (puVar7 != puVar5) { __aeabi_memcpy(puVar5,&DAT_00053150); puVar5 = *(undefined1 **)(iVar1 + 0x434); puVar7 = (undefined1 *)*piVar8; } FUN_00037294(iVar1 + 0x420,&DAT_00053150 + ((int)puVar7 - (int)puVar5),&DAT_00053152); } else { *puVar5 = 0x50; puVar5[1] = 0x4d; puVar5 = (undefined1 *)*piVar8; puVar7 = (undefined1 *)(*(int *)(iVar1 + 0x434) + 2); if (puVar7 != puVar5) { *puVar7 = *puVar5; *piVar8 = (int)(puVar7 + (*piVar8 - (int)puVar5)); } } FUN_0005404c(iVar1); return iVar1; } ### FUNC FUN_00053160 @ 00053160 void FUN_00053160(undefined1 *param_1) { undefined1 *puVar1; int iVar2; param_1[0x30] = 0; param_1[0x48] = 0; param_1[0x60] = 0; *(undefined1 **)(param_1 + 0x8c) = param_1 + 0x78; *(undefined1 **)(param_1 + 0x88) = param_1 + 0x78; *param_1 = 0; param_1[0x18] = 0; *(undefined1 **)(param_1 + 0x28) = param_1 + 0x18; *(undefined1 **)(param_1 + 0x2c) = param_1 + 0x18; *(undefined1 **)(param_1 + 0x40) = param_1 + 0x30; *(undefined1 **)(param_1 + 0x44) = param_1 + 0x30; *(undefined1 **)(param_1 + 0x58) = param_1 + 0x48; *(undefined1 **)(param_1 + 0x5c) = param_1 + 0x48; *(undefined1 **)(param_1 + 0x70) = param_1 + 0x60; *(undefined1 **)(param_1 + 0x74) = param_1 + 0x60; *(undefined1 **)(param_1 + 0x10) = param_1; *(undefined1 **)(param_1 + 0x14) = param_1; *(undefined1 **)(param_1 + 0xa4) = param_1 + 0x90; *(undefined1 **)(param_1 + 0xa0) = param_1 + 0x90; param_1[0x78] = 0; param_1[0x90] = 0; *(undefined1 **)(param_1 + 0xbc) = param_1 + 0xa8; *(undefined1 **)(param_1 + 0xb8) = param_1 + 0xa8; param_1[0xa8] = 0; *(undefined1 **)(param_1 + 0xd4) = param_1 + 0xc0; *(undefined1 **)(param_1 + 0xd0) = param_1 + 0xc0; param_1[0xc0] = 0; *(undefined1 **)(param_1 + 0xec) = param_1 + 0xd8; *(undefined1 **)(param_1 + 0xe8) = param_1 + 0xd8; param_1[0xd8] = 0; *(undefined1 **)(param_1 + 0x104) = param_1 + 0xf0; *(undefined1 **)(param_1 + 0x100) = param_1 + 0xf0; param_1[0xf0] = 0; *(undefined1 **)(param_1 + 0x11c) = param_1 + 0x108; *(undefined1 **)(param_1 + 0x118) = param_1 + 0x108; param_1[0x108] = 0; *(undefined1 **)(param_1 + 0x134) = param_1 + 0x120; *(undefined1 **)(param_1 + 0x130) = param_1 + 0x120; param_1[0x120] = 0; *(undefined1 **)(param_1 + 0x14c) = param_1 + 0x138; *(undefined1 **)(param_1 + 0x148) = param_1 + 0x138; param_1[0x138] = 0; *(undefined1 **)(param_1 + 0x164) = param_1 + 0x150; *(undefined1 **)(param_1 + 0x160) = param_1 + 0x150; param_1[0x150] = 0; *(undefined1 **)(param_1 + 0x17c) = param_1 + 0x168; *(undefined1 **)(param_1 + 0x178) = param_1 + 0x168; param_1[0x168] = 0; *(undefined1 **)(param_1 + 0x194) = param_1 + 0x180; *(undefined1 **)(param_1 + 400) = param_1 + 0x180; param_1[0x180] = 0; *(undefined1 **)(param_1 + 0x1ac) = param_1 + 0x198; *(undefined1 **)(param_1 + 0x1a8) = param_1 + 0x198; param_1[0x198] = 0; *(undefined1 **)(param_1 + 0x1c4) = param_1 + 0x1b0; *(undefined1 **)(param_1 + 0x1c0) = param_1 + 0x1b0; param_1[0x1b0] = 0; puVar1 = param_1 + 0x1c8; iVar2 = 0x18; do { *puVar1 = 0; *(undefined1 **)(puVar1 + 0x10) = puVar1; *(undefined1 **)(puVar1 + 0x14) = puVar1; iVar2 = iVar2 + -1; puVar1 = puVar1 + 0x18; } while (iVar2 != 0); *(undefined1 **)(param_1 + 0x41c) = param_1 + 0x408; *(undefined1 **)(param_1 + 0x418) = param_1 + 0x408; param_1[0x408] = 0; param_1[0x420] = 0; *(undefined1 **)(param_1 + 0x434) = param_1 + 0x420; *(undefined1 **)(param_1 + 0x430) = param_1 + 0x420; return; } ### FUNC time_init @ 000532e0 /* std::priv::time_init::time_init(char const*) */ time_init * __thiscall std::priv::time_init::time_init(time_init *this,char *param_1) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; FUN_00053160(); if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a3cc(&local_14,auStack_118,0,&local_18); if (iVar1 != 0) { FUN_00053350(this,iVar1); uVar2 = FUN_000536e8(iVar1); *(undefined4 *)(this + 0x438) = uVar2; FUN_0004a698(iVar1); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"time"); FUN_00039fc0(this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC FUN_00053350 @ 00053350 /* WARNING: Removing unreachable block (ram,0x00053630) */ /* WARNING: Removing unreachable block (ram,0x000534f4) */ /* WARNING: Removing unreachable block (ram,0x000533ce) */ /* WARNING: Removing unreachable block (ram,0x0005346a) */ /* WARNING: Removing unreachable block (ram,0x0005358c) */ /* WARNING: Removing unreachable block (ram,0x000536ca) */ void FUN_00053350(int param_1,undefined4 param_2) { char *pcVar1; size_t sVar2; int iVar3; int iVar4; int *piVar5; int iVar6; int iVar7; iVar7 = param_1 + 0x78; iVar6 = 0; do { pcVar1 = (char *)FUN_0004de78(param_2,iVar6); sVar2 = strlen(pcVar1); iVar4 = *(int *)(iVar7 + 0x10); iVar3 = *(int *)(iVar7 + 0x14); if ((uint)(iVar4 - iVar3) < sVar2) { if (iVar4 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar4 = *(int *)(iVar7 + 0x10); iVar3 = *(int *)(iVar7 + 0x14); } FUN_00037294(iVar7,pcVar1 + (iVar4 - iVar3),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar4 = *(int *)(iVar7 + 0x10); iVar3 = *(int *)(iVar7 + 0x14); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar4) { __aeabi_memmove(iVar3,iVar4); *(int *)(iVar7 + 0x10) = *(int *)(iVar7 + 0x10) + (iVar3 - iVar4); } } iVar7 = iVar7 + 0x18; iVar6 = iVar6 + 1; } while (iVar6 != 7); piVar5 = (int *)(param_1 + 0x134); iVar6 = 0; do { pcVar1 = (char *)FUN_0004de68(param_2); sVar2 = strlen(pcVar1); iVar3 = piVar5[-1]; iVar7 = *piVar5; if ((uint)(iVar3 - iVar7) < sVar2) { if (iVar3 != iVar7) { __aeabi_memmove(iVar7,pcVar1); iVar3 = piVar5[-1]; iVar7 = *piVar5; } FUN_00037294(piVar5 + -5,pcVar1 + (iVar3 - iVar7),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar7,pcVar1,sVar2); iVar3 = piVar5[-1]; iVar7 = *piVar5; } iVar7 = iVar7 + sVar2; if (iVar7 != iVar3) { __aeabi_memmove(iVar7); piVar5[-1] = piVar5[-1] + (iVar7 - iVar3); } } piVar5 = piVar5 + 6; iVar6 = iVar6 + 1; } while (iVar6 != 7); iVar7 = param_1 + 0x1c8; iVar6 = 0; do { pcVar1 = (char *)FUN_0004de58(param_2,iVar6); sVar2 = strlen(pcVar1); iVar4 = *(int *)(iVar7 + 0x10); iVar3 = *(int *)(iVar7 + 0x14); if ((uint)(iVar4 - iVar3) < sVar2) { if (iVar4 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar4 = *(int *)(iVar7 + 0x10); iVar3 = *(int *)(iVar7 + 0x14); } FUN_00037294(iVar7,pcVar1 + (iVar4 - iVar3),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar4 = *(int *)(iVar7 + 0x10); iVar3 = *(int *)(iVar7 + 0x14); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar4) { __aeabi_memmove(iVar3,iVar4); *(int *)(iVar7 + 0x10) = *(int *)(iVar7 + 0x10) + (iVar3 - iVar4); } } iVar7 = iVar7 + 0x18; iVar6 = iVar6 + 1; } while (iVar6 != 0xc); piVar5 = (int *)(param_1 + 0x2fc); iVar6 = 0; do { pcVar1 = (char *)FUN_0004de48(param_2); sVar2 = strlen(pcVar1); iVar3 = piVar5[-1]; iVar7 = *piVar5; if ((uint)(iVar3 - iVar7) < sVar2) { if (iVar3 != iVar7) { __aeabi_memmove(iVar7,pcVar1); iVar3 = piVar5[-1]; iVar7 = *piVar5; } FUN_00037294(piVar5 + -5,pcVar1 + (iVar3 - iVar7),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar7,pcVar1,sVar2); iVar3 = piVar5[-1]; iVar7 = *piVar5; } iVar7 = iVar7 + sVar2; if (iVar7 != iVar3) { __aeabi_memmove(iVar7,iVar3); piVar5[-1] = piVar5[-1] + (iVar7 - iVar3); } } piVar5 = piVar5 + 6; iVar6 = iVar6 + 1; } while (iVar6 != 0xc); pcVar1 = (char *)FUN_0004dec8(param_2); sVar2 = strlen(pcVar1); iVar6 = *(int *)(param_1 + 0x41c); iVar7 = *(int *)(param_1 + 0x418); piVar5 = (int *)(param_1 + 0x418); if ((uint)(iVar7 - iVar6) < sVar2) { if (iVar7 != iVar6) { __aeabi_memmove(iVar6,pcVar1); iVar6 = *(int *)(param_1 + 0x41c); iVar7 = *piVar5; } FUN_00037294(param_1 + 0x408,pcVar1 + (iVar7 - iVar6),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar6,pcVar1,sVar2); iVar7 = *piVar5; iVar6 = *(int *)(param_1 + 0x41c); } iVar6 = iVar6 + sVar2; if (iVar6 != iVar7) { __aeabi_memmove(iVar6); *piVar5 = *piVar5 + (iVar6 - iVar7); } } pcVar1 = (char *)FUN_0004ded0(param_2); sVar2 = strlen(pcVar1); iVar6 = *(int *)(param_1 + 0x434); iVar7 = *(int *)(param_1 + 0x430); piVar5 = (int *)(param_1 + 0x430); if ((uint)(iVar7 - iVar6) < sVar2) { if (iVar7 != iVar6) { __aeabi_memmove(iVar6,pcVar1); iVar6 = *(int *)(param_1 + 0x434); iVar7 = *piVar5; } FUN_00037294(param_1 + 0x420,pcVar1 + (iVar7 - iVar6),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar6,pcVar1,sVar2); iVar7 = *piVar5; iVar6 = *(int *)(param_1 + 0x434); } iVar6 = iVar6 + sVar2; if (iVar6 != iVar7) { __aeabi_memmove(iVar6); *piVar5 = *piVar5 + (iVar6 - iVar7); } } FUN_00054198(param_1,param_2); return; } ### FUNC FUN_000536e8 @ 000536e8 undefined4 FUN_000536e8(void) { char cVar1; char cVar2; char cVar3; int iVar4; undefined4 uVar5; char *pcVar6; char *pcVar7; bool bVar8; iVar4 = FUN_0004de94(); pcVar6 = (char *)(iVar4 + -1); do { pcVar7 = pcVar6; cVar1 = pcVar7[1]; pcVar6 = pcVar7 + 1; if (cVar1 == '%') break; } while (cVar1 != '\0'); uVar5 = 0; if (cVar1 != '\0') { cVar1 = pcVar7[2]; bVar8 = cVar1 == '\0'; if ((cVar1 != '%') && (pcVar7 = pcVar7 + 3, !bVar8)) { do { pcVar6 = pcVar7; bVar8 = *pcVar6 == '\0'; if (*pcVar6 == '%') break; pcVar7 = pcVar6 + 1; } while (!bVar8); pcVar6 = pcVar6 + -1; } uVar5 = 0; if (!bVar8) { pcVar7 = pcVar6 + 2; cVar2 = pcVar6[2]; cVar3 = cVar2; while ((cVar3 != '%' && (cVar3 != '\0'))) { pcVar6 = pcVar7 + 1; pcVar7 = pcVar7 + 1; cVar3 = *pcVar6; } uVar5 = 0; if (cVar3 != '\0') { cVar3 = pcVar7[1]; if (cVar1 == 'y') { if (cVar2 == 'm') { uVar5 = 3; if (cVar3 != 'd') { return 0; } } else if ((cVar2 == 'd') && (uVar5 = 4, cVar3 != 'm')) { return 0; } } else if (cVar1 == 'm') { uVar5 = 2; if (cVar2 != 'd' || cVar3 != 'y') { return 0; } } else if ((cVar1 == 'd') && (uVar5 = 1, cVar2 != 'm' || cVar3 != 'y')) { return 0; } } } } return uVar5; } ### FUNC time_init @ 000537f2 /* std::priv::time_init::time_init(_Locale_time*) */ time_init * __thiscall std::priv::time_init::time_init(time_init *this,_Locale_time *param_1) { undefined4 uVar1; uVar1 = FUN_00053160(); FUN_00053350(uVar1,param_1); uVar1 = FUN_000536e8(param_1); *(undefined4 *)(this + 0x438) = uVar1; return this; } ### FUNC time_init @ 00053828 /* std::priv::time_init::time_init() */ int std::priv::time_init::time_init(void) { int iVar1; size_t sVar2; int iVar3; int iVar4; wchar_t *__s; iVar1 = FUN_00053b3c(); *(undefined4 *)(iVar1 + 3000) = 0; sVar2 = wcslen(L"Sun"); FUN_0004413c(iVar1 + 0x78,&DAT_000668f4,&DAT_000668f4 + sVar2 * 4); sVar2 = wcslen(L"Mon"); FUN_0004413c(iVar1 + 0xc0,&DAT_0006692c,&DAT_0006692c + sVar2 * 4); sVar2 = wcslen(L"Tue"); FUN_0004413c(iVar1 + 0x108,&DAT_00066964,&DAT_00066964 + sVar2 * 4); sVar2 = wcslen(L"Wed"); FUN_0004413c(iVar1 + 0x150,&DAT_0006699c,&DAT_0006699c + sVar2 * 4); sVar2 = wcslen(L"Thu"); FUN_0004413c(iVar1 + 0x198,&DAT_000669d4,&DAT_000669d4 + sVar2 * 4); sVar2 = wcslen(L"Fri"); FUN_0004413c(iVar1 + 0x1e0,&DAT_00066a0c,&DAT_00066a0c + sVar2 * 4); sVar2 = wcslen(L"Sat"); FUN_0004413c(iVar1 + 0x228,&DAT_00066a44,&DAT_00066a44 + sVar2 * 4); sVar2 = wcslen(L"Sunday"); FUN_0004413c(iVar1 + 0x270,L"Sunday",L"Sunday" + sVar2); sVar2 = wcslen(L"Monday"); FUN_0004413c(iVar1 + 0x2b8,L"Monday",L"Monday" + sVar2); sVar2 = wcslen(L"Tuesday"); FUN_0004413c(iVar1 + 0x300,L"Tuesday",L"Tuesday" + sVar2); sVar2 = wcslen(L"Wednesday"); FUN_0004413c(iVar1 + 0x348,L"Wednesday",L"Wednesday" + sVar2); sVar2 = wcslen(L"Thursday"); FUN_0004413c(iVar1 + 0x390,L"Thursday",L"Thursday" + sVar2); sVar2 = wcslen(L"Friday"); FUN_0004413c(iVar1 + 0x3d8,L"Friday",L"Friday" + sVar2); sVar2 = wcslen(L"Saturday"); FUN_0004413c(iVar1 + 0x420,L"Saturday",L"Saturday" + sVar2); iVar4 = iVar1 + 0x468; iVar3 = 0x18; __s = L"Jan"; do { sVar2 = wcslen(__s); FUN_0004413c(iVar4,__s,__s + sVar2); __s = __s + 0x18; iVar3 = iVar3 + -1; iVar4 = iVar4 + 0x48; } while (iVar3 != 0); sVar2 = wcslen(L"AM"); FUN_0004413c(iVar1 + 0xb28,&DAT_00053b20,&DAT_00053b20 + sVar2 * 4); sVar2 = wcslen(L"PM"); FUN_0004413c(iVar1 + 0xb70,&DAT_00053b30,&DAT_00053b30 + sVar2 * 4); FUN_0005404c(iVar1); return iVar1; } ### FUNC FUN_00053b3c @ 00053b3c void FUN_00053b3c(undefined1 *param_1) { undefined4 *puVar1; int iVar2; param_1[0x30] = 0; param_1[0x48] = 0; param_1[0x60] = 0; *(undefined1 **)(param_1 + 0xbc) = param_1 + 0x78; *(undefined1 **)(param_1 + 0xb8) = param_1 + 0x78; *param_1 = 0; param_1[0x18] = 0; *(undefined1 **)(param_1 + 0x28) = param_1 + 0x18; *(undefined1 **)(param_1 + 0x2c) = param_1 + 0x18; *(undefined1 **)(param_1 + 0x40) = param_1 + 0x30; *(undefined1 **)(param_1 + 0x44) = param_1 + 0x30; *(undefined1 **)(param_1 + 0x58) = param_1 + 0x48; *(undefined1 **)(param_1 + 0x5c) = param_1 + 0x48; *(undefined1 **)(param_1 + 0x74) = param_1 + 0x60; *(undefined1 **)(param_1 + 0x70) = param_1 + 0x60; *(undefined1 **)(param_1 + 0x10) = param_1; *(undefined1 **)(param_1 + 0x14) = param_1; *(undefined1 **)(param_1 + 0x104) = param_1 + 0xc0; *(undefined1 **)(param_1 + 0x100) = param_1 + 0xc0; *(undefined4 *)(param_1 + 0xc0) = 0; *(undefined1 **)(param_1 + 0x14c) = param_1 + 0x108; *(undefined1 **)(param_1 + 0x148) = param_1 + 0x108; *(undefined4 *)(param_1 + 0x108) = 0; *(undefined1 **)(param_1 + 0x194) = param_1 + 0x150; *(undefined1 **)(param_1 + 400) = param_1 + 0x150; *(undefined4 *)(param_1 + 0x150) = 0; *(undefined1 **)(param_1 + 0x1dc) = param_1 + 0x198; *(undefined1 **)(param_1 + 0x1d8) = param_1 + 0x198; *(undefined4 *)(param_1 + 0x198) = 0; *(undefined1 **)(param_1 + 0x224) = param_1 + 0x1e0; *(undefined1 **)(param_1 + 0x220) = param_1 + 0x1e0; *(undefined4 *)(param_1 + 0x1e0) = 0; *(undefined1 **)(param_1 + 0x26c) = param_1 + 0x228; *(undefined1 **)(param_1 + 0x268) = param_1 + 0x228; *(undefined4 *)(param_1 + 0x228) = 0; *(undefined4 *)(param_1 + 0x78) = 0; *(undefined1 **)(param_1 + 0x2b4) = param_1 + 0x270; *(undefined1 **)(param_1 + 0x2b0) = param_1 + 0x270; *(undefined4 *)(param_1 + 0x270) = 0; *(undefined1 **)(param_1 + 0x2fc) = param_1 + 0x2b8; *(undefined1 **)(param_1 + 0x2f8) = param_1 + 0x2b8; *(undefined4 *)(param_1 + 0x2b8) = 0; *(undefined1 **)(param_1 + 0x344) = param_1 + 0x300; *(undefined1 **)(param_1 + 0x340) = param_1 + 0x300; *(undefined4 *)(param_1 + 0x300) = 0; *(undefined1 **)(param_1 + 0x38c) = param_1 + 0x348; *(undefined1 **)(param_1 + 0x388) = param_1 + 0x348; *(undefined4 *)(param_1 + 0x348) = 0; *(undefined1 **)(param_1 + 0x3d4) = param_1 + 0x390; *(undefined1 **)(param_1 + 0x3d0) = param_1 + 0x390; *(undefined4 *)(param_1 + 0x390) = 0; *(undefined1 **)(param_1 + 0x41c) = param_1 + 0x3d8; *(undefined1 **)(param_1 + 0x418) = param_1 + 0x3d8; *(undefined4 *)(param_1 + 0x3d8) = 0; *(undefined1 **)(param_1 + 0x464) = param_1 + 0x420; *(undefined1 **)(param_1 + 0x460) = param_1 + 0x420; *(undefined4 *)(param_1 + 0x420) = 0; puVar1 = (undefined4 *)(param_1 + 0x468); iVar2 = 0x18; do { *puVar1 = 0; puVar1[0x10] = puVar1; puVar1[0x11] = puVar1; iVar2 = iVar2 + -1; puVar1 = puVar1 + 0x12; } while (iVar2 != 0); *(undefined1 **)(param_1 + 0xb6c) = param_1 + 0xb28; *(undefined1 **)(param_1 + 0xb68) = param_1 + 0xb28; *(undefined4 *)(param_1 + 0xb28) = 0; *(undefined4 *)(param_1 + 0xb70) = 0; *(undefined1 **)(param_1 + 0xbb4) = param_1 + 0xb70; *(undefined1 **)(param_1 + 0xbb0) = param_1 + 0xb70; return; } ### FUNC time_init @ 00053cd4 /* std::priv::time_init::time_init(char const*) */ time_init * __thiscall std::priv::time_init::time_init(time_init *this,char *param_1) { int iVar1; undefined4 uVar2; undefined1 auStack_118 [256]; int local_18; char *local_14; local_14 = param_1; FUN_00053b3c(); if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a3cc(&local_14,auStack_118,0,&local_18); if (iVar1 != 0) { FUN_00053d48(this,iVar1); uVar2 = FUN_000536e8(iVar1); *(undefined4 *)(this + 3000) = uVar2; FUN_0004a698(iVar1); return this; } } uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"time"); FUN_0003b28c(this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar2); } ### FUNC FUN_00053d48 @ 00053d48 void FUN_00053d48(int param_1,undefined4 param_2) { wchar_t *pwVar1; size_t sVar2; int iVar3; int iVar4; undefined1 auStack_214 [512]; iVar4 = 0; pwVar1 = (wchar_t *)FUN_0004df08(param_2,0); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x78,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df08(param_2,1,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0xc0,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df08(param_2,2,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x108,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df08(param_2,3,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x150,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df08(param_2,4,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x198,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df08(param_2,5,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x1e0,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df08(param_2,6,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x228,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,0,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x270,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,1,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x2b8,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,2,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x300,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,3,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x348,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,4,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x390,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,5,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x3d8,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004def8(param_2,6,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0x420,pwVar1,pwVar1 + sVar2); iVar3 = param_1 + 0x468; do { pwVar1 = (wchar_t *)FUN_0004dee8(param_2,iVar4,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(iVar3,pwVar1,pwVar1 + sVar2); iVar3 = iVar3 + 0x48; iVar4 = iVar4 + 1; } while (iVar4 != 0xc); iVar3 = param_1 + 0x7c8; iVar4 = 0; do { pwVar1 = (wchar_t *)FUN_0004ded8(param_2,iVar4,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(iVar3,pwVar1,pwVar1 + sVar2); iVar3 = iVar3 + 0x48; iVar4 = iVar4 + 1; } while (iVar4 != 0xc); pwVar1 = (wchar_t *)FUN_0004df18(param_2); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0xb28,pwVar1,pwVar1 + sVar2); pwVar1 = (wchar_t *)FUN_0004df28(param_2,auStack_214,0x80); sVar2 = wcslen(pwVar1); FUN_0004413c(param_1 + 0xb70,pwVar1,pwVar1 + sVar2); FUN_00054198(param_1,param_2); return; } ### FUNC time_init @ 00054014 /* std::priv::time_init::time_init(_Locale_time*) */ time_init * __thiscall std::priv::time_init::time_init(time_init *this,_Locale_time *param_1) { undefined4 uVar1; uVar1 = FUN_00053b3c(); FUN_00053d48(uVar1,param_1); uVar1 = FUN_000536e8(param_1); *(undefined4 *)(this + 3000) = uVar1; return this; } ### FUNC FUN_0005404c @ 0005404c void FUN_0005404c(int param_1) { undefined1 *puVar1; undefined1 *puVar2; puVar2 = *(undefined1 **)(param_1 + 0x10); puVar1 = *(undefined1 **)(param_1 + 0x14); if ((uint)((int)puVar2 - (int)puVar1) < 8) { if (puVar2 != puVar1) { __aeabi_memcpy(puVar1,&DAT_00066294); puVar2 = *(undefined1 **)(param_1 + 0x10); puVar1 = *(undefined1 **)(param_1 + 0x14); } FUN_00037294(param_1,&DAT_00066294 + ((int)puVar2 - (int)puVar1),&DAT_0006629c); } else { puVar1[7] = 0x53; puVar1[6] = 0x25; puVar1[5] = 0x3a; puVar1[4] = 0x4d; puVar1[3] = 0x25; puVar1[2] = 0x3a; puVar1[1] = 0x48; *puVar1 = 0x25; puVar1 = *(undefined1 **)(param_1 + 0x10); puVar2 = (undefined1 *)(*(int *)(param_1 + 0x14) + 8); if (puVar2 != puVar1) { *puVar2 = *puVar1; *(undefined1 **)(param_1 + 0x10) = puVar2 + (*(int *)(param_1 + 0x10) - (int)puVar1); } } puVar2 = *(undefined1 **)(param_1 + 0x28); puVar1 = *(undefined1 **)(param_1 + 0x2c); if ((uint)((int)puVar2 - (int)puVar1) < 8) { if (puVar2 != puVar1) { __aeabi_memcpy(puVar1,&DAT_0005418c); puVar2 = *(undefined1 **)(param_1 + 0x28); puVar1 = *(undefined1 **)(param_1 + 0x2c); } FUN_00037294(param_1 + 0x18,&DAT_0005418c + ((int)puVar2 - (int)puVar1),&DAT_00054194); } else { *puVar1 = 0x25; puVar1[4] = 100; puVar1[3] = 0x25; puVar1[2] = 0x2f; puVar1[1] = 0x6d; puVar1[7] = 0x79; puVar1[6] = 0x25; puVar1[5] = 0x2f; puVar1 = *(undefined1 **)(param_1 + 0x28); puVar2 = (undefined1 *)(*(int *)(param_1 + 0x2c) + 8); if (puVar2 != puVar1) { *puVar2 = *puVar1; *(undefined1 **)(param_1 + 0x28) = puVar2 + (*(int *)(param_1 + 0x28) - (int)puVar1); } } puVar2 = *(undefined1 **)(param_1 + 0x40); puVar1 = *(undefined1 **)(param_1 + 0x44); if ((uint)((int)puVar2 - (int)puVar1) < 8) { if (puVar2 != puVar1) { __aeabi_memcpy(puVar1,&DAT_0005418c); puVar2 = *(undefined1 **)(param_1 + 0x40); puVar1 = *(undefined1 **)(param_1 + 0x44); } FUN_00037294(param_1 + 0x30,&DAT_0005418c + ((int)puVar2 - (int)puVar1),&DAT_00054194); } else { *puVar1 = 0x25; puVar1[4] = 100; puVar1[3] = 0x25; puVar1[2] = 0x2f; puVar1[1] = 0x6d; puVar1[7] = 0x79; puVar1[6] = 0x25; puVar1[5] = 0x2f; puVar1 = *(undefined1 **)(param_1 + 0x40); puVar2 = (undefined1 *)(*(int *)(param_1 + 0x44) + 8); if (puVar2 != puVar1) { *puVar2 = *puVar1; *(undefined1 **)(param_1 + 0x40) = puVar2 + (*(int *)(param_1 + 0x40) - (int)puVar1); return; } } return; } ### FUNC FUN_00054198 @ 00054198 /* WARNING: Removing unreachable block (ram,0x00054452) */ /* WARNING: Removing unreachable block (ram,0x00054362) */ /* WARNING: Removing unreachable block (ram,0x00054218) */ /* WARNING: Removing unreachable block (ram,0x000543d8) */ /* WARNING: Removing unreachable block (ram,0x000544cc) */ /* WARNING: Removing unreachable block (ram,0x000542c4) */ /* WARNING: Removing unreachable block (ram,0x000542a0) */ /* WARNING: Removing unreachable block (ram,0x00054508) */ /* WARNING: Removing unreachable block (ram,0x00054506) */ /* WARNING: Removing unreachable block (ram,0x0005425e) */ /* WARNING: Removing unreachable block (ram,0x00054528) */ /* WARNING: Removing unreachable block (ram,0x00054526) */ /* WARNING: Removing unreachable block (ram,0x000542e8) */ void FUN_00054198(int param_1,undefined4 param_2) { char *pcVar1; size_t sVar2; int iVar3; short *psVar4; int iVar5; undefined *puVar6; undefined *puVar7; pcVar1 = (char *)FUN_0004dea0(param_2); sVar2 = strlen(pcVar1); iVar5 = *(int *)(param_1 + 0x10); iVar3 = *(int *)(param_1 + 0x14); if ((uint)(iVar5 - iVar3) < sVar2) { if (iVar5 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar5 = *(int *)(param_1 + 0x10); iVar3 = *(int *)(param_1 + 0x14); } FUN_00037294(param_1,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); iVar5 = *(int *)(param_1 + 0x10); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar5 = *(int *)(param_1 + 0x10); iVar3 = *(int *)(param_1 + 0x14); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar5) { __aeabi_memmove(iVar3,iVar5); iVar5 = *(int *)(param_1 + 0x10) + (iVar3 - iVar5); *(int *)(param_1 + 0x10) = iVar5; } } psVar4 = *(short **)(param_1 + 0x14); iVar5 = iVar5 - (int)psVar4; if ((iVar5 == 2) && (*psVar4 == 0x5425)) { __aeabi_memcpy(psVar4,&DAT_00066294); puVar6 = &DAT_00066294 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14)); puVar7 = &DAT_0006629c; } else if ((iVar5 == 2) && (*psVar4 == 0x7225)) { __aeabi_memcpy(psVar4,&DAT_000662a4); puVar6 = &DAT_000662a4 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14)); puVar7 = &DAT_000662af; } else { if ((iVar5 != 2) || (*psVar4 != 0x5225)) goto LAB_000542f4; __aeabi_memcpy(psVar4,&DAT_000648a8); puVar6 = &DAT_000648a8 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14)); puVar7 = &DAT_000648ad; } FUN_00037294(param_1,puVar6,puVar7); LAB_000542f4: pcVar1 = (char *)FUN_0004de94(param_2); sVar2 = strlen(pcVar1); iVar5 = *(int *)(param_1 + 0x28); iVar3 = *(int *)(param_1 + 0x2c); if ((uint)(iVar5 - iVar3) < sVar2) { if (iVar5 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar5 = *(int *)(param_1 + 0x28); iVar3 = *(int *)(param_1 + 0x2c); } FUN_00037294(param_1 + 0x18,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar5 = *(int *)(param_1 + 0x28); iVar3 = *(int *)(param_1 + 0x2c); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar5) { __aeabi_memmove(iVar3); *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + (iVar3 - iVar5); } } pcVar1 = (char *)FUN_0004de88(param_2); sVar2 = strlen(pcVar1); iVar5 = *(int *)(param_1 + 0x40); iVar3 = *(int *)(param_1 + 0x44); if ((uint)(iVar5 - iVar3) < sVar2) { if (iVar5 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar5 = *(int *)(param_1 + 0x40); iVar3 = *(int *)(param_1 + 0x44); } FUN_00037294(param_1 + 0x30,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar5 = *(int *)(param_1 + 0x40); iVar3 = *(int *)(param_1 + 0x44); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar5) { __aeabi_memmove(iVar3); *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + (iVar3 - iVar5); } } pcVar1 = (char *)FUN_0004debc(param_2); sVar2 = strlen(pcVar1); iVar5 = *(int *)(param_1 + 0x58); iVar3 = *(int *)(param_1 + 0x5c); if ((uint)(iVar5 - iVar3) < sVar2) { if (iVar5 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar5 = *(int *)(param_1 + 0x58); iVar3 = *(int *)(param_1 + 0x5c); } FUN_00037294(param_1 + 0x48,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar5 = *(int *)(param_1 + 0x58); iVar3 = *(int *)(param_1 + 0x5c); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar5) { __aeabi_memmove(iVar3); *(int *)(param_1 + 0x58) = *(int *)(param_1 + 0x58) + (iVar3 - iVar5); } } pcVar1 = (char *)FUN_0004deb0(param_2); sVar2 = strlen(pcVar1); iVar5 = *(int *)(param_1 + 0x70); iVar3 = *(int *)(param_1 + 0x74); if ((uint)(iVar5 - iVar3) < sVar2) { if (iVar5 != iVar3) { __aeabi_memmove(iVar3,pcVar1); iVar5 = *(int *)(param_1 + 0x70); iVar3 = *(int *)(param_1 + 0x74); } FUN_00037294(param_1 + 0x60,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2); } else { if (sVar2 != 0) { __aeabi_memmove(iVar3,pcVar1,sVar2); iVar5 = *(int *)(param_1 + 0x70); iVar3 = *(int *)(param_1 + 0x74); } iVar3 = iVar3 + sVar2; if (iVar3 != iVar5) { __aeabi_memmove(iVar3); *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) + (iVar3 - iVar5); return; } } return; } ### FUNC FUN_00054550 @ 00054550 int * FUN_00054550(int *param_1,uint param_2,undefined4 param_3) { int iVar1; int *piVar2; int *piVar3; uint uVar4; uint uVar5; undefined1 *puVar6; uint uVar7; uint uVar8; int *piVar9; int *piVar10; int *piVar11; if (param_2 != 0) { piVar9 = (int *)param_1[0x46]; piVar10 = (int *)param_1[4]; piVar2 = param_1 + 0x46; if ((uint)((-2 - (int)piVar10) + (int)piVar9) < param_2) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (piVar9 == param_1) { piVar3 = param_1 + 4; } else { piVar3 = (int *)*param_1; } piVar11 = piVar10; if ((uint)((int)piVar3 - (int)piVar10) <= param_2) { uVar4 = (int)piVar10 - (int)piVar9; if (-uVar4 - 2 < param_2) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar7 = uVar4; if (uVar4 <= param_2) { uVar7 = param_2; } uVar8 = uVar4 + uVar7 + 1; uVar5 = 0xfffffffe; if (uVar4 <= uVar8) { uVar5 = uVar8; } uVar8 = 0xfffffffe; if (uVar4 + uVar7 != -2) { uVar8 = uVar5; } if (uVar8 >> 1 < 0x81) { piVar3 = param_1 + 5; } else { piVar3 = (int *)operator_new(uVar8); piVar10 = (int *)param_1[4]; piVar9 = (int *)*piVar2; } piVar11 = piVar3; if (0 < (int)piVar10 - (int)piVar9) { puVar6 = (undefined1 *)((int)piVar10 + (1 - (int)piVar9)); do { *(char *)piVar11 = (char)*piVar9; puVar6 = puVar6 + -1; piVar11 = (int *)((int)piVar11 + 1); piVar9 = (int *)((int)piVar9 + 1); } while (1 < (int)puVar6); } *(undefined1 *)piVar11 = 0; piVar10 = (int *)*piVar2; if (((piVar10 != param_1) && (piVar10 != (int *)0x0)) && (param_1 + 5 != piVar10)) { if ((uint)(*param_1 - (int)piVar10) < 0x81) { std::__node_alloc::_M_deallocate(piVar10,*param_1 - (int)piVar10); } else { operator_delete(piVar10); } } param_1[4] = (int)piVar11; *param_1 = (int)((int)piVar3 + uVar8); *piVar2 = (int)piVar3; } if (0 < (int)(param_2 - 1)) { iVar1 = -param_2; if (param_2 == 2 || iVar1 < -2) { iVar1 = -2; } __aeabi_memset((undefined1 *)((int)piVar11 + 1),iVar1 + param_2 + 1,param_3); piVar11 = (int *)param_1[4]; } *(undefined1 *)((int)piVar11 + param_2) = 0; *(char *)param_1[4] = (char)param_3; param_1[4] = param_1[4] + param_2; } return param_1; } ### FUNC FUN_0005467c @ 0005467c void FUN_0005467c(int *param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5) { byte *pbVar1; byte bVar2; byte *pbVar3; uint uVar4; byte *pbVar5; uint *puVar6; uint uVar7; uint uVar8; undefined1 uVar9; byte *pbVar10; pbVar3 = *(byte **)(param_3 + 0x10); pbVar10 = *(byte **)(param_3 + 0x14); if (pbVar3 != pbVar10) { do { bVar2 = *pbVar10; if (bVar2 == 0x25) { pbVar1 = pbVar10 + 1; pbVar5 = pbVar10 + 1; pbVar10 = pbVar10 + 2; if (*pbVar1 != 0x23) { pbVar10 = pbVar5; } uVar9 = 0; if (*pbVar1 == 0x23) { uVar9 = 0x23; } FUN_00052734(param_1,param_2,*pbVar10,uVar9,param_4,param_5); } else { puVar6 = (uint *)param_1[0x10]; uVar4 = (int)puVar6 - param_1[0x112] >> 2; if (param_1 == (int *)param_1[0x112]) { uVar7 = 0x10 - ((int)puVar6 - (int)param_1 >> 2); } else { uVar7 = *param_1 - (int)puVar6 >> 2; } if (uVar7 < 2) { uVar7 = uVar4; if (uVar4 < 2) { uVar7 = 1; } uVar8 = uVar4 + uVar7 + 1; uVar7 = 0x3ffffffe; if (uVar4 <= uVar8) { uVar7 = uVar8; } uVar4 = 0x3ffffffe; if (uVar8 < 0x3fffffff) { uVar4 = uVar7; } FUN_000506a4(param_1,uVar4); puVar6 = (uint *)param_1[0x10]; } *puVar6 = (uint)bVar2; puVar6[1] = 0; param_1[0x10] = (int)(puVar6 + 1); } pbVar10 = pbVar10 + 1; } while (pbVar10 != pbVar3); } return; } ### FUNC FUN_0005473c @ 0005473c int * FUN_0005473c(int *param_1,int *param_2,int *param_3) { int *piVar1; int iVar2; int *piVar3; int *piVar4; undefined4 uVar5; int *piVar6; uint uVar7; int *piVar8; uint uVar9; uint uVar10; int *piVar11; uint local_18; if (param_2 != param_3) { piVar6 = (int *)param_1[0x112]; piVar1 = param_1 + 0x112; iVar2 = (int)param_3 - (int)param_2; uVar9 = iVar2 >> 2; if (piVar6 == param_1) { piVar3 = (int *)param_1[0x10]; uVar7 = 0x10 - ((int)piVar3 - (int)param_1 >> 2); } else { piVar3 = (int *)param_1[0x10]; uVar7 = *param_1 - (int)piVar3 >> 2; } piVar8 = param_1 + 0x10; if (uVar9 < uVar7) { piVar1 = param_2 + 1; *piVar3 = *param_2; if (piVar1 != param_3) { __aeabi_memcpy(piVar3 + 1,piVar1,(int)param_3 - (int)piVar1); piVar3 = (int *)*piVar8; } piVar3[uVar9] = 0; *piVar8 = (int)(piVar3 + uVar9); } else { uVar7 = (int)piVar3 - (int)piVar6 >> 2; if (0x3ffffffe - uVar7 < uVar9) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } uVar10 = uVar7; if (uVar7 <= uVar9) { uVar10 = uVar9; } uVar10 = uVar7 + uVar10 + 1; uVar9 = 0x3ffffffe; if (uVar7 <= uVar10) { uVar9 = uVar10; } uVar7 = 0x3ffffffe; if (uVar10 < 0x3fffffff) { uVar7 = uVar9; } if (uVar7 >> 1 < 0x81) { piVar4 = param_1 + 0x11; } else { if (0x3fffffff < uVar7) { FUN_00030824(4); uVar5 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } local_18 = uVar7 << 2; if (local_18 < 0x81) { piVar4 = (int *)std::__node_alloc::_M_allocate(&local_18); } else { piVar4 = (int *)operator_new(local_18); } piVar3 = (int *)*piVar8; piVar6 = (int *)*piVar1; } piVar11 = piVar4; if (piVar3 != piVar6) { __aeabi_memcpy(piVar4,piVar6,(int)piVar3 - (int)piVar6); piVar11 = (int *)((int)piVar4 + ((int)piVar3 - (int)piVar6)); } __aeabi_memcpy(piVar11,param_2,iVar2); *(undefined4 *)((int)piVar11 + iVar2) = 0; piVar6 = (int *)*piVar1; if (((piVar6 != param_1) && (piVar6 != (int *)0x0)) && (param_1 + 0x11 != piVar6)) { if ((uint)(*param_1 - (int)piVar6) < 0x81) { std::__node_alloc::_M_deallocate(piVar6,*param_1 - (int)piVar6); } else { operator_delete(piVar6); } } *param_1 = (int)(piVar4 + uVar7); *piVar8 = (int)piVar11 + iVar2; *piVar1 = (int)piVar4; } } return param_1; } ### FUNC FUN_0005489c @ 0005489c void FUN_0005489c(undefined4 *param_1,undefined4 param_2,locale *param_3) { int *piVar1; int iVar2; void *pvVar3; undefined1 auStack_28 [8]; undefined4 local_20; locale alStack_1c [4]; undefined1 auStack_18 [4]; piVar1 = (int *)std::locale::_M_use_facet(param_3,(id *)&std::ctype::id); iVar2 = FUN_00031886(*(undefined4 *)(*piVar1 + -4),&std::ctype::typeinfo); if (iVar2 == 1) { pvVar3 = (void *)*param_1; if (pvVar3 == (void *)0x0) { pvVar3 = operator_new(0x1c); FUN_0005529c(pvVar3,0,&local_20,auStack_28,auStack_18); *param_1 = pvVar3; } local_20 = param_2; std::locale::locale(alStack_1c,param_3); FUN_0005536c(auStack_28,pvVar3,&local_20); std::locale::~locale(alStack_1c); return; } return; } ### FUNC FUN_00054940 @ 00054940 void FUN_00054940(int *param_1,undefined4 param_2) { undefined4 local_c; if (*param_1 != 0) { local_c = param_2; FUN_00055706(*param_1,&local_c); } return; } ### FUNC FUN_00054958 @ 00054958 void FUN_00054958(locale *param_1,int *param_2,int param_3) { int iVar1; locale *plVar2; int extraout_r1; int *piVar3; int iVar4; iVar1 = *param_2; if (iVar1 != 0) { iVar4 = *(int *)(iVar1 + 8); __aeabi_uidivmod(param_3,(*(int *)(iVar1 + 0xc) - iVar4 >> 2) + -1); for (piVar3 = *(int **)(iVar4 + extraout_r1 * 4); (int *)*(int *)(iVar4 + extraout_r1 * 4 + 4) != piVar3; piVar3 = (int *)*piVar3) { if (piVar3[1] == param_3) { if (piVar3 != (int *)0x0) { plVar2 = (locale *)(piVar3 + 2); goto LAB_000549a0; } break; } } } plVar2 = (locale *)std::locale::classic(); LAB_000549a0: std::locale::locale(param_1,plVar2); return; } ### FUNC FUN_000549ac @ 000549ac int * FUN_000549ac(int *param_1,int param_2,char *param_3) { int iVar1; undefined4 *puVar2; undefined1 auStack_11c [256]; int local_1c; char *local_18; *param_1 = 0; param_1[1] = 0; local_18 = param_3; if (param_3 == (char *)0x0) { std::locale::_M_throw_on_null_name(); } else { iVar1 = FUN_0004a4bc(&local_18,auStack_11c,0,&local_1c); *param_1 = iVar1; if (iVar1 != 0) { if (param_2 == 1) { puVar2 = (undefined4 *)operator_new(4); *puVar2 = 0; param_1[1] = (int)puVar2; } return param_1; } } std::locale::_M_throw_on_creation_failure(local_1c,local_18,"messages"); /* WARNING: Subroutine does not return */ ___Unwind_Resume(); } ### FUNC FUN_00054a08 @ 00054a08 undefined4 * FUN_00054a08(undefined4 *param_1,int param_2,undefined4 param_3) { undefined4 *puVar1; *param_1 = param_3; puVar1 = (undefined4 *)0x0; if (param_2 == 1) { puVar1 = (undefined4 *)operator_new(4); *puVar1 = 0; } param_1[1] = puVar1; return param_1; } ### FUNC FUN_00054a26 @ 00054a26 undefined4 * FUN_00054a26(undefined4 *param_1) { undefined4 *puVar1; void *pvVar2; FUN_0004a824(*param_1); puVar1 = (undefined4 *)param_1[1]; if (puVar1 != (undefined4 *)0x0) { pvVar2 = (void *)*puVar1; if (pvVar2 != (void *)0x0) { FUN_000551be(pvVar2); operator_delete(pvVar2); } operator_delete(puVar1); } return param_1; } ### FUNC FUN_00054aa6 @ 00054aa6 void FUN_00054aa6(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,undefined4 param_5, int param_6) { undefined4 uVar1; undefined1 auStack_18 [4]; if ((-1 < param_3) && (*param_2 != 0)) { uVar1 = FUN_0004df40(*param_2,param_3,param_4,param_5,*(undefined4 *)(param_6 + 0x14)); FUN_00031c38(param_1,uVar1,auStack_18); return; } FUN_00036f1c(param_1); return; } ### FUNC FUN_00054aec @ 00054aec void FUN_00054aec(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6) { int *piVar1; int iVar2; locale *plVar3; char *__s; size_t sVar4; char *pcVar5; int extraout_r1; int *piVar6; int iVar7; uint uVar8; int *piVar9; int local_60 [16]; int *local_20; int *local_1c; uint local_18; iVar2 = *(int *)param_2[1]; if (iVar2 != 0) { iVar7 = *(int *)(iVar2 + 8); __aeabi_uidivmod(param_3,(*(int *)(iVar2 + 0xc) - iVar7 >> 2) + -1); for (piVar6 = *(int **)(iVar7 + extraout_r1 * 4); (int *)*(int *)(iVar7 + extraout_r1 * 4 + 4) != piVar6; piVar6 = (int *)*piVar6) { if (piVar6[1] == param_3) { if (piVar6 != (int *)0x0) { plVar3 = (locale *)(piVar6 + 2); goto LAB_00054b3c; } break; } } } plVar3 = (locale *)std::locale::classic(); LAB_00054b3c: std::locale::locale((locale *)local_60,plVar3); piVar6 = (int *)std::locale::_M_use_facet((locale *)local_60,(id *)&std::ctype::id); std::locale::~locale((locale *)local_60); __s = (char *)FUN_0004df40(*param_2,param_3,param_4,param_5,&DAT_0006478a); if ((__s == (char *)0x0) || ((*__s == '\0' && ((pcVar5 = (char *)FUN_0004df40(*param_2,param_3,param_4,param_5,&LAB_00054cb4), pcVar5 == (char *)0x0 || ((*pcVar5 == '*' && (pcVar5[1] == '\0')))))))) { FUN_0004bac8(param_1,param_6); } else { sVar4 = strlen(__s); local_20 = local_60; local_1c = local_20; if (0x3ffffffe < sVar4) { /* WARNING: Subroutine does not return */ std::__stl_throw_length_error("basic_string"); } if (0x10 < sVar4 + 1) { uVar8 = (sVar4 + 1) * 4; local_18 = uVar8; if (uVar8 < 0x81) { local_1c = (int *)std::__node_alloc::_M_allocate(&local_18); uVar8 = local_18; } else { local_1c = (int *)operator_new(uVar8); } local_60[0] = (int)local_1c + (uVar8 & 0xfffffffc); } piVar9 = local_1c + sVar4; if (0 < (int)(sVar4 * 4)) { uVar8 = sVar4 ^ 0xffffffff; if ((int)(sVar4 ^ 0xffffffff) < -1) { uVar8 = 0xfffffffe; } local_20 = local_1c; __aeabi_memclr4(local_1c,(sVar4 + uVar8) * 4 + 8); } piVar1 = local_1c; local_20 = piVar9; *piVar9 = 0; (**(code **)(*piVar6 + 0x2c))(piVar6,__s,__s + sVar4,piVar1); FUN_0004bac8(param_1,local_60); if ((local_1c != local_60) && (local_1c != (int *)0x0)) { if (0x80 < (uint)(local_60[0] - (int)local_1c)) { operator_delete(local_1c); return; } std::__node_alloc::_M_deallocate(local_1c,local_60[0] - (int)local_1c); return; } } return; } ### FUNC FUN_00054cc0 @ 00054cc0 void FUN_00054cc0(int *param_1,undefined4 param_2) { int iVar1; undefined4 local_14; if (*param_1 != 0) { FUN_0004df3e(*param_1,param_2); } if ((int *)param_1[1] != (int *)0x0) { iVar1 = *(int *)param_1[1]; if (iVar1 != 0) { local_14 = param_2; FUN_00055706(iVar1,&local_14); } } return; } ### FUNC messages @ 00054cf0 /* std::messages::messages(unsigned int) */ messages * __thiscall std::messages::messages(messages *this,uint param_1) { *(uint *)(this + 4) = (uint)(param_1 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__facet_0006a268; return this; } ### FUNC messages_byname @ 00054d1c /* std::messages_byname::messages_byname(char const*, unsigned int) */ void __thiscall std::messages_byname::messages_byname(messages_byname *this,char *param_1,uint param_2) { int *piVar1; int iVar2; undefined4 uVar3; undefined1 auStack_11c [256]; int local_1c; char *local_18; *(uint *)(this + 4) = (uint)(param_2 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__messages_byname_0006a284; piVar1 = (int *)operator_new(0xc); *piVar1 = 0; piVar1[1] = 0; local_18 = param_1; if (param_1 == (char *)0x0) { locale::_M_throw_on_null_name(); } else { iVar2 = FUN_0004a4bc(&local_18,auStack_11c,0,&local_1c); *piVar1 = iVar2; if (iVar2 != 0) { *(int **)(this + 0xc) = piVar1; return; } } uVar3 = locale::_M_throw_on_creation_failure(local_1c,local_18,"messages"); operator_delete(piVar1); locale::facet::~facet((facet *)this); /* WARNING: Subroutine does not return */ ___Unwind_Resume(uVar3); } ### FUNC messages_byname @ 00054dac /* std::messages_byname::messages_byname(_Locale_messages*) */ messages_byname * __thiscall std::messages_byname::messages_byname(messages_byname *this,_Locale_messages *param_1) { undefined4 *puVar1; *(undefined4 *)(this + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__messages_byname_0006a284; puVar1 = (undefined4 *)operator_new(0xc); *puVar1 = param_1; puVar1[1] = 0; *(undefined4 **)(this + 0xc) = puVar1; return this; } ### FUNC ~messages_byname @ 00054df0 /* std::messages_byname::~messages_byname() */ void __thiscall std::messages_byname::~messages_byname(messages_byname *this) { void *pvVar1; *(undefined ***)this = &PTR__messages_byname_0006a284; pvVar1 = *(void **)(this + 0xc); if (pvVar1 != (void *)0x0) { FUN_00054a26(pvVar1); operator_delete(pvVar1); } locale::facet::~facet((facet *)this); return; } ### FUNC ~messages_byname @ 00054e3c /* std::messages_byname::~messages_byname() */ void __thiscall std::messages_byname::~messages_byname(messages_byname *this) { void *pvVar1; *(undefined ***)this = &PTR__messages_byname_0006a284; pvVar1 = *(void **)(this + 0xc); if (pvVar1 != (void *)0x0) { FUN_00054a26(pvVar1); operator_delete(pvVar1); } locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_open @ 00054e98 /* std::messages_byname::do_open(std::string const&, std::locale const&) const */ int __thiscall std::messages_byname::do_open(messages_byname *this,string *param_1,locale *param_2) { int iVar1; int iVar2; int *piVar3; int iVar4; piVar3 = *(int **)(this + 0xc); iVar1 = *piVar3; iVar4 = -1; if (((iVar1 != 0) && (iVar1 = FUN_0004df38(iVar1,*(undefined4 *)(param_1 + 0x14)), iVar1 != -1)) && (iVar2 = piVar3[1], iVar4 = iVar1, iVar2 != 0)) { FUN_0005489c(iVar2,iVar1,param_2); } return iVar4; } ### FUNC do_get @ 00054ece /* std::messages_byname::do_get(int, int, int, std::string const&) const */ void std::messages_byname::do_get(int param_1,int param_2,int param_3,string *param_4) { undefined4 uVar1; undefined4 in_stack_00000000; int in_stack_00000004; undefined1 auStack_18 [4]; if ((-1 < param_3) && (**(int **)(param_2 + 0xc) != 0)) { uVar1 = FUN_0004df40(**(int **)(param_2 + 0xc),param_3,param_4,in_stack_00000000, *(undefined4 *)(in_stack_00000004 + 0x14)); FUN_00031c38(param_1,uVar1,auStack_18); return; } FUN_00036f1c(param_1); return; } ### FUNC do_close @ 00054f14 /* std::messages_byname::do_close(int) const */ void __thiscall std::messages_byname::do_close(messages_byname *this,int param_1) { int iVar1; int *piVar2; int local_14; piVar2 = *(int **)(this + 0xc); iVar1 = *piVar2; if (iVar1 != 0) { FUN_0004df3e(iVar1,param_1); } piVar2 = (int *)piVar2[1]; if (piVar2 != (int *)0x0) { iVar1 = *piVar2; if (iVar1 != 0) { local_14 = param_1; FUN_00055706(iVar1,&local_14); } } return; } ### FUNC messages @ 00054f44 /* std::messages::messages(unsigned int) */ messages * __thiscall std::messages::messages(messages *this,uint param_1) { *(uint *)(this + 4) = (uint)(param_1 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__facet_0006a2a0; return this; } ### FUNC messages_byname @ 00054f70 /* std::messages_byname::messages_byname(char const*, unsigned int) */ messages_byname * __thiscall std::messages_byname::messages_byname (messages_byname *this,char *param_1,uint param_2) { void *pvVar1; *(uint *)(this + 4) = (uint)(param_2 != 0); pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__messages_byname_0006a2bc; pvVar1 = operator_new(0xc); FUN_000549ac(pvVar1,1,param_1); *(void **)(this + 0xc) = pvVar1; return this; } ### FUNC messages_byname @ 00054fd4 /* std::messages_byname::messages_byname(_Locale_messages*) */ messages_byname * __thiscall std::messages_byname::messages_byname (messages_byname *this,_Locale_messages *param_1) { undefined4 *puVar1; undefined4 *puVar2; *(undefined4 *)(this + 4) = 0; pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0); *(undefined ***)this = &PTR__messages_byname_0006a2bc; puVar1 = (undefined4 *)operator_new(0xc); *puVar1 = param_1; puVar2 = (undefined4 *)operator_new(4); *puVar2 = 0; puVar1[1] = puVar2; *(undefined4 **)(this + 0xc) = puVar1; return this; } ### FUNC ~messages_byname @ 00055030 /* std::messages_byname::~messages_byname() */ void __thiscall std::messages_byname::~messages_byname(messages_byname *this) { void *pvVar1; *(undefined ***)this = &PTR__messages_byname_0006a2bc; pvVar1 = *(void **)(this + 0xc); if (pvVar1 != (void *)0x0) { FUN_00054a26(pvVar1); operator_delete(pvVar1); } locale::facet::~facet((facet *)this); return; } ### FUNC ~messages_byname @ 0005507c /* std::messages_byname::~messages_byname() */ void __thiscall std::messages_byname::~messages_byname(messages_byname *this) { void *pvVar1; *(undefined ***)this = &PTR__messages_byname_0006a2bc; pvVar1 = *(void **)(this + 0xc); if (pvVar1 != (void *)0x0) { FUN_00054a26(pvVar1); operator_delete(pvVar1); } locale::facet::~facet((facet *)this); operator_delete(this); return; } ### FUNC do_open @ 000550d8 /* std::messages_byname::do_open(std::string const&, std::locale const&) const */ int __thiscall std::messages_byname::do_open (messages_byname *this,string *param_1,locale *param_2) { int iVar1; int iVar2; int *piVar3; int iVar4; piVar3 = *(int **)(this + 0xc); iVar1 = *piVar3; iVar4 = -1; if (((iVar1 != 0) && (iVar1 = FUN_0004df38(iVar1,*(undefined4 *)(param_1 + 0x14)), iVar1 != -1)) && (iVar2 = piVar3[1], iVar4 = iVar1, iVar2 != 0)) { FUN_0005489c(iVar2,iVar1,param_2); } return iVar4; } ### FUNC do_get @ 0005510e /* std::messages_byname::do_get(int, int, int, std::wstring const&) const */ void std::messages_byname::do_get(int param_1,int param_2,int param_3,wstring *param_4) { FUN_00054aec(param_1,*(undefined4 *)(param_2 + 0xc)); return; } ### FUNC do_close @ 00055128 /* std::messages_byname::do_close(int) const */ void __thiscall std::messages_byname::do_close(messages_byname *this,int param_1) { int iVar1; int *piVar2; int local_14; piVar2 = *(int **)(this + 0xc); iVar1 = *piVar2; if (iVar1 != 0) { FUN_0004df3e(iVar1,param_1); } piVar2 = (int *)piVar2[1]; if (piVar2 != (int *)0x0) { iVar1 = *piVar2; if (iVar1 != 0) { local_14 = param_1; FUN_00055706(iVar1,&local_14); } } return; } ### FUNC FUN_00055156 @ 00055156 void FUN_00055156(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_0005517c @ 0005517c void FUN_0005517c(undefined4 param_1) { undefined4 in_stack_00000004; FUN_00036f1c(param_1,in_stack_00000004); return; } ### FUNC FUN_0005518a @ 0005518a void FUN_0005518a(facet *param_1) { std::locale::facet::~facet(param_1); operator_delete(param_1); return; } ### FUNC FUN_000551b0 @ 000551b0 void FUN_000551b0(undefined4 param_1) { undefined4 in_stack_00000004; FUN_0004bac8(param_1,in_stack_00000004); return; } ### FUNC FUN_000551be @ 000551be int FUN_000551be(int param_1) { undefined4 *puVar1; uint uVar2; void *pvVar3; undefined4 local_18; puVar1 = (undefined4 *)*(void **)(param_1 + 4); while (puVar1 != (undefined4 *)0x0) { pvVar3 = (void *)*puVar1; std::locale::~locale((locale *)(puVar1 + 2)); std::__node_alloc::_M_deallocate(puVar1,0xc); puVar1 = (undefined4 *)pvVar3; } *(undefined4 *)(param_1 + 4) = 0; local_18 = 0; FUN_0004aa50(param_1 + 8,*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2,&local_18); *(undefined4 *)(param_1 + 0x14) = 0; pvVar3 = *(void **)(param_1 + 8); if (pvVar3 != (void *)0x0) { uVar2 = *(int *)(param_1 + 0x10) - (int)pvVar3; if (uVar2 < 0x81) { std::__node_alloc::_M_deallocate(pvVar3,uVar2); } else { operator_delete(pvVar3); } } puVar1 = (undefined4 *)*(void **)(param_1 + 4); while (puVar1 != (undefined4 *)0x0) { pvVar3 = (void *)*puVar1; std::locale::~locale((locale *)(puVar1 + 2)); std::__node_alloc::_M_deallocate(puVar1,0xc); puVar1 = (undefined4 *)pvVar3; } *(undefined4 *)(param_1 + 4) = 0; return param_1; } ### FUNC FUN_0005529c @ 0005529c int FUN_0005529c(int param_1,uint param_2) { int *piVar1; int iVar2; int *piVar3; uint uVar4; uint uVar5; undefined4 local_18; *(undefined4 *)(param_1 + 4) = 0; *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0xc) = 0; *(undefined4 *)(param_1 + 0x10) = 0; *(undefined4 *)(param_1 + 0x14) = 0; *(undefined4 *)(param_1 + 0x18) = 0x3f800000; piVar1 = &DAT_0006537c; uVar5 = 0x1e; while (uVar4 = uVar5, 0 < (int)uVar4) { uVar5 = uVar4 >> 1; if ((uint)piVar1[uVar5] < param_2) { piVar1 = piVar1 + uVar5 + 1; uVar5 = (uVar4 - 1) - uVar5; } } piVar3 = &DAT_000653f0; if (piVar1 != (int *)&DAT_000653f4) { piVar3 = piVar1; } iVar2 = *piVar3; FUN_0004a990(param_1 + 8,iVar2 + 1); local_18 = 0; FUN_0004aa50(param_1 + 8,iVar2 + 1,&local_18); return param_1; } ### FUNC FUN_0005536c @ 0005536c void FUN_0005536c(undefined4 param_1,int param_2,undefined4 param_3) { int iVar1; undefined4 uVar2; uint uVar3; undefined4 *puVar4; int iVar5; undefined4 *puVar6; uint uVar7; uint uVar8; iVar1 = *(int *)(param_2 + 8); iVar5 = *(int *)(param_2 + 0xc); uVar2 = __floatunsisf(*(int *)(param_2 + 0x14) + 1); __divsf3(uVar2,*(undefined4 *)(param_2 + 0x18)); uVar3 = __fixunssfsi(); if ((iVar5 - iVar1 >> 2) - 1U < uVar3) { puVar6 = &DAT_0006537c; uVar8 = 0x1e; while (uVar7 = uVar8, 0 < (int)uVar7) { uVar8 = uVar7 >> 1; if ((uint)puVar6[uVar8] < uVar3) { puVar6 = puVar6 + uVar8 + 1; uVar8 = (uVar7 - 1) - uVar8; } } puVar4 = &DAT_000653f0; if (puVar6 != (undefined4 *)&DAT_000653f4) { puVar4 = puVar6; } FUN_00055480(param_2,*puVar4); } FUN_000553e8(param_1,param_2,param_3); return; } ### FUNC FUN_000553e8 @ 000553e8 void FUN_000553e8(undefined4 *param_1,int param_2,int *param_3) { undefined4 *puVar1; int extraout_r1; undefined4 *puVar2; undefined4 *puVar3; int iVar4; int iVar5; undefined4 local_1c; uint local_18; iVar5 = *(int *)(param_2 + 8); iVar4 = *param_3; __aeabi_uidivmod(iVar4,(*(int *)(param_2 + 0xc) - iVar5 >> 2) + -1); puVar3 = *(undefined4 **)(iVar5 + extraout_r1 * 4); puVar1 = *(undefined4 **)(iVar5 + extraout_r1 * 4 + 4); puVar2 = puVar3; if (puVar3 == puVar1) { FUN_0005564c(&local_1c,param_2,extraout_r1,param_3); *(undefined1 *)(param_1 + 1) = 1; *param_1 = local_1c; return; } do { if (puVar2[1] == iVar4) { *(undefined1 *)(param_1 + 1) = 0; *param_1 = puVar2; return; } puVar2 = (undefined4 *)*puVar2; } while (puVar1 != puVar2); local_18 = 0xc; puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); puVar2[1] = *param_3; std::locale::locale((locale *)(puVar2 + 2),(locale *)(param_3 + 1)); *puVar2 = 0; *puVar2 = *puVar3; *puVar3 = puVar2; *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; *(undefined1 *)(param_1 + 1) = 1; *param_1 = puVar2; return; } ### FUNC FUN_00055480 @ 00055480 void FUN_00055480(int param_1,int param_2) { uint uVar1; uint uVar2; void *pvVar3; int *****pppppiVar4; void *pvVar5; undefined4 uVar6; int extraout_r1; int *****pppppiVar7; int *****pppppiVar8; undefined4 *puVar9; int iVar10; int *****pppppiVar11; int ****ppppiVar12; int *****pppppiVar13; int ****ppppiVar14; int *****pppppiVar15; int *****pppppiVar16; void *local_3c; int local_38; void *local_20; int ****local_1c; uint local_18; local_20 = (void *)0x0; local_1c = (int ****)0x0; pppppiVar13 = (int *****)(param_1 + 4); uVar1 = param_2 + 1; if (uVar1 >> 0x1e == 0) { if (uVar1 == 0) { local_38 = 0; local_3c = (void *)0x0; } else { uVar1 = uVar1 * 4; local_18 = uVar1; if (uVar1 < 0x81) { local_20 = (void *)std::__node_alloc::_M_allocate(&local_18); uVar2 = local_18; } else { local_20 = operator_new(uVar1); uVar2 = uVar1; } local_3c = (void *)((int)local_20 + uVar1); local_38 = (int)local_20 + (uVar2 & 0xfffffffc); if (0 < (int)uVar1) { iVar10 = -2 - param_2; if (-2 - param_2 < -1) { iVar10 = -2; } __aeabi_memclr4(local_20,(iVar10 + param_2) * 4 + 0xc); } } while (pppppiVar16 = (int *****)*pppppiVar13, pppppiVar16 != (int *****)0x0) { ppppiVar14 = pppppiVar16[1]; __aeabi_uidivmod(ppppiVar14,param_2); pppppiVar11 = pppppiVar16; for (ppppiVar12 = *pppppiVar16; (ppppiVar12 != (int ****)0x0 && (ppppiVar14 == (int ****)ppppiVar12[1])); ppppiVar12 = (int ****)*ppppiVar12) { pppppiVar11 = (int *****)*pppppiVar11; } pppppiVar15 = *(int ******)((int)local_20 + extraout_r1 * 4); pvVar3 = (void *)((int)local_20 + extraout_r1 * 4); iVar10 = 0; pvVar5 = pvVar3; pppppiVar7 = &local_1c; if (pppppiVar15 != (int *****)local_1c) { do { pppppiVar7 = *(int ******)((int)pvVar5 + -4); pvVar5 = (void *)((int)pvVar5 + -4); } while (pppppiVar15 == pppppiVar7); iVar10 = ((int)pvVar5 - (int)local_20 >> 2) + 1; pppppiVar4 = (int *****)*pppppiVar7; if ((pppppiVar15 != pppppiVar4) && (pppppiVar8 = (int *****)*pppppiVar4, pppppiVar7 = pppppiVar4, pppppiVar15 != pppppiVar8) ) { for (pppppiVar4 = (int *****)*pppppiVar8; pppppiVar7 = pppppiVar8, pppppiVar15 != pppppiVar4; pppppiVar4 = (int *****)*pppppiVar4) { pppppiVar8 = (int *****)*pppppiVar8; } } } if (((pppppiVar13 != pppppiVar11) && (pppppiVar13 != pppppiVar7)) && (pppppiVar7 != pppppiVar11)) { ppppiVar12 = *pppppiVar7; *pppppiVar13 = *pppppiVar11; *pppppiVar7 = (int ****)pppppiVar16; *pppppiVar11 = ppppiVar12; } puVar9 = (undefined4 *)((int)local_20 + iVar10 * 4); uVar1 = (int)pvVar3 + (4 - (int)puVar9); if (0 < (int)uVar1) { iVar10 = (uVar1 >> 2) + 1; do { *puVar9 = pppppiVar16; puVar9 = puVar9 + 1; iVar10 = iVar10 + -1; } while (1 < iVar10); } } *(int *****)(param_1 + 4) = local_1c; *(void **)(param_1 + 0xc) = local_3c; pvVar5 = *(void **)(param_1 + 8); *(void **)(param_1 + 8) = local_20; iVar10 = *(int *)(param_1 + 0x10); *(int *)(param_1 + 0x10) = local_38; local_1c = (int ****)pppppiVar16; if (pvVar5 != (void *)0x0) { uVar1 = iVar10 - (int)pvVar5; if (uVar1 < 0x81) { std::__node_alloc::_M_deallocate(pvVar5,uVar1); pppppiVar16 = (int *****)local_1c; } else { operator_delete(pvVar5); pppppiVar16 = (int *****)local_1c; } } while (pppppiVar16 != (int *****)0x0) { pppppiVar13 = (int *****)*pppppiVar16; std::locale::~locale((locale *)(pppppiVar16 + 2)); std::__node_alloc::_M_deallocate(pppppiVar16,0xc); pppppiVar16 = pppppiVar13; } return; } FUN_00030824(4); uVar6 = FUN_00031390(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar6,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9); } ### FUNC FUN_0005564c @ 0005564c void FUN_0005564c(undefined4 *param_1,int param_2,int param_3,undefined4 *param_4) { int iVar1; undefined4 *puVar2; uint uVar3; int iVar4; undefined4 *puVar5; undefined4 *puVar6; undefined4 *puVar7; int local_30; uint local_18; param_3 = param_3 * 4; iVar4 = *(int *)(param_2 + 8); puVar5 = *(undefined4 **)(iVar4 + param_3); iVar1 = iVar4 + param_3; if (puVar5 == *(undefined4 **)(param_2 + 4)) { local_30 = 0; puVar6 = (undefined4 *)(param_2 + 4); } else { do { puVar6 = *(undefined4 **)(iVar1 + -4); iVar1 = iVar1 + -4; } while (puVar5 == puVar6); local_30 = (iVar1 - iVar4 >> 2) + 1; puVar2 = (undefined4 *)*puVar6; if (((puVar5 != puVar2) && (puVar7 = (undefined4 *)*puVar2, puVar6 = puVar2, puVar5 != puVar7)) && (puVar2 = (undefined4 *)*puVar7, puVar6 = puVar7, puVar5 != puVar2)) { puVar6 = puVar2; for (puVar7 = (undefined4 *)*puVar2; puVar5 != puVar7; puVar7 = (undefined4 *)*puVar7) { puVar6 = (undefined4 *)*puVar6; } } } local_18 = 0xc; puVar5 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18); puVar5[1] = *param_4; std::locale::locale((locale *)(puVar5 + 2),(locale *)(param_4 + 1)); *puVar5 = 0; *puVar5 = *puVar6; *puVar6 = puVar5; puVar6 = (undefined4 *)(iVar4 + local_30 * 4); uVar3 = (iVar4 + param_3 + 4) - (int)puVar6; if (0 < (int)uVar3) { iVar1 = (uVar3 >> 2) + 1; do { *puVar6 = puVar5; puVar6 = puVar6 + 1; iVar1 = iVar1 + -1; } while (1 < iVar1); } *(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1; *param_1 = *(undefined4 *)(*(int *)(param_2 + 8) + param_3); return; } ### FUNC FUN_00055706 @ 00055706 int FUN_00055706(int param_1,int *param_2) { int iVar1; int *piVar2; int extraout_r1; int *piVar3; uint uVar4; int iVar5; int iVar6; int iVar7; undefined4 *puVar8; int *piVar9; int iVar10; int *piVar11; int *piVar12; int local_2c; iVar10 = *(int *)(param_1 + 8); iVar7 = *param_2; __aeabi_uidivmod(iVar7,(*(int *)(param_1 + 0xc) - iVar10 >> 2) + -1); iVar5 = extraout_r1 * 4; piVar9 = *(int **)(iVar10 + iVar5); iVar6 = iVar10 + iVar5; piVar3 = *(int **)(iVar6 + 4); iVar1 = 0; if (piVar9 != piVar3) { if (piVar9[1] != iVar7) { piVar11 = (int *)*piVar9; iVar1 = 0; LAB_00055790: if (piVar3 != piVar11) { if (piVar11[1] != iVar7) goto LAB_0005578c; iVar5 = 1; do { iVar1 = iVar5; puVar8 = (undefined4 *)*piVar9; piVar11 = (int *)*puVar8; *piVar9 = (int)piVar11; std::locale::~locale((locale *)(puVar8 + 2)); if (puVar8 != (undefined4 *)0x0) { std::__node_alloc::_M_deallocate(puVar8,0xc); } } while ((piVar3 != piVar11) && (iVar5 = iVar1 + 1, piVar11[1] == *param_2)); } goto LAB_0005582c; } if (piVar9 == *(int **)(param_1 + 4)) { local_2c = 0; piVar11 = (int *)(param_1 + 4); } else { do { piVar11 = *(int **)(iVar6 + -4); iVar6 = iVar6 + -4; } while (piVar9 == piVar11); local_2c = (iVar6 - iVar10 >> 2) + 1; piVar2 = (int *)*piVar11; if (((piVar9 != piVar2) && (piVar12 = (int *)*piVar2, piVar11 = piVar2, piVar9 != piVar12)) && (piVar2 = (int *)*piVar12, piVar11 = piVar12, piVar9 != piVar2)) { piVar11 = piVar2; for (piVar12 = (int *)*piVar2; piVar9 != piVar12; piVar12 = (int *)*piVar12) { piVar11 = (int *)*piVar11; } } } iVar6 = 1; do { iVar1 = iVar6; puVar8 = (undefined4 *)*piVar11; piVar9 = (int *)*puVar8; *piVar11 = (int)piVar9; std::locale::~locale((locale *)(puVar8 + 2)); if (puVar8 != (undefined4 *)0x0) { std::__node_alloc::_M_deallocate(puVar8,0xc); } } while ((piVar3 != piVar9) && (iVar6 = iVar1 + 1, piVar9[1] == *param_2)); puVar8 = (undefined4 *)(*(int *)(param_1 + 8) + local_2c * 4); uVar4 = (*(int *)(param_1 + 8) + iVar5 + 4) - (int)puVar8; if (0 < (int)uVar4) { iVar5 = (uVar4 >> 2) + 1; do { *puVar8 = piVar9; puVar8 = puVar8 + 1; iVar5 = iVar5 + -1; } while (1 < iVar5); } LAB_0005582c: *(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) - iVar1; FUN_00055840(); } return iVar1; LAB_0005578c: piVar11 = (int *)*piVar11; piVar9 = (int *)*piVar9; goto LAB_00055790; } ### FUNC FUN_00055840 @ 00055840 void FUN_00055840(int param_1) { undefined4 uVar1; undefined4 uVar2; undefined4 uVar3; undefined4 uVar4; int iVar5; uint uVar6; uint uVar7; char *pcVar8; uint uVar9; char *pcVar10; uVar9 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2) - 1; uVar1 = __floatunsisf(*(undefined4 *)(param_1 + 0x14)); uVar2 = __floatunsisf(uVar9); uVar2 = __divsf3(uVar1,uVar2); uVar3 = *(undefined4 *)(param_1 + 0x18); uVar4 = __mulsf3(uVar3,0x3e800000); iVar5 = __aeabi_fcmpgt(uVar2,uVar4); if (iVar5 == 0) { iVar5 = 0; uVar7 = 0x1e; while (uVar6 = uVar7, 0 < (int)uVar6) { uVar7 = uVar6 >> 1; if ((uint)(&DAT_0006537c)[uVar7 + iVar5] < uVar9) { iVar5 = uVar7 + iVar5 + 1; uVar7 = (uVar6 - 1) - uVar7; } } pcVar8 = (char *)(&DAT_0006537c + iVar5); if ((iVar5 * 4 == 0x78) || ((iVar5 != 0 && ((&DAT_0006537c)[iVar5] == uVar9)))) { pcVar8 = "St7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE" + iVar5 * 4 + 0x38; } if (pcVar8 == "\a") { if (uVar9 < 8) { return; } pcVar8 = "\a"; } else { uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -4)); uVar2 = __divsf3(uVar1,uVar2); iVar5 = __aeabi_fcmpgt(uVar2,uVar3); if (iVar5 != 0) { return; } if (pcVar8 != "\x17") { do { pcVar10 = pcVar8 + -4; uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -8)); uVar2 = __divsf3(uVar1,uVar2); iVar5 = __aeabi_fcmpgt(uVar2,uVar3); if (iVar5 != 0) break; pcVar8 = pcVar10; } while (pcVar10 != "\x17"); } } FUN_00055480(param_1,*(undefined4 *)pcVar8); } return; } ### FUNC FUN_00055958 @ 00055958 void FUN_00055958(void) { undefined4 uVar1; FUN_00030824(4); uVar1 = FUN_000318b0(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e38,0x318c9); } ### FUNC FUN_00055980 @ 00055980 void FUN_00055980(void) { undefined4 uVar1; FUN_00030824(4); uVar1 = FUN_000318f4(); /* WARNING: Subroutine does not return */ FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e44,0x3190d); } ### FUNC __udivsi3 @ 000559a8 uint __udivsi3(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; bool bVar4; if (param_2 - 1 == 0) { return param_1; } if (param_2 == 0) { if (param_1 != 0) { param_1 = 0xffffffff; } uVar1 = __aeabi_ldiv0(param_1); return uVar1; } if (param_1 <= param_2) { return (uint)(param_1 == param_2); } if ((param_2 & param_2 - 1) == 0) { return param_1 >> (0x1fU - LZCOUNT(param_2) & 0xff); } uVar2 = param_2 << (LZCOUNT(param_2) - LZCOUNT(param_1) & 0xffU); uVar1 = 1 << (LZCOUNT(param_2) - LZCOUNT(param_1) & 0xffU); uVar3 = 0; while( true ) { if (uVar2 <= param_1) { param_1 = param_1 - uVar2; uVar3 = uVar3 | uVar1; } if (uVar2 >> 1 <= param_1) { param_1 = param_1 - (uVar2 >> 1); uVar3 = uVar3 | uVar1 >> 1; } if (uVar2 >> 2 <= param_1) { param_1 = param_1 - (uVar2 >> 2); uVar3 = uVar3 | uVar1 >> 2; } if (uVar2 >> 3 <= param_1) { param_1 = param_1 - (uVar2 >> 3); uVar3 = uVar3 | uVar1 >> 3; } bVar4 = param_1 == 0; if (!bVar4) { uVar1 = uVar1 >> 4; bVar4 = uVar1 == 0; } if (bVar4) break; uVar2 = uVar2 >> 4; } return uVar3; } ### FUNC __aeabi_uidivmod @ 00055a50 void __aeabi_uidivmod(int param_1,int param_2) { if (param_2 != 0) { __udivsi3(); return; } if (param_1 != 0) { param_1 = -1; } __aeabi_ldiv0(param_1); return; } ### FUNC __divsi3 @ 00055a70 uint __divsi3(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; bool bVar6; if (param_2 == 0) { bVar6 = (int)param_1 < 0; if (0 < (int)param_1) { param_1 = 0x7fffffff; } if (bVar6) { param_1 = 0x80000000; } uVar1 = __aeabi_ldiv0(param_1); return uVar1; } uVar5 = param_1 ^ param_2; uVar1 = param_2; if ((int)param_2 < 0) { uVar1 = -param_2; } if (uVar1 - 1 == 0) { if ((int)param_2 < 0) { param_1 = -param_1; } return param_1; } uVar4 = param_1; if ((int)param_1 < 0) { uVar4 = -param_1; } if (uVar4 <= uVar1) { if (uVar4 < uVar1) { param_1 = 0; } if (uVar4 == uVar1) { param_1 = (int)uVar5 >> 0x1f | 1; } return param_1; } if ((uVar1 & uVar1 - 1) == 0) { uVar4 = uVar4 >> (0x1fU - LZCOUNT(uVar1) & 0xff); if ((int)uVar5 < 0) { uVar4 = -uVar4; } return uVar4; } uVar3 = uVar1 << (LZCOUNT(uVar1) - LZCOUNT(uVar4) & 0xffU); uVar1 = 1 << (LZCOUNT(uVar1) - LZCOUNT(uVar4) & 0xffU); uVar2 = 0; while( true ) { if (uVar3 <= uVar4) { uVar4 = uVar4 - uVar3; uVar2 = uVar2 | uVar1; } if (uVar3 >> 1 <= uVar4) { uVar4 = uVar4 - (uVar3 >> 1); uVar2 = uVar2 | uVar1 >> 1; } if (uVar3 >> 2 <= uVar4) { uVar4 = uVar4 - (uVar3 >> 2); uVar2 = uVar2 | uVar1 >> 2; } if (uVar3 >> 3 <= uVar4) { uVar4 = uVar4 - (uVar3 >> 3); uVar2 = uVar2 | uVar1 >> 3; } bVar6 = uVar4 == 0; if (!bVar6) { uVar1 = uVar1 >> 4; bVar6 = uVar1 == 0; } if (bVar6) break; uVar3 = uVar3 >> 4; } if ((int)uVar5 < 0) { uVar2 = -uVar2; } return uVar2; } ### FUNC FUN_00055a78 @ 00055a78 uint FUN_00055a78(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; bool in_NG; bool bVar6; uVar5 = param_1 ^ param_2; uVar2 = param_2; if (in_NG) { uVar2 = -param_2; } if (uVar2 - 1 == 0) { if ((int)param_2 < 0) { param_1 = -param_1; } return param_1; } uVar4 = param_1; if ((int)param_1 < 0) { uVar4 = -param_1; } if (uVar4 <= uVar2) { if (uVar4 < uVar2) { param_1 = 0; } if (uVar4 == uVar2) { param_1 = (int)uVar5 >> 0x1f | 1; } return param_1; } if ((uVar2 & uVar2 - 1) == 0) { uVar4 = uVar4 >> (0x1fU - LZCOUNT(uVar2) & 0xff); if ((int)uVar5 < 0) { uVar4 = -uVar4; } return uVar4; } uVar3 = uVar2 << (LZCOUNT(uVar2) - LZCOUNT(uVar4) & 0xffU); uVar2 = 1 << (LZCOUNT(uVar2) - LZCOUNT(uVar4) & 0xffU); uVar1 = 0; while( true ) { if (uVar3 <= uVar4) { uVar4 = uVar4 - uVar3; uVar1 = uVar1 | uVar2; } if (uVar3 >> 1 <= uVar4) { uVar4 = uVar4 - (uVar3 >> 1); uVar1 = uVar1 | uVar2 >> 1; } if (uVar3 >> 2 <= uVar4) { uVar4 = uVar4 - (uVar3 >> 2); uVar1 = uVar1 | uVar2 >> 2; } if (uVar3 >> 3 <= uVar4) { uVar4 = uVar4 - (uVar3 >> 3); uVar1 = uVar1 | uVar2 >> 3; } bVar6 = uVar4 == 0; if (!bVar6) { uVar2 = uVar2 >> 4; bVar6 = uVar2 == 0; } if (bVar6) break; uVar3 = uVar3 >> 4; } if ((int)uVar5 < 0) { uVar1 = -uVar1; } return uVar1; } ### FUNC __aeabi_idivmod @ 00055b4c void __aeabi_idivmod(int param_1,int param_2) { bool bVar1; if (param_2 != 0) { FUN_00055a78(); return; } bVar1 = param_1 < 0; if (0 < param_1) { param_1 = 0x7fffffff; } if (bVar1) { param_1 = -0x80000000; } __aeabi_ldiv0(param_1); return; } ### FUNC __aeabi_drsub @ 00055b6c void __aeabi_drsub(undefined4 param_1,uint param_2) { __adddf3(param_1,param_2 ^ 0x80000000); return; } ### FUNC __subdf3 @ 00055b74 ulonglong __subdf3(uint param_1,uint param_2,uint param_3,uint param_4) { int iVar1; uint uVar2; byte bVar3; byte bVar4; uint uVar5; uint uVar6; uint uVar7; uint uVar8; uint uVar9; int iVar10; uint uVar11; uint uVar12; uint uVar13; bool bVar14; bool bVar15; bool bVar16; uVar8 = param_4 ^ 0x80000000; uVar11 = param_2 << 1; param_4 = param_4 << 1; iVar10 = (int)uVar11 >> 0x15; iVar1 = (int)param_4 >> 0x15; if ((((uVar11 == param_4 && param_1 == param_3 || uVar11 == 0 && param_1 == 0) || param_4 == 0 && param_3 == 0) || iVar10 == -1) || iVar1 == -1) { if (iVar10 == -1 || iVar1 == -1) { uVar11 = uVar8; uVar12 = param_3; if (iVar10 == -1) { uVar11 = param_2; uVar12 = param_1; } if (iVar10 != -1 || iVar1 != -1) { param_3 = uVar12; uVar8 = uVar11; } bVar14 = (uVar11 & 0xfffff) == 0; bVar15 = uVar12 == 0 && bVar14; if (uVar12 == 0 && bVar14) { bVar15 = param_3 == 0 && (uVar8 & 0xfffff) == 0; } if (bVar15) { bVar15 = uVar11 == uVar8; } if (!bVar15) { uVar11 = uVar11 | 0x80000; } return CONCAT44(uVar11,uVar12); } if (uVar11 != param_4 || param_1 != param_3) { if (uVar11 == 0 && param_1 == 0) { param_1 = param_3; param_2 = uVar8; } return CONCAT44(param_2,param_1); } if (param_2 != uVar8) { return 0; } if (uVar11 >> 0x15 == 0) { bVar3 = (byte)(param_1 >> 0x1f); uVar11 = param_2 * 2 + (uint)bVar3; if (CARRY4(param_2,param_2) || CARRY4(param_2 * 2,(uint)bVar3)) { uVar11 = uVar11 | 0x80000000; } return CONCAT44(uVar11,param_1 << 1); } if (uVar11 < 0xffc00000) { return CONCAT44(param_2 + 0x100000,param_1); } param_2 = param_2 & 0x80000000; LAB_00055de8: return (ulonglong)(param_2 | 0x7ff00000) << 0x20; } uVar11 = uVar11 >> 0x15; param_4 = param_4 >> 0x15; uVar12 = param_4 - uVar11; bVar14 = uVar12 != 0; if (param_4 < uVar11) { uVar12 = -uVar12; } uVar7 = param_1; uVar9 = param_2; if (bVar14 && uVar11 <= param_4) { uVar11 = uVar11 + uVar12; uVar7 = param_3; uVar9 = uVar8; param_3 = param_1; uVar8 = param_2; } if (0x36 < uVar12) { return CONCAT44(uVar9,uVar7); } uVar6 = uVar9 & 0xfffff | 0x100000; if ((uVar9 & 0x80000000) != 0) { bVar14 = uVar7 != 0; uVar7 = -uVar7; uVar6 = -(uVar6 + bVar14); } uVar9 = uVar8 & 0xfffff | 0x100000; if ((uVar8 & 0x80000000) != 0) { bVar14 = param_3 != 0; param_3 = -param_3; uVar9 = -(uVar9 + bVar14); } if (uVar11 == uVar12) { uVar9 = uVar9 ^ 0x100000; if (uVar11 == 0) { uVar6 = uVar6 ^ 0x100000; uVar11 = 1; } else { uVar12 = uVar12 - 1; } } uVar8 = -uVar12 + 0x20; if ((int)uVar12 < 0x21) { uVar13 = param_3 << (uVar8 & 0xff); param_3 = param_3 >> (uVar12 & 0xff); uVar5 = uVar7 + param_3; uVar2 = uVar9 << (uVar8 & 0xff); uVar8 = uVar5 + uVar2; uVar12 = uVar6 + CARRY4(uVar7,param_3) + ((int)uVar9 >> (uVar12 & 0xff)) + (uint)CARRY4(uVar5,uVar2); } else { uVar13 = uVar9 << (-uVar12 + 0x40 & 0xff); if (param_3 != 0) { uVar13 = uVar13 | 2; } uVar12 = (int)uVar9 >> (uVar12 - 0x20 & 0xff); uVar8 = uVar7 + uVar12; uVar12 = uVar6 + ((int)uVar9 >> 0x1f) + (uint)CARRY4(uVar7,uVar12); } param_2 = uVar12 & 0x80000000; uVar7 = uVar12; if ((int)uVar12 < 0) { bVar14 = uVar13 == 0; uVar13 = -uVar13; uVar7 = -uVar8; uVar8 = -(uVar8 + !bVar14); uVar7 = -(uVar12 + (bVar14 <= uVar7)); } if (0xfffff < uVar7) { uVar9 = uVar11 - 1; if (0x1fffff < uVar7) { bVar3 = (byte)uVar7; uVar7 = uVar7 >> 1; bVar4 = (byte)uVar8; uVar8 = (uint)(bVar3 & 1) << 0x1f | uVar8 >> 1; uVar13 = (uint)(bVar4 & 1) << 0x1f | uVar13 >> 1; uVar9 = uVar11; if (0xffbfffff < uVar11 * 0x200000) goto LAB_00055de8; } LAB_00055c90: bVar14 = 0x7fffffff < uVar13; if (uVar13 == 0x80000000) { bVar14 = (bool)((byte)uVar8 & 1); } return CONCAT44(uVar7 + uVar9 * 0x100000 + (uint)CARRY4(uVar8,(uint)bVar14) | param_2, uVar8 + bVar14); } bVar3 = (byte)(uVar13 >> 0x1f); uVar13 = uVar13 << 1; uVar9 = uVar8 * 2; bVar14 = CARRY4(uVar8,uVar8); uVar8 = uVar8 * 2 + (uint)bVar3; uVar7 = uVar7 * 2 + (uint)(bVar14 || CARRY4(uVar9,(uint)bVar3)); uVar9 = uVar11 - 2; if ((uVar7 & 0x100000) != 0) goto LAB_00055c90; uVar11 = uVar8; uVar6 = uVar7; if (uVar7 == 0) { uVar11 = 0; uVar6 = uVar8; } iVar10 = LZCOUNT(uVar6); if (uVar7 == 0) { iVar10 = iVar10 + 0x20; } uVar7 = iVar10 - 0xb; bVar16 = SBORROW4(uVar7,0x20); uVar8 = iVar10 - 0x2b; bVar14 = (int)uVar8 < 0; bVar15 = uVar8 == 0; if ((int)uVar7 < 0x20) { bVar16 = SCARRY4(uVar8,0xc); iVar10 = iVar10 + -0x1f; bVar14 = iVar10 < 0; bVar15 = iVar10 == 0; uVar8 = uVar7; if (!bVar15 && bVar14 == bVar16) { uVar11 = uVar6 << (uVar7 & 0xff); uVar6 = uVar6 >> (0xcU - iVar10 & 0xff); goto LAB_00055d10; } } if (bVar15 || bVar14 != bVar16) { uVar13 = 0x20 - uVar8; } uVar6 = uVar6 << (uVar8 & 0xff); if (bVar15 || bVar14 != bVar16) { uVar6 = uVar6 | uVar11 >> (uVar13 & 0xff); uVar11 = uVar11 << (uVar8 & 0xff); } LAB_00055d10: if ((int)uVar7 <= (int)uVar9) { return CONCAT44(uVar6 + (uVar9 - uVar7) * 0x100000 | param_2,uVar11); } uVar8 = ~(uVar9 - uVar7); if ((int)uVar8 < 0x1f) { iVar10 = uVar8 - 0x13; if (iVar10 != 0 && iVar10 < 0 == SCARRY4(uVar8 - 0x1f,0xc)) { return CONCAT44(uVar12,uVar11 >> (0x20 - (0xcU - iVar10) & 0xff) | uVar6 << (0xcU - iVar10 & 0xff)) & 0x80000000ffffffff; } uVar8 = uVar8 + 1; return CONCAT44(param_2 | uVar6 >> (uVar8 & 0xff), uVar11 >> (uVar8 & 0xff) | uVar6 << (0x20 - uVar8 & 0xff)); } return CONCAT44(uVar12,uVar6 >> (uVar8 - 0x1f & 0xff)) & 0x80000000ffffffff; } ### FUNC __adddf3 @ 00055b78 ulonglong __adddf3(uint param_1,uint param_2,uint param_3,uint param_4) { int iVar1; uint uVar2; byte bVar3; byte bVar4; uint uVar5; uint uVar6; uint uVar7; int iVar8; uint uVar9; uint uVar10; uint uVar11; uint uVar12; uint uVar13; bool bVar14; bool bVar15; bool bVar16; uVar9 = param_2 << 1; uVar6 = param_4 << 1; iVar8 = (int)uVar9 >> 0x15; iVar1 = (int)uVar6 >> 0x15; if ((((uVar9 == uVar6 && param_1 == param_3 || uVar9 == 0 && param_1 == 0) || uVar6 == 0 && param_3 == 0) || iVar8 == -1) || iVar1 == -1) { if (iVar8 == -1 || iVar1 == -1) { uVar9 = param_4; uVar6 = param_3; if (iVar8 == -1) { uVar9 = param_2; uVar6 = param_1; } if (iVar8 != -1 || iVar1 != -1) { param_3 = uVar6; param_4 = uVar9; } bVar14 = (uVar9 & 0xfffff) == 0; bVar15 = uVar6 == 0 && bVar14; if (uVar6 == 0 && bVar14) { bVar15 = param_3 == 0 && (param_4 & 0xfffff) == 0; } if (bVar15) { bVar15 = uVar9 == param_4; } if (!bVar15) { uVar9 = uVar9 | 0x80000; } return CONCAT44(uVar9,uVar6); } if (uVar9 != uVar6 || param_1 != param_3) { if (uVar9 == 0 && param_1 == 0) { param_1 = param_3; param_2 = param_4; } return CONCAT44(param_2,param_1); } if (param_2 != param_4) { return 0; } if (uVar9 >> 0x15 == 0) { bVar3 = (byte)(param_1 >> 0x1f); uVar9 = param_2 * 2 + (uint)bVar3; if (CARRY4(param_2,param_2) || CARRY4(param_2 * 2,(uint)bVar3)) { uVar9 = uVar9 | 0x80000000; } return CONCAT44(uVar9,param_1 << 1); } if (uVar9 < 0xffc00000) { return CONCAT44(param_2 + 0x100000,param_1); } param_2 = param_2 & 0x80000000; LAB_00055de8: return (ulonglong)(param_2 | 0x7ff00000) << 0x20; } uVar9 = uVar9 >> 0x15; uVar6 = uVar6 >> 0x15; uVar11 = uVar6 - uVar9; bVar14 = uVar11 != 0; if (uVar6 < uVar9) { uVar11 = -uVar11; } uVar10 = param_1; uVar7 = param_2; if (bVar14 && uVar9 <= uVar6) { uVar9 = uVar9 + uVar11; uVar10 = param_3; uVar7 = param_4; param_3 = param_1; param_4 = param_2; } if (0x36 < uVar11) { return CONCAT44(uVar7,uVar10); } uVar6 = uVar7 & 0xfffff | 0x100000; if ((uVar7 & 0x80000000) != 0) { bVar14 = uVar10 != 0; uVar10 = -uVar10; uVar6 = -(uVar6 + bVar14); } uVar7 = param_4 & 0xfffff | 0x100000; if ((param_4 & 0x80000000) != 0) { bVar14 = param_3 != 0; param_3 = -param_3; uVar7 = -(uVar7 + bVar14); } if (uVar9 == uVar11) { uVar7 = uVar7 ^ 0x100000; if (uVar9 == 0) { uVar6 = uVar6 ^ 0x100000; uVar9 = 1; } else { uVar11 = uVar11 - 1; } } uVar13 = -uVar11 + 0x20; if ((int)uVar11 < 0x21) { uVar12 = param_3 << (uVar13 & 0xff); param_3 = param_3 >> (uVar11 & 0xff); uVar5 = uVar10 + param_3; uVar2 = uVar7 << (uVar13 & 0xff); uVar13 = uVar5 + uVar2; uVar6 = uVar6 + CARRY4(uVar10,param_3) + ((int)uVar7 >> (uVar11 & 0xff)) + (uint)CARRY4(uVar5,uVar2); } else { uVar12 = uVar7 << (-uVar11 + 0x40 & 0xff); if (param_3 != 0) { uVar12 = uVar12 | 2; } uVar11 = (int)uVar7 >> (uVar11 - 0x20 & 0xff); uVar13 = uVar10 + uVar11; uVar6 = uVar6 + ((int)uVar7 >> 0x1f) + (uint)CARRY4(uVar10,uVar11); } param_2 = uVar6 & 0x80000000; uVar11 = uVar6; if ((int)uVar6 < 0) { bVar14 = uVar12 == 0; uVar12 = -uVar12; uVar11 = -uVar13; uVar13 = -(uVar13 + !bVar14); uVar11 = -(uVar6 + (bVar14 <= uVar11)); } if (0xfffff < uVar11) { uVar10 = uVar9 - 1; if (0x1fffff < uVar11) { bVar3 = (byte)uVar11; uVar11 = uVar11 >> 1; bVar4 = (byte)uVar13; uVar13 = (uint)(bVar3 & 1) << 0x1f | uVar13 >> 1; uVar12 = (uint)(bVar4 & 1) << 0x1f | uVar12 >> 1; uVar10 = uVar9; if (0xffbfffff < uVar9 * 0x200000) goto LAB_00055de8; } LAB_00055c90: bVar14 = 0x7fffffff < uVar12; if (uVar12 == 0x80000000) { bVar14 = (bool)((byte)uVar13 & 1); } return CONCAT44(uVar11 + uVar10 * 0x100000 + (uint)CARRY4(uVar13,(uint)bVar14) | param_2, uVar13 + bVar14); } bVar3 = (byte)(uVar12 >> 0x1f); uVar12 = uVar12 << 1; uVar10 = uVar13 * 2; bVar14 = CARRY4(uVar13,uVar13); uVar13 = uVar13 * 2 + (uint)bVar3; uVar11 = uVar11 * 2 + (uint)(bVar14 || CARRY4(uVar10,(uint)bVar3)); uVar10 = uVar9 - 2; if ((uVar11 & 0x100000) != 0) goto LAB_00055c90; uVar9 = uVar13; uVar7 = uVar11; if (uVar11 == 0) { uVar9 = 0; uVar7 = uVar13; } iVar8 = LZCOUNT(uVar7); if (uVar11 == 0) { iVar8 = iVar8 + 0x20; } uVar13 = iVar8 - 0xb; bVar16 = SBORROW4(uVar13,0x20); uVar11 = iVar8 - 0x2b; bVar14 = (int)uVar11 < 0; bVar15 = uVar11 == 0; if ((int)uVar13 < 0x20) { bVar16 = SCARRY4(uVar11,0xc); iVar8 = iVar8 + -0x1f; bVar14 = iVar8 < 0; bVar15 = iVar8 == 0; uVar11 = uVar13; if (!bVar15 && bVar14 == bVar16) { uVar9 = uVar7 << (uVar13 & 0xff); uVar7 = uVar7 >> (0xcU - iVar8 & 0xff); goto LAB_00055d10; } } if (bVar15 || bVar14 != bVar16) { uVar12 = 0x20 - uVar11; } uVar7 = uVar7 << (uVar11 & 0xff); if (bVar15 || bVar14 != bVar16) { uVar7 = uVar7 | uVar9 >> (uVar12 & 0xff); uVar9 = uVar9 << (uVar11 & 0xff); } LAB_00055d10: if ((int)uVar13 <= (int)uVar10) { return CONCAT44(uVar7 + (uVar10 - uVar13) * 0x100000 | param_2,uVar9); } uVar11 = ~(uVar10 - uVar13); if ((int)uVar11 < 0x1f) { iVar8 = uVar11 - 0x13; if (iVar8 != 0 && iVar8 < 0 == SCARRY4(uVar11 - 0x1f,0xc)) { return CONCAT44(uVar6,uVar9 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar7 << (0xcU - iVar8 & 0xff) ) & 0x80000000ffffffff; } uVar11 = uVar11 + 1; return CONCAT44(param_2 | uVar7 >> (uVar11 & 0xff), uVar9 >> (uVar11 & 0xff) | uVar7 << (0x20 - uVar11 & 0xff)); } return CONCAT44(uVar6,uVar7 >> (uVar11 - 0x1f & 0xff)) & 0x80000000ffffffff; } ### FUNC __floatunsidf @ 00055e24 ulonglong __floatunsidf(uint param_1) { uint uVar1; uint uVar2; int iVar3; uint uVar4; uint in_r12; bool bVar5; bool bVar6; bool bVar7; if (param_1 == 0) { return 0; } uVar1 = 0; iVar3 = LZCOUNT(param_1); uVar4 = iVar3 + 0x15; bVar7 = SBORROW4(uVar4,0x20); uVar2 = iVar3 - 0xb; bVar5 = (int)uVar2 < 0; bVar6 = uVar2 == 0; if (uVar4 < 0x20) { bVar7 = SCARRY4(uVar2,0xc); bVar5 = false; bVar6 = iVar3 + 1 == 0; uVar2 = uVar4; if (!bVar6 && !bVar7) { uVar1 = param_1 << uVar4; param_1 = param_1 >> (0xcU - (iVar3 + 1) & 0xff); goto LAB_00055d10; } } if (bVar6 || bVar5 != bVar7) { in_r12 = 0x20 - uVar2; } param_1 = param_1 << (uVar2 & 0xff); if (bVar6 || bVar5 != bVar7) { param_1 = param_1 | 0U >> (in_r12 & 0xff); uVar1 = 0 << (uVar2 & 0xff); } LAB_00055d10: if (uVar4 < 0x433) { return CONCAT44(param_1 + (0x432 - uVar4) * 0x100000,uVar1); } uVar2 = ~(0x432 - uVar4); if (0x1e < (int)uVar2) { return (ulonglong)(param_1 >> (uVar2 - 0x1f & 0xff)); } iVar3 = uVar2 - 0x13; if (iVar3 == 0 || iVar3 < 0 != SCARRY4(uVar2 - 0x1f,0xc)) { uVar2 = uVar2 + 1; return CONCAT44(param_1 >> (uVar2 & 0xff), uVar1 >> (uVar2 & 0xff) | param_1 << (0x20 - uVar2 & 0xff)); } return (ulonglong)(uVar1 >> (0x20 - (0xcU - iVar3) & 0xff) | param_1 << (0xcU - iVar3 & 0xff)); } ### FUNC __floatsidf @ 00055e48 ulonglong __floatsidf(uint param_1) { uint uVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; uint uVar6; uint in_r12; bool bVar7; bool bVar8; bool bVar9; if (param_1 == 0) { return 0; } uVar6 = param_1 & 0x80000000; uVar2 = param_1; if ((int)uVar6 < 0) { uVar2 = -param_1; } uVar1 = 0; iVar4 = LZCOUNT(uVar2); uVar5 = iVar4 + 0x15; bVar9 = SBORROW4(uVar5,0x20); uVar3 = iVar4 - 0xb; bVar7 = (int)uVar3 < 0; bVar8 = uVar3 == 0; if (uVar5 < 0x20) { bVar9 = SCARRY4(uVar3,0xc); bVar7 = false; bVar8 = iVar4 + 1 == 0; uVar3 = uVar5; if (!bVar8 && !bVar9) { uVar1 = uVar2 << uVar5; uVar2 = uVar2 >> (0xcU - (iVar4 + 1) & 0xff); goto LAB_00055d10; } } if (bVar8 || bVar7 != bVar9) { in_r12 = 0x20 - uVar3; } uVar2 = uVar2 << (uVar3 & 0xff); if (bVar8 || bVar7 != bVar9) { uVar2 = uVar2 | 0U >> (in_r12 & 0xff); uVar1 = 0 << (uVar3 & 0xff); } LAB_00055d10: if (uVar5 < 0x433) { return CONCAT44(uVar2 + (0x432 - uVar5) * 0x100000 | uVar6,uVar1); } uVar3 = ~(0x432 - uVar5); if (0x1e < (int)uVar3) { return CONCAT44(param_1,uVar2 >> (uVar3 - 0x1f & 0xff)) & 0x80000000ffffffff; } iVar4 = uVar3 - 0x13; if (iVar4 == 0 || iVar4 < 0 != SCARRY4(uVar3 - 0x1f,0xc)) { uVar3 = uVar3 + 1; return CONCAT44(uVar6 | uVar2 >> (uVar3 & 0xff), uVar1 >> (uVar3 & 0xff) | uVar2 << (0x20 - uVar3 & 0xff)); } return CONCAT44(param_1,uVar1 >> (0x20 - (0xcU - iVar4) & 0xff) | uVar2 << (0xcU - iVar4 & 0xff)) & 0x80000000ffffffff; } ### FUNC __aeabi_f2d @ 00055e70 ulonglong __aeabi_f2d(uint param_1,undefined4 param_2,undefined4 param_3,uint param_4) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; int iVar6; uint uVar7; uint in_r12; bool bVar8; bool bVar9; bool bVar10; uVar3 = param_1 << 1; bVar9 = uVar3 == 0; uVar1 = param_1 & 0x80000000; uVar5 = (uint)((int)uVar3 >> 3) >> 1; uVar2 = uVar1 | uVar5; param_1 = param_1 << 0x1d; if (!bVar9) { param_4 = uVar3 & 0xff000000; bVar9 = param_4 == 0; } if (!bVar9) { bVar9 = param_4 == 0xff000000; } if (!bVar9) { return CONCAT44(uVar2,param_1) ^ 0x3800000000000000; } if (uVar3 == 0 || param_4 == 0xff000000) { return CONCAT44(uVar2,param_1); } uVar3 = param_1; uVar4 = uVar5; if (uVar5 == 0) { uVar3 = 0; uVar4 = param_1; } iVar6 = LZCOUNT(uVar4); if (uVar5 == 0) { iVar6 = iVar6 + 0x20; } uVar7 = iVar6 - 0xb; bVar10 = SBORROW4(uVar7,0x20); uVar5 = iVar6 - 0x2b; bVar9 = (int)uVar5 < 0; bVar8 = uVar5 == 0; if ((int)uVar7 < 0x20) { bVar10 = SCARRY4(uVar5,0xc); iVar6 = iVar6 + -0x1f; bVar9 = iVar6 < 0; bVar8 = iVar6 == 0; uVar5 = uVar7; if (!bVar8 && bVar9 == bVar10) { uVar3 = uVar4 << (uVar7 & 0xff); uVar4 = uVar4 >> (0xcU - iVar6 & 0xff); goto LAB_00055d10; } } if (bVar8 || bVar9 != bVar10) { in_r12 = 0x20 - uVar5; } uVar4 = uVar4 << (uVar5 & 0xff); if (bVar8 || bVar9 != bVar10) { uVar4 = uVar4 | uVar3 >> (in_r12 & 0xff); uVar3 = uVar3 << (uVar5 & 0xff); } LAB_00055d10: if ((int)uVar7 < 0x381) { return CONCAT44(uVar4 + (0x380 - uVar7) * 0x100000 | uVar1,uVar3); } uVar5 = ~(0x380 - uVar7); if ((int)uVar5 < 0x1f) { iVar6 = uVar5 - 0x13; if (iVar6 != 0 && iVar6 < 0 == SCARRY4(uVar5 - 0x1f,0xc)) { return CONCAT44(uVar2,uVar3 >> (0x20 - (0xcU - iVar6) & 0xff) | uVar4 << (0xcU - iVar6 & 0xff) ) & 0x80000000ffffffff; } uVar5 = uVar5 + 1; return CONCAT44(uVar1 | uVar4 >> (uVar5 & 0xff), uVar3 >> (uVar5 & 0xff) | uVar4 << (0x20 - uVar5 & 0xff)); } return CONCAT44(uVar2,uVar4 >> (uVar5 - 0x1f & 0xff)) & 0x80000000ffffffff; } ### FUNC __aeabi_ul2d @ 00055eb0 ulonglong __aeabi_ul2d(uint param_1,uint param_2) { byte bVar1; byte bVar2; uint uVar3; uint uVar4; uint uVar5; int iVar6; uint uVar7; uint uVar8; int iVar9; bool bVar10; bool bVar11; bool bVar12; if (param_1 == 0 && param_2 == 0) { return CONCAT44(param_2,param_1); } iVar9 = 0x432; uVar8 = param_2 >> 0x16; if (uVar8 != 0) { iVar9 = 3; if (param_2 >> 0x19 != 0) { iVar9 = 6; } if (param_2 >> 0x1c != 0) { iVar9 = iVar9 + 3; } iVar9 = iVar9 - ((int)param_2 >> 0x1f); uVar8 = param_1 << (0x20U - iVar9 & 0xff); param_1 = param_1 >> iVar9 | param_2 << (0x20U - iVar9 & 0xff); param_2 = param_2 >> iVar9; iVar9 = iVar9 + 0x432; } if (0xfffff < param_2) { if (0x1fffff < param_2) { bVar1 = (byte)param_2; param_2 = param_2 >> 1; bVar2 = (byte)param_1; param_1 = (uint)(bVar1 & 1) << 0x1f | param_1 >> 1; uVar8 = (uint)(bVar2 & 1) << 0x1f | uVar8 >> 1; iVar9 = iVar9 + 1; if (0xffbfffff < (uint)(iVar9 * 0x200000)) { return 0x7ff0000000000000; } } LAB_00055c90: bVar11 = 0x7fffffff < uVar8; if (uVar8 == 0x80000000) { bVar11 = (bool)((byte)param_1 & 1); } return CONCAT44(param_2 + iVar9 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar11),param_1 + bVar11 ); } bVar1 = (byte)(uVar8 >> 0x1f); uVar8 = uVar8 << 1; uVar3 = param_1 * 2; bVar11 = CARRY4(param_1,param_1); param_1 = param_1 * 2 + (uint)bVar1; param_2 = param_2 * 2 + (uint)(bVar11 || CARRY4(uVar3,(uint)bVar1)); iVar9 = iVar9 + -1; if ((param_2 & 0x100000) != 0) goto LAB_00055c90; uVar3 = param_1; uVar4 = param_2; if (param_2 == 0) { uVar3 = 0; uVar4 = param_1; } iVar6 = LZCOUNT(uVar4); if (param_2 == 0) { iVar6 = iVar6 + 0x20; } uVar7 = iVar6 - 0xb; bVar12 = SBORROW4(uVar7,0x20); uVar5 = iVar6 - 0x2b; bVar11 = (int)uVar5 < 0; bVar10 = uVar5 == 0; if ((int)uVar7 < 0x20) { bVar12 = SCARRY4(uVar5,0xc); iVar6 = iVar6 + -0x1f; bVar11 = iVar6 < 0; bVar10 = iVar6 == 0; uVar5 = uVar7; if (!bVar10 && bVar11 == bVar12) { uVar3 = uVar4 << (uVar7 & 0xff); uVar4 = uVar4 >> (0xcU - iVar6 & 0xff); goto LAB_00055d10; } } if (bVar10 || bVar11 != bVar12) { uVar8 = 0x20 - uVar5; } uVar4 = uVar4 << (uVar5 & 0xff); if (bVar10 || bVar11 != bVar12) { uVar4 = uVar4 | uVar3 >> (uVar8 & 0xff); uVar3 = uVar3 << (uVar5 & 0xff); } LAB_00055d10: if ((int)uVar7 <= iVar9) { return CONCAT44(uVar4 + (iVar9 - uVar7) * 0x100000,uVar3); } uVar8 = ~(iVar9 - uVar7); if (0x1e < (int)uVar8) { return (ulonglong)(uVar4 >> (uVar8 - 0x1f & 0xff)); } iVar9 = uVar8 - 0x13; if (iVar9 == 0 || iVar9 < 0 != SCARRY4(uVar8 - 0x1f,0xc)) { uVar8 = uVar8 + 1; return CONCAT44(uVar4 >> (uVar8 & 0xff),uVar3 >> (uVar8 & 0xff) | uVar4 << (0x20 - uVar8 & 0xff) ); } return (ulonglong)(uVar3 >> (0x20 - (0xcU - iVar9) & 0xff) | uVar4 << (0xcU - iVar9 & 0xff)); } ### FUNC __floatdidf @ 00055ec4 ulonglong __floatdidf(uint param_1,uint param_2) { byte bVar1; byte bVar2; uint uVar3; uint uVar4; uint uVar5; int iVar6; uint uVar7; int iVar8; uint uVar9; uint uVar10; bool bVar11; bool bVar12; bool bVar13; if (param_1 == 0 && param_2 == 0) { return CONCAT44(param_2,param_1); } uVar9 = param_2 & 0x80000000; uVar4 = param_2; if ((int)uVar9 < 0) { bVar12 = param_1 != 0; param_1 = -param_1; uVar4 = -(param_2 + bVar12); } iVar8 = 0x432; uVar10 = uVar4 >> 0x16; if (uVar10 != 0) { iVar8 = 3; if (uVar4 >> 0x19 != 0) { iVar8 = 6; } if (uVar4 >> 0x1c != 0) { iVar8 = iVar8 + 3; } iVar8 = iVar8 - ((int)uVar4 >> 0x1f); uVar10 = param_1 << (0x20U - iVar8 & 0xff); param_1 = param_1 >> iVar8 | uVar4 << (0x20U - iVar8 & 0xff); uVar4 = uVar4 >> iVar8; iVar8 = iVar8 + 0x432; } if (0xfffff < uVar4) { if (0x1fffff < uVar4) { bVar1 = (byte)uVar4; uVar4 = uVar4 >> 1; bVar2 = (byte)param_1; param_1 = (uint)(bVar1 & 1) << 0x1f | param_1 >> 1; uVar10 = (uint)(bVar2 & 1) << 0x1f | uVar10 >> 1; iVar8 = iVar8 + 1; if (0xffbfffff < (uint)(iVar8 * 0x200000)) { return (ulonglong)(uVar9 | 0x7ff00000) << 0x20; } } LAB_00055c90: bVar12 = 0x7fffffff < uVar10; if (uVar10 == 0x80000000) { bVar12 = (bool)((byte)param_1 & 1); } return CONCAT44(uVar4 + iVar8 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar12) | uVar9, param_1 + bVar12); } bVar1 = (byte)(uVar10 >> 0x1f); uVar10 = uVar10 << 1; uVar3 = param_1 * 2; bVar12 = CARRY4(param_1,param_1); param_1 = param_1 * 2 + (uint)bVar1; uVar4 = uVar4 * 2 + (uint)(bVar12 || CARRY4(uVar3,(uint)bVar1)); iVar8 = iVar8 + -1; if ((uVar4 & 0x100000) != 0) goto LAB_00055c90; uVar3 = param_1; uVar5 = uVar4; if (uVar4 == 0) { uVar3 = 0; uVar5 = param_1; } iVar6 = LZCOUNT(uVar5); if (uVar4 == 0) { iVar6 = iVar6 + 0x20; } uVar7 = iVar6 - 0xb; bVar13 = SBORROW4(uVar7,0x20); uVar4 = iVar6 - 0x2b; bVar12 = (int)uVar4 < 0; bVar11 = uVar4 == 0; if ((int)uVar7 < 0x20) { bVar13 = SCARRY4(uVar4,0xc); iVar6 = iVar6 + -0x1f; bVar12 = iVar6 < 0; bVar11 = iVar6 == 0; uVar4 = uVar7; if (!bVar11 && bVar12 == bVar13) { uVar3 = uVar5 << (uVar7 & 0xff); uVar5 = uVar5 >> (0xcU - iVar6 & 0xff); goto LAB_00055d10; } } if (bVar11 || bVar12 != bVar13) { uVar10 = 0x20 - uVar4; } uVar5 = uVar5 << (uVar4 & 0xff); if (bVar11 || bVar12 != bVar13) { uVar5 = uVar5 | uVar3 >> (uVar10 & 0xff); uVar3 = uVar3 << (uVar4 & 0xff); } LAB_00055d10: if ((int)uVar7 <= iVar8) { return CONCAT44(uVar5 + (iVar8 - uVar7) * 0x100000 | uVar9,uVar3); } uVar4 = ~(iVar8 - uVar7); if (0x1e < (int)uVar4) { return CONCAT44(param_2,uVar5 >> (uVar4 - 0x1f & 0xff)) & 0x80000000ffffffff; } iVar8 = uVar4 - 0x13; if (iVar8 == 0 || iVar8 < 0 != SCARRY4(uVar4 - 0x1f,0xc)) { uVar4 = uVar4 + 1; return CONCAT44(uVar9 | uVar5 >> (uVar4 & 0xff), uVar3 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff)); } return CONCAT44(param_2,uVar3 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar5 << (0xcU - iVar8 & 0xff)) & 0x80000000ffffffff; } ### FUNC __muldf3 @ 00055f24 ulonglong __muldf3(undefined4 param_1,uint param_2,uint param_3,uint param_4) { longlong lVar1; ulonglong uVar2; byte bVar3; uint uVar4; uint uVar5; uint uVar6; int iVar7; uint uVar8; uint unaff_r5; uint uVar9; uint uVar10; bool bVar11; bool bVar12; bool bVar13; ulonglong uVar14; uVar14 = CONCAT44(param_2,param_1); uVar10 = 0x7ff; uVar6 = param_2 >> 0x14 & 0x7ff; bVar11 = uVar6 == 0; if (!bVar11) { unaff_r5 = param_4 >> 0x14 & 0x7ff; bVar11 = unaff_r5 == 0; } if (!bVar11) { bVar11 = uVar6 == 0x7ff; } if (!bVar11) { bVar11 = unaff_r5 == 0x7ff; } if (bVar11) { uVar14 = FUN_00056104(); } uVar4 = (uint)(uVar14 >> 0x20); iVar7 = uVar6 + unaff_r5; uVar9 = uVar4 ^ param_4; uVar4 = uVar4 & ~(uVar10 << 0x15); param_4 = param_4 & ~(uVar10 << 0x15); uVar6 = uVar4 | 0x100000; uVar5 = param_4 | 0x100000; if ((uint)uVar14 == 0 && (uVar4 & 0xfffff) == 0 || param_3 == 0 && (param_4 & 0xfffff) == 0) { param_3 = (uint)uVar14 | param_3; uVar5 = (uVar9 & 0x80000000 | uVar6) ^ uVar5; uVar6 = uVar10 >> 1; bVar13 = SBORROW4(iVar7,uVar6); uVar8 = iVar7 - uVar6; bVar11 = uVar8 == 0; uVar4 = uVar8; if (!bVar11 && (int)uVar6 <= iVar7) { bVar13 = SBORROW4(uVar10,uVar8); uVar4 = uVar10 - uVar8; bVar11 = uVar10 == uVar8; } if (!bVar11 && (int)uVar4 < 0 == bVar13) { return CONCAT44(uVar5 | uVar8 * 0x100000,param_3); } uVar5 = uVar5 | 0x100000; uVar6 = 0; bVar13 = SBORROW4(uVar8,1); uVar8 = uVar8 - 1; bVar11 = uVar8 == 0; uVar10 = uVar8; } else { uVar2 = (ulonglong)param_3 * (uVar14 & 0xffffffff); uVar14 = (ulonglong)uVar5 * (uVar14 & 0xffffffff) + (ulonglong)param_3 * (ulonglong)uVar6 + (uVar2 >> 0x20); uVar4 = (uint)uVar14; lVar1 = (ulonglong)uVar5 * (ulonglong)uVar6 + (uVar14 >> 0x20); uVar6 = (uint)lVar1; uVar10 = (uint)((ulonglong)lVar1 >> 0x20); if ((int)uVar2 != 0) { uVar4 = uVar4 | 1; } uVar8 = (iVar7 + -0xff) - ((uVar10 < 0x200) + 0x300); if (uVar10 < 0x200) { bVar3 = (byte)(uVar4 >> 0x1f); uVar4 = uVar4 << 1; lVar1 = CONCAT44(uVar10 * 2 + (uint)(CARRY4(uVar6,uVar6) || CARRY4(uVar6 * 2,(uint)bVar3)), uVar6 * 2 + (uint)bVar3); } uVar5 = uVar9 & 0x80000000 | (int)((ulonglong)lVar1 >> 0x20) << 0xb | (uint)lVar1 >> 0x15; param_3 = (uint)lVar1 << 0xb | uVar4 >> 0x15; uVar6 = uVar4 * 0x800; bVar12 = 0xfc < uVar8; bVar13 = SBORROW4(uVar8,0xfd); uVar9 = uVar8 - 0xfd; bVar11 = uVar9 == 0; uVar10 = uVar9; if (bVar12 && !bVar11) { bVar12 = 0x6ff < uVar9; bVar13 = SBORROW4(uVar9,0x700); uVar10 = uVar8 - 0x7fd; bVar11 = uVar9 == 0x700; } if (!bVar12 || bVar11) { bVar11 = 0x7fffffff < uVar6; if (uVar6 == 0x80000000) { bVar11 = (bool)((byte)(uVar4 >> 0x15) & 1); } return CONCAT44(uVar5 + uVar8 * 0x100000 + (uint)CARRY4(param_3,(uint)bVar11),param_3 + bVar11 ); } } if (!bVar11 && (int)uVar10 < 0 == bVar13) { return (ulonglong)(uVar5 & 0x80000000 | 0x7ff00000) << 0x20; } if (uVar8 != 0xffffffca && (int)(uVar8 + 0x36) < 0 == SCARRY4(uVar8,0x36)) { uVar10 = -uVar8; uVar4 = uVar10 - 0x20; if (0x1f < (int)uVar10) { uVar9 = param_3 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff); uVar10 = (uVar5 >> (uVar4 & 0xff) & ~((uVar5 & 0x80000000) >> (uVar4 & 0xff))) - ((int)uVar9 >> 0x1f); if ((uVar6 == 0 && param_3 << (0x20 - uVar4 & 0xff) == 0) && (uVar9 & 0x7fffffff) == 0) { uVar10 = uVar10 & ~(uVar9 >> 0x1f); } return CONCAT44(uVar5,uVar10) & 0x80000000ffffffff; } iVar7 = uVar10 - 0x14; if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar4,0xc)) { uVar4 = 0xc - iVar7; uVar10 = param_3 << (uVar4 & 0xff); uVar4 = param_3 >> (0x20 - uVar4 & 0xff) | uVar5 << (uVar4 & 0xff); uVar9 = uVar4 + -((int)uVar10 >> 0x1f); if (uVar6 == 0 && (uVar10 & 0x7fffffff) == 0) { uVar9 = uVar9 & ~(uVar10 >> 0x1f); } return CONCAT44((uVar5 & 0x80000000) + (uint)CARRY4(uVar4,-((int)uVar10 >> 0x1f)),uVar9); } uVar4 = param_3 << (uVar8 + 0x20 & 0xff); uVar9 = param_3 >> (uVar10 & 0xff) | uVar5 << (uVar8 + 0x20 & 0xff); uVar8 = uVar9 + -((int)uVar4 >> 0x1f); if (uVar6 == 0 && (uVar4 & 0x7fffffff) == 0) { uVar8 = uVar8 & ~(uVar4 >> 0x1f); } return CONCAT44((uVar5 & 0x80000000) + ((uVar5 & 0x7fffffff) >> (uVar10 & 0xff)) + (uint)CARRY4(uVar9,-((int)uVar4 >> 0x1f)),uVar8); } return (ulonglong)(uVar5 & 0x80000000) << 0x20; } ### FUNC FUN_00056104 @ 00056104 ulonglong FUN_00056104(int param_1,uint param_2,int param_3,uint param_4) { bool bVar1; int iVar2; uint uVar3; uint unaff_r4; uint uVar4; uint uVar5; uint in_r12; uVar4 = in_r12 & param_4 >> 0x14; if (unaff_r4 != in_r12 && uVar4 != in_r12) { if (param_1 == 0 && (param_2 & 0x7fffffff) == 0 || param_3 == 0 && (param_4 & 0x7fffffff) == 0) { return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20; } if (unaff_r4 == 0) { uVar5 = param_2 & 0x80000000; do { iVar2 = param_1 >> 0x1f; param_1 = param_1 << 1; param_2 = param_2 * 2 - iVar2; } while ((param_2 & 0x100000) == 0); param_2 = param_2 | uVar5; if (uVar4 != 0) { return CONCAT44(param_2,param_1); } } do { iVar2 = param_3 >> 0x1f; param_3 = param_3 << 1; param_4 = param_4 * 2 - iVar2; } while ((param_4 & 0x100000) == 0); return CONCAT44(param_2,param_1); } bVar1 = (param_2 & 0x7fffffff) != 0; iVar2 = param_3; uVar5 = param_4; if (param_1 != 0 || bVar1) { iVar2 = param_1; uVar5 = param_2; } uVar3 = uVar5; if ((((param_1 != 0 || bVar1) && (param_3 != 0 || (param_4 & 0x7fffffff) != 0)) && ((unaff_r4 != in_r12 || (iVar2 == 0 && (uVar5 & 0xfffff) == 0)))) && ((uVar4 != in_r12 || (iVar2 = param_3, uVar3 = param_4, param_3 == 0 && (param_4 & 0xfffff) == 0)))) { return (ulonglong)((uVar5 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20; } return CONCAT44(uVar3,iVar2) | 0x7ff8000000000000; } ### FUNC __divdf3 @ 00056190 ulonglong __divdf3(undefined4 param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; uint uVar6; int iVar7; uint uVar8; uint unaff_r5; uint uVar9; uint uVar10; uint uVar11; uint uVar12; bool bVar13; bool bVar14; bool bVar15; undefined8 uVar16; uVar16 = CONCAT44(param_2,param_1); uVar11 = 0x7ff; uVar6 = param_2 >> 0x14 & 0x7ff; bVar13 = uVar6 == 0; if (!bVar13) { unaff_r5 = param_4 >> 0x14 & 0x7ff; bVar13 = unaff_r5 == 0; } if (!bVar13) { bVar13 = uVar6 == 0x7ff; } if (!bVar13) { bVar13 = unaff_r5 == 0x7ff; } if (bVar13) { uVar16 = FUN_00056324(); } uVar8 = (uint)((ulonglong)uVar16 >> 0x20); uVar2 = (uint)uVar16; iVar7 = uVar6 - unaff_r5; if (param_3 == 0 && (param_4 & 0xfffff) == 0) { uVar6 = (uVar8 ^ param_4) & 0x80000000 | uVar8 & 0xfffff; bVar14 = SCARRY4(iVar7,uVar11 >> 1); uVar8 = iVar7 + (uVar11 >> 1); bVar13 = (int)uVar8 < 0; bVar15 = uVar8 == 0; if (!bVar15 && bVar13 == bVar14) { bVar14 = SBORROW4(uVar11,uVar8); bVar13 = (int)(uVar11 - uVar8) < 0; bVar15 = uVar11 == uVar8; } if (!bVar15 && bVar13 == bVar14) { return CONCAT44(uVar6 | uVar8 * 0x100000,uVar2); } uVar6 = uVar6 | 0x100000; uVar4 = 0; bVar15 = SBORROW4(uVar8,1); uVar8 = uVar8 - 1; bVar13 = uVar8 == 0; uVar11 = uVar8; } else { uVar4 = (param_4 << 0xc) >> 4 | 0x10000000 | param_3 >> 0x18; uVar11 = param_3 << 8; uVar9 = (uVar8 << 0xc) >> 4 | 0x10000000 | uVar2 >> 0x18; uVar2 = uVar2 * 0x100; uVar6 = (uVar8 ^ param_4) & 0x80000000; bVar13 = uVar4 <= uVar9; if (uVar9 == uVar4) { bVar13 = uVar11 <= uVar2; } iVar7 = iVar7 + (uint)bVar13; uVar8 = iVar7 + 0x3fd; if (!bVar13) { uVar4 = uVar4 >> 1; uVar11 = (uint)((byte)(param_3 >> 0x18) & 1) << 0x1f | uVar11 >> 1; } uVar10 = uVar2 - uVar11; uVar9 = uVar9 - (uVar4 + (uVar2 < uVar11)); uVar5 = uVar4 >> 1; uVar3 = (uint)((byte)uVar4 & 1) << 0x1f | uVar11 >> 1; uVar2 = 0x100000; uVar11 = 0x80000; while( true ) { bVar13 = uVar3 <= uVar10; if (uVar5 < uVar9 || uVar9 - uVar5 < (uint)bVar13) { uVar10 = uVar10 - uVar3; uVar2 = uVar2 | uVar11; uVar9 = uVar9 - (uVar5 + !bVar13); } uVar4 = uVar5 >> 1; uVar3 = (uint)((byte)uVar5 & 1) << 0x1f | uVar3 >> 1; bVar13 = uVar3 <= uVar10; if (uVar4 < uVar9 || uVar9 - uVar4 < (uint)bVar13) { uVar10 = uVar10 - uVar3; uVar2 = uVar2 | uVar11 >> 1; uVar9 = uVar9 - (uVar4 + !bVar13); } uVar12 = uVar5 >> 2; uVar1 = (uint)((byte)uVar4 & 1) << 0x1f | uVar3 >> 1; bVar13 = uVar1 <= uVar10; if (uVar12 < uVar9 || uVar9 - uVar12 < (uint)bVar13) { uVar10 = uVar10 - uVar1; uVar2 = uVar2 | uVar11 >> 2; uVar9 = uVar9 - (uVar12 + !bVar13); } uVar5 = uVar5 >> 3; uVar3 = (uint)((byte)uVar12 & 1) << 0x1f | uVar1 >> 1; bVar13 = uVar3 <= uVar10; if (uVar5 < uVar9 || uVar9 - uVar5 < (uint)bVar13) { uVar10 = uVar10 - uVar3; uVar2 = uVar2 | uVar11 >> 3; uVar9 = uVar9 - (uVar5 + !bVar13); } uVar4 = uVar9 | uVar10; if (uVar4 == 0) break; uVar9 = uVar9 << 4 | uVar10 >> 0x1c; uVar10 = uVar10 << 4; uVar5 = uVar5 << 3 | uVar3 >> 0x1d; uVar3 = (uVar1 >> 1) << 3; uVar11 = uVar11 >> 4; if (uVar11 == 0) { if ((uVar6 & 0x100000) != 0) goto LAB_000562d0; uVar6 = uVar6 | uVar2; uVar2 = 0; uVar11 = 0x80000000; } } if ((uVar6 & 0x100000) == 0) { uVar6 = uVar6 | uVar2; uVar2 = 0; } LAB_000562d0: bVar14 = 0xfc < uVar8; bVar15 = SBORROW4(uVar8,0xfd); uVar12 = iVar7 + 0x300; bVar13 = uVar12 == 0; uVar11 = uVar12; if (bVar14 && !bVar13) { bVar14 = 0x6ff < uVar12; bVar15 = SBORROW4(uVar12,0x700); uVar11 = iVar7 - 0x400; bVar13 = uVar12 == 0x700; } if (!bVar14 || bVar13) { bVar13 = uVar5 <= uVar9; if (uVar9 == uVar5) { bVar13 = uVar3 <= uVar10; } if (uVar9 == uVar5 && uVar10 == uVar3) { bVar13 = (bool)((byte)uVar2 & 1); } return CONCAT44(uVar6 + uVar8 * 0x100000 + (uint)CARRY4(uVar2,(uint)bVar13),uVar2 + bVar13); } } if (!bVar13 && (int)uVar11 < 0 == bVar15) { return (ulonglong)(uVar6 & 0x80000000 | 0x7ff00000) << 0x20; } if (uVar8 == 0xffffffca || (int)(uVar8 + 0x36) < 0 != SCARRY4(uVar8,0x36)) { return (ulonglong)(uVar6 & 0x80000000) << 0x20; } uVar11 = -uVar8; uVar9 = uVar11 - 0x20; if (0x1f < (int)uVar11) { uVar8 = uVar2 >> (uVar9 & 0xff) | uVar6 << (0x20 - uVar9 & 0xff); uVar11 = (uVar6 >> (uVar9 & 0xff) & ~((uVar6 & 0x80000000) >> (uVar9 & 0xff))) - ((int)uVar8 >> 0x1f); if ((uVar4 == 0 && uVar2 << (0x20 - uVar9 & 0xff) == 0) && (uVar8 & 0x7fffffff) == 0) { uVar11 = uVar11 & ~(uVar8 >> 0x1f); } return CONCAT44(uVar6,uVar11) & 0x80000000ffffffff; } iVar7 = uVar11 - 0x14; if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar9,0xc)) { uVar8 = 0xc - iVar7; uVar11 = uVar2 << (uVar8 & 0xff); uVar2 = uVar2 >> (0x20 - uVar8 & 0xff) | uVar6 << (uVar8 & 0xff); uVar8 = uVar2 + -((int)uVar11 >> 0x1f); if (uVar4 == 0 && (uVar11 & 0x7fffffff) == 0) { uVar8 = uVar8 & ~(uVar11 >> 0x1f); } return CONCAT44((uVar6 & 0x80000000) + (uint)CARRY4(uVar2,-((int)uVar11 >> 0x1f)),uVar8); } uVar9 = uVar2 << (uVar8 + 0x20 & 0xff); uVar2 = uVar2 >> (uVar11 & 0xff) | uVar6 << (uVar8 + 0x20 & 0xff); uVar8 = uVar2 + -((int)uVar9 >> 0x1f); if (uVar4 == 0 && (uVar9 & 0x7fffffff) == 0) { uVar8 = uVar8 & ~(uVar9 >> 0x1f); } return CONCAT44((uVar6 & 0x80000000) + ((uVar6 & 0x7fffffff) >> (uVar11 & 0xff)) + (uint)CARRY4(uVar2,-((int)uVar9 >> 0x1f)),uVar8); } ### FUNC FUN_00056324 @ 00056324 ulonglong FUN_00056324(int param_1,uint param_2,int param_3,uint param_4) { int iVar1; uint unaff_r4; uint uVar2; uint uVar3; uint in_r12; uVar2 = in_r12 & param_4 >> 0x14; uVar3 = param_2; if (unaff_r4 != in_r12 || uVar2 != in_r12) { if (unaff_r4 == in_r12) { if ((param_1 == 0 && (param_2 & 0xfffff) == 0) && (param_1 = param_3, uVar3 = param_4, uVar2 != in_r12)) { LAB_0005616c: return (ulonglong)((param_2 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20; } } else if (uVar2 == in_r12) { param_1 = param_3; uVar3 = param_4; if (param_3 == 0 && (param_4 & 0xfffff) == 0) { LAB_00056120: return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20; } } else { if ((param_1 != 0 || (param_2 & 0x7fffffff) != 0) && (param_3 != 0 || (param_4 & 0x7fffffff) != 0)) { if (unaff_r4 == 0) { uVar3 = param_2 & 0x80000000; do { iVar1 = param_1 >> 0x1f; param_1 = param_1 << 1; param_2 = param_2 * 2 - iVar1; } while ((param_2 & 0x100000) == 0); param_2 = param_2 | uVar3; if (uVar2 != 0) { return CONCAT44(param_2,param_1); } } do { iVar1 = param_3 >> 0x1f; param_3 = param_3 << 1; param_4 = param_4 * 2 - iVar1; } while ((param_4 & 0x100000) == 0); return CONCAT44(param_2,param_1); } if (param_1 != 0 || (param_2 & 0x7fffffff) != 0) goto LAB_0005616c; if (param_3 != 0 || (param_4 & 0x7fffffff) != 0) goto LAB_00056120; } } return CONCAT44(uVar3,param_1) | 0x7ff8000000000000; } ### FUNC __gedf2 @ 00056394 uint __gedf2(uint param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; bool bVar2; bool bVar3; if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && ((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || (((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { return 0xffffffff; } bVar3 = (param_2 & 0x7fffffff) == 0; bVar2 = param_1 == 0 && bVar3; if (param_1 == 0 && bVar3) { bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; } if (!bVar2) { bVar2 = param_2 == param_4; } if (bVar2) { bVar2 = param_1 == param_3; } if (!bVar2) { uVar1 = param_2 ^ param_4; bVar3 = uVar1 == 0; if (-1 < (int)uVar1) { bVar3 = param_2 == param_4; } bVar2 = -1 < (int)uVar1 && param_4 <= param_2; if (bVar3) { bVar2 = param_3 <= param_1; } param_4 = (int)param_4 >> 0x1f; if (!bVar2) { param_4 = ~param_4; } return param_4 | 1; } return 0; } ### FUNC __ledf2 @ 0005639c uint __ledf2(uint param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; bool bVar2; bool bVar3; if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && ((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || (((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { return 1; } bVar3 = (param_2 & 0x7fffffff) == 0; bVar2 = param_1 == 0 && bVar3; if (param_1 == 0 && bVar3) { bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; } if (!bVar2) { bVar2 = param_2 == param_4; } if (bVar2) { bVar2 = param_1 == param_3; } if (!bVar2) { uVar1 = param_2 ^ param_4; bVar3 = uVar1 == 0; if (-1 < (int)uVar1) { bVar3 = param_2 == param_4; } bVar2 = -1 < (int)uVar1 && param_4 <= param_2; if (bVar3) { bVar2 = param_3 <= param_1; } param_4 = (int)param_4 >> 0x1f; if (!bVar2) { param_4 = ~param_4; } return param_4 | 1; } return 0; } ### FUNC __eqdf2 @ 000563a4 uint __eqdf2(uint param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; bool bVar2; bool bVar3; if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && ((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || (((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { return 1; } bVar3 = (param_2 & 0x7fffffff) == 0; bVar2 = param_1 == 0 && bVar3; if (param_1 == 0 && bVar3) { bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; } if (!bVar2) { bVar2 = param_2 == param_4; } if (bVar2) { bVar2 = param_1 == param_3; } if (!bVar2) { uVar1 = param_2 ^ param_4; bVar3 = uVar1 == 0; if (-1 < (int)uVar1) { bVar3 = param_2 == param_4; } bVar2 = -1 < (int)uVar1 && param_4 <= param_2; if (bVar3) { bVar2 = param_3 <= param_1; } param_4 = (int)param_4 >> 0x1f; if (!bVar2) { param_4 = ~param_4; } return param_4 | 1; } return 0; } ### FUNC __aeabi_cdrcmple @ 0005642c void __aeabi_cdrcmple(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { __aeabi_cdcmple(param_3,param_4,param_1,param_2); return; } ### FUNC __aeabi_cdcmple @ 00056448 undefined4 __aeabi_cdcmple(undefined4 param_1) { __eqdf2(); return param_1; } ### FUNC __aeabi_dcmpeq @ 0005645c undefined1 __aeabi_dcmpeq(void) { undefined1 in_ZR; __aeabi_cdcmple(); return in_ZR; } ### FUNC __aeabi_dcmplt @ 00056470 bool __aeabi_dcmplt(void) { undefined1 in_CY; __aeabi_cdcmple(); return !(bool)in_CY; } ### FUNC __aeabi_dcmple @ 00056484 bool __aeabi_dcmple(void) { undefined1 in_ZR; undefined1 in_CY; __aeabi_cdcmple(); return !(bool)in_CY || (bool)in_ZR; } ### FUNC __aeabi_dcmpge @ 00056498 bool __aeabi_dcmpge(void) { undefined1 in_ZR; undefined1 in_CY; __aeabi_cdrcmple(); return !(bool)in_CY || (bool)in_ZR; } ### FUNC __aeabi_dcmpgt @ 000564ac bool __aeabi_dcmpgt(void) { undefined1 in_CY; __aeabi_cdrcmple(); return !(bool)in_CY; } ### FUNC __fixdfsi @ 000564c0 uint __fixdfsi(uint param_1,uint param_2) { uint uVar1; int iVar2; uint uVar3; iVar2 = param_2 * 2 + 0x200000; if (param_2 * 2 < 0xffe00000) { if (-1 < iVar2) { return 0; } uVar1 = iVar2 >> 0x15; uVar3 = -uVar1 - 0x3e1; if (uVar1 < 0xfffffc20 && uVar3 != 0) { uVar1 = (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar3 & 0xff); if ((param_2 & 0x80000000) != 0) { uVar1 = -uVar1; } return uVar1; } } else if (param_1 != 0 || (param_2 & 0xfffff) != 0) { return 0; } param_2 = param_2 & 0x80000000; if (param_2 == 0) { param_2 = 0x7fffffff; } return param_2; } ### FUNC __fixunsdfsi @ 0005651c uint __fixunsdfsi(uint param_1,uint param_2) { int iVar1; uint uVar2; if (SUB41(param_2 >> 0x1f,0)) { return 0; } iVar1 = param_2 * 2 + 0x200000; if (param_2 * 2 < 0xffe00000) { if (-1 < iVar1) { return 0; } uVar2 = -(iVar1 >> 0x15) - 0x3e1; if (-1 < (int)uVar2) { return (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar2 & 0xff); } } else if (param_1 != 0 || (param_2 & 0xfffff) != 0) { return 0; } return 0xffffffff; } ### FUNC __truncdfsf2 @ 00056570 uint __truncdfsf2(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; uint in_r12; bool bVar4; bool bVar5; uVar2 = param_2 * 2; bVar5 = uVar2 < 0x70000000; uVar3 = uVar2 + 0x90000000; uVar1 = uVar3; if (!bVar5) { in_r12 = uVar2 + 0x8fe00000; uVar1 = in_r12; } bVar4 = uVar1 == 0; if (!bVar5 && uVar3 >= 0x200000) { bVar4 = in_r12 == 0x1fc00000; } if (((bVar5 || uVar3 < 0x200000) || 0x1fc00000 < in_r12) || bVar4) { if ((param_2 & 0x40000000) != 0) { if (((int)uVar2 >> 0x15 == -1) && (param_1 != 0 || (param_2 & 0xfffff) != 0)) { return 0x7fc00000; } return param_2 & 0x80000000 | 0x7f800000; } if ((int)(uVar2 + 0x92e00000) < 0 != SCARRY4(uVar3,0x2e00000)) { return param_2 & 0x80000000; } uVar3 = 0x18 - (uVar2 + 0x92e00000 >> 0x15); uVar2 = param_1 >> (uVar3 & 0xff); if (param_1 << (0x20 - uVar3 & 0xff) != 0) { uVar2 = uVar2 | 1; } uVar1 = param_2 & 0x1fffff | 0x100000; param_1 = uVar2 | uVar1 << (0x20 - uVar3 & 0xff); uVar3 = (uVar1 >> (uVar3 & 0xff)) << 1; } uVar2 = (param_2 & 0x80000000 | param_1 >> 0x1d) + uVar3 * 4 + (uint)(0x7fffffff < param_1 * 8); if (param_1 * 8 == 0x80000000) { uVar2 = uVar2 & 0xfffffffe; } return uVar2; } ### FUNC __aeabi_frsub @ 00056610 void __aeabi_frsub(uint param_1) { __addsf3(param_1 ^ 0x80000000); return; } ### FUNC __subsf3 @ 00056618 uint __subsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) { int iVar1; int iVar2; byte bVar3; uint uVar4; uint uVar5; uint uVar6; uint uVar7; uint uVar8; bool bVar9; uVar5 = param_2 ^ 0x80000000; uVar4 = param_1 << 1; bVar9 = uVar4 == 0; if (!bVar9) { param_4 = param_2 << 1; bVar9 = param_4 == 0; } if (!bVar9) { bVar9 = uVar4 == param_4; } iVar1 = (int)uVar4 >> 0x18; if (!bVar9) { bVar9 = iVar1 == -1; } if (!bVar9) { bVar9 = (int)param_4 >> 0x18 == -1; } if (bVar9) { iVar2 = (int)(param_2 << 1) >> 0x18; if (iVar1 == -1 || iVar2 == -1) { uVar4 = uVar5; if (iVar1 == -1) { uVar4 = param_1; } if (iVar1 != -1 || iVar2 != -1) { uVar5 = uVar4; } if (((uVar4 & 0x7fffff) != 0 || (uVar5 & 0x7fffff) != 0) || uVar4 != uVar5) { uVar4 = uVar4 | 0x400000; } return uVar4; } if (uVar4 != param_2 << 1) { if (uVar4 == 0) { param_1 = uVar5; } return param_1; } if (param_1 != uVar5) { return 0; } if ((uVar4 & 0xff000000) == 0) { uVar4 = param_1 << 1; if (SUB41(param_1 >> 0x1f,0)) { uVar4 = uVar4 | 0x80000000; } return uVar4; } if (uVar4 < 0xfe000000) { return param_1 + 0x800000; } param_1 = param_1 & 0x80000000; LAB_0005677c: return param_1 | 0x7f800000; } uVar4 = uVar4 >> 0x18; param_4 = param_4 >> 0x18; uVar8 = param_4 - uVar4; uVar6 = uVar5; uVar7 = uVar4; if (uVar8 != 0 && uVar4 <= param_4) { uVar7 = uVar4 + uVar8; uVar6 = param_1; param_1 = uVar5; } if (param_4 < uVar4) { uVar8 = -uVar8; } if (0x19 < uVar8) { return param_1; } uVar4 = param_1 & 0xffffff | 0x800000; if ((param_1 & 0x80000000) != 0) { uVar4 = -uVar4; } uVar5 = uVar6 & 0xffffff | 0x800000; if ((uVar6 & 0x80000000) != 0) { uVar5 = -uVar5; } if (uVar7 == uVar8) { uVar5 = uVar5 ^ 0x800000; if (uVar7 == 0) { uVar4 = uVar4 ^ 0x800000; uVar7 = 1; } else { uVar8 = uVar8 - 1; } } uVar4 = uVar4 + ((int)uVar5 >> (uVar8 & 0xff)); uVar5 = uVar5 << (0x20 - uVar8 & 0xff); param_1 = uVar4 & 0x80000000; if ((int)uVar4 < 0) { bVar9 = uVar5 != 0; uVar5 = -uVar5; uVar4 = -(uVar4 + bVar9); } if (uVar4 < 0x800000) { iVar1 = (int)uVar5 >> 0x1f; uVar5 = uVar5 << 1; uVar4 = uVar4 * 2 - iVar1; uVar8 = uVar7 - 2; if ((uVar4 & 0x800000) == 0) { uVar5 = LZCOUNT(uVar4) - 8; uVar4 = uVar4 << (uVar5 & 0xff); if ((int)uVar8 < (int)uVar5) { uVar4 = uVar4 >> (-(uVar8 - uVar5) & 0xff); } else { uVar4 = uVar4 + (uVar8 - uVar5) * 0x800000; } return uVar4 | param_1; } } else { uVar8 = uVar7 - 1; if (0xffffff < uVar4) { bVar3 = (byte)uVar4; uVar4 = uVar4 >> 1; uVar5 = (uint)(bVar3 & 1) << 0x1f | uVar5 >> 1; uVar8 = uVar7; if (0xfd < uVar7) goto LAB_0005677c; } } uVar4 = uVar4 + uVar8 * 0x800000 + (uint)(0x7fffffff < uVar5); if (uVar5 == 0x80000000) { uVar4 = uVar4 & 0xfffffffe; } return uVar4 | param_1; } ### FUNC __addsf3 @ 0005661c uint __addsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) { int iVar1; int iVar2; byte bVar3; uint uVar4; uint uVar5; uint uVar6; uint uVar7; uint uVar8; bool bVar9; uVar4 = param_1 << 1; bVar9 = uVar4 == 0; if (!bVar9) { param_4 = param_2 << 1; bVar9 = param_4 == 0; } if (!bVar9) { bVar9 = uVar4 == param_4; } iVar1 = (int)uVar4 >> 0x18; if (!bVar9) { bVar9 = iVar1 == -1; } if (!bVar9) { bVar9 = (int)param_4 >> 0x18 == -1; } if (bVar9) { iVar2 = (int)(param_2 << 1) >> 0x18; if (iVar1 == -1 || iVar2 == -1) { uVar4 = param_2; if (iVar1 == -1) { uVar4 = param_1; } if (iVar1 != -1 || iVar2 != -1) { param_2 = uVar4; } if (((uVar4 & 0x7fffff) != 0 || (param_2 & 0x7fffff) != 0) || uVar4 != param_2) { uVar4 = uVar4 | 0x400000; } return uVar4; } if (uVar4 != param_2 << 1) { if (uVar4 == 0) { param_1 = param_2; } return param_1; } if (param_1 != param_2) { return 0; } if ((uVar4 & 0xff000000) == 0) { uVar4 = param_1 << 1; if (SUB41(param_1 >> 0x1f,0)) { uVar4 = uVar4 | 0x80000000; } return uVar4; } if (uVar4 < 0xfe000000) { return param_1 + 0x800000; } param_1 = param_1 & 0x80000000; LAB_0005677c: return param_1 | 0x7f800000; } uVar4 = uVar4 >> 0x18; param_4 = param_4 >> 0x18; uVar8 = param_4 - uVar4; uVar5 = param_2; uVar7 = uVar4; if (uVar8 != 0 && uVar4 <= param_4) { uVar7 = uVar4 + uVar8; uVar5 = param_1; param_1 = param_2; } if (param_4 < uVar4) { uVar8 = -uVar8; } if (0x19 < uVar8) { return param_1; } uVar4 = param_1 & 0xffffff | 0x800000; if ((param_1 & 0x80000000) != 0) { uVar4 = -uVar4; } uVar6 = uVar5 & 0xffffff | 0x800000; if ((uVar5 & 0x80000000) != 0) { uVar6 = -uVar6; } if (uVar7 == uVar8) { uVar6 = uVar6 ^ 0x800000; if (uVar7 == 0) { uVar4 = uVar4 ^ 0x800000; uVar7 = 1; } else { uVar8 = uVar8 - 1; } } uVar4 = uVar4 + ((int)uVar6 >> (uVar8 & 0xff)); uVar6 = uVar6 << (0x20 - uVar8 & 0xff); param_1 = uVar4 & 0x80000000; if ((int)uVar4 < 0) { bVar9 = uVar6 != 0; uVar6 = -uVar6; uVar4 = -(uVar4 + bVar9); } if (uVar4 < 0x800000) { iVar1 = (int)uVar6 >> 0x1f; uVar6 = uVar6 << 1; uVar4 = uVar4 * 2 - iVar1; uVar8 = uVar7 - 2; if ((uVar4 & 0x800000) == 0) { uVar7 = LZCOUNT(uVar4) - 8; uVar4 = uVar4 << (uVar7 & 0xff); if ((int)uVar8 < (int)uVar7) { uVar4 = uVar4 >> (-(uVar8 - uVar7) & 0xff); } else { uVar4 = uVar4 + (uVar8 - uVar7) * 0x800000; } return uVar4 | param_1; } } else { uVar8 = uVar7 - 1; if (0xffffff < uVar4) { bVar3 = (byte)uVar4; uVar4 = uVar4 >> 1; uVar6 = (uint)(bVar3 & 1) << 0x1f | uVar6 >> 1; uVar8 = uVar7; if (0xfd < uVar7) goto LAB_0005677c; } } uVar4 = uVar4 + uVar8 * 0x800000 + (uint)(0x7fffffff < uVar6); if (uVar6 == 0x80000000) { uVar4 = uVar4 & 0xfffffffe; } return uVar4 | param_1; } ### FUNC __floatunsisf @ 000567ac uint __floatunsisf(uint param_1) { uint uVar1; uint uVar2; int iVar3; if (param_1 == 0) { return 0; } uVar1 = LZCOUNT(param_1); uVar2 = uVar1 - 8; iVar3 = uVar2 * -0x800000 + 0x4a800000; if (7 < uVar1) { uVar1 = 0 << (uVar2 & 0xff); uVar2 = iVar3 + (param_1 << (uVar2 & 0xff)) + (0U >> (0x20 - uVar2 & 0xff)) + (uint)(0x7fffffff < uVar1); if (uVar1 == 0x80000000) { uVar2 = uVar2 & 0xfffffffe; } return uVar2; } uVar2 = param_1 << uVar1 + 0x18; uVar1 = (iVar3 + (param_1 >> (0x20 - (uVar1 + 0x18) & 0xff))) - ((int)uVar2 >> 0x1f); if ((uVar2 & 0x7fffffff) == 0) { uVar1 = uVar1 & ~(uVar2 >> 0x1f); } return uVar1; } ### FUNC __floatsisf @ 000567b4 uint __floatsisf(uint param_1) { uint uVar1; uint uVar2; uint uVar3; int iVar4; uVar3 = param_1 & 0x80000000; if ((int)uVar3 < 0) { param_1 = -param_1; } if (param_1 == 0) { return 0; } uVar1 = LZCOUNT(param_1); uVar2 = uVar1 - 8; iVar4 = ((uVar3 | 0x4b000000) - 0x800000) + uVar2 * -0x800000; if (7 < uVar1) { uVar3 = 0 << (uVar2 & 0xff); uVar1 = iVar4 + (param_1 << (uVar2 & 0xff)) + (0U >> (0x20 - uVar2 & 0xff)) + (uint)(0x7fffffff < uVar3); if (uVar3 == 0x80000000) { uVar1 = uVar1 & 0xfffffffe; } return uVar1; } uVar3 = param_1 << uVar1 + 0x18; uVar1 = (iVar4 + (param_1 >> (0x20 - (uVar1 + 0x18) & 0xff))) - ((int)uVar3 >> 0x1f); if ((uVar3 & 0x7fffffff) == 0) { uVar1 = uVar1 & ~(uVar3 >> 0x1f); } return uVar1; } ### FUNC __aeabi_ul2f @ 000567d4 uint __aeabi_ul2f(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; if (param_1 == 0 && param_2 == 0) { return param_1; } uVar1 = param_1; uVar2 = param_2; if (param_2 == 0) { uVar1 = 0; uVar2 = param_1; } iVar5 = 0x5b000000; if (param_2 == 0) { iVar5 = 0x4b000000; } uVar3 = LZCOUNT(uVar2); uVar4 = uVar3 - 8; iVar5 = iVar5 + -0x800000 + uVar4 * -0x800000; if (uVar3 < 8) { uVar4 = uVar2 << uVar3 + 0x18; uVar2 = (iVar5 + (uVar2 >> (0x20 - (uVar3 + 0x18) & 0xff))) - ((int)uVar4 >> 0x1f); if (uVar1 == 0 && (uVar4 & 0x7fffffff) == 0) { uVar2 = uVar2 & ~(uVar4 >> 0x1f); } return uVar2; } uVar3 = uVar1 << (uVar4 & 0xff); uVar2 = iVar5 + (uVar2 << (uVar4 & 0xff)) + (uVar1 >> (0x20 - uVar4 & 0xff)) + (uint)(0x7fffffff < uVar3); if (uVar3 == 0x80000000) { uVar2 = uVar2 & 0xfffffffe; } return uVar2; } ### FUNC __aeabi_l2f @ 000567e4 uint __aeabi_l2f(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; uint uVar4; uint uVar5; int iVar6; bool bVar7; if (param_1 == 0 && param_2 == 0) { return param_1; } uVar5 = param_2 & 0x80000000; if ((int)uVar5 < 0) { bVar7 = param_1 != 0; param_1 = -param_1; param_2 = -(param_2 + bVar7); } uVar1 = param_1; uVar2 = param_2; if (param_2 == 0) { uVar1 = 0; uVar2 = param_1; } uVar5 = uVar5 | 0x5b000000; if (param_2 == 0) { uVar5 = uVar5 + 0xf0000000; } uVar3 = LZCOUNT(uVar2); uVar4 = uVar3 - 8; iVar6 = (uVar5 - 0x800000) + uVar4 * -0x800000; if (uVar3 < 8) { uVar5 = uVar2 << uVar3 + 0x18; uVar2 = (iVar6 + (uVar2 >> (0x20 - (uVar3 + 0x18) & 0xff))) - ((int)uVar5 >> 0x1f); if (uVar1 == 0 && (uVar5 & 0x7fffffff) == 0) { uVar2 = uVar2 & ~(uVar5 >> 0x1f); } return uVar2; } uVar5 = uVar1 << (uVar4 & 0xff); uVar2 = iVar6 + (uVar2 << (uVar4 & 0xff)) + (uVar1 >> (0x20 - uVar4 & 0xff)) + (uint)(0x7fffffff < uVar5); if (uVar5 == 0x80000000) { uVar2 = uVar2 & 0xfffffffe; } return uVar2; } ### FUNC __mulsf3 @ 00056860 uint __mulsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) { uint uVar1; longlong lVar2; uint uVar3; int iVar4; uint uVar5; int iVar6; int iVar7; uint uVar8; uint uVar9; bool bVar10; bool bVar11; uVar3 = param_1 >> 0x17 & 0xff; bVar10 = uVar3 == 0; if (!bVar10) { param_4 = param_2 >> 0x17 & 0xff; bVar10 = param_4 == 0; } if (!bVar10) { bVar10 = uVar3 == 0xff; } if (!bVar10) { bVar10 = param_4 == 0xff; } if (bVar10) { param_4 = param_2 >> 0x17 & 0xff; if (uVar3 == 0xff || param_4 == 0xff) { uVar9 = param_2; if (param_1 != 0 && param_1 != 0x80000000) { uVar9 = param_1; } uVar5 = uVar9; if (((((param_1 == 0 || param_1 == 0x80000000) || param_2 == 0) || param_2 == 0x80000000) || ((uVar3 == 0xff && ((uVar9 & 0x7fffff) != 0)))) || ((param_4 == 0xff && (uVar5 = param_2, (param_2 & 0x7fffff) != 0)))) { return uVar5 | 0x7fc00000; } uVar9 = uVar9 ^ param_2; goto LAB_000569dc; } if ((param_1 & 0x7fffffff) == 0 || (param_2 & 0x7fffffff) == 0) { return (param_1 ^ param_2) & 0x80000000; } bVar10 = uVar3 == 0; uVar9 = param_1 & 0x80000000; while( true ) { if (bVar10) { param_1 = param_1 << 1; bVar10 = (param_1 & 0x800000) == 0; } if (!bVar10) break; uVar3 = uVar3 - 1; } param_1 = param_1 | uVar9; bVar10 = param_4 == 0; uVar9 = param_2 & 0x80000000; while( true ) { if (bVar10) { param_2 = param_2 << 1; bVar10 = (param_2 & 0x800000) == 0; } if (!bVar10) break; param_4 = param_4 - 1; } param_2 = param_2 | uVar9; } iVar4 = uVar3 + param_4; uVar9 = param_1 ^ param_2; uVar3 = param_1 << 9; bVar10 = uVar3 == 0; if (!bVar10) { param_2 = param_2 << 9; bVar10 = param_2 == 0; } if (bVar10) { if (uVar3 == 0) { param_2 = param_2 << 9; } uVar9 = uVar9 & 0x80000000 | param_1 & 0x7fffff | param_2 >> 9; bVar11 = SBORROW4(iVar4,0x7f); iVar6 = iVar4 + -0x7f; bVar10 = iVar6 == 0; iVar7 = iVar6; if (!bVar10 && 0x7e < iVar4) { bVar11 = SBORROW4(0xff,iVar6); iVar7 = -iVar6 + 0xff; bVar10 = -iVar6 == -0xff; } if (!bVar10 && iVar7 < 0 == bVar11) { return uVar9 | iVar6 * 0x800000; } uVar9 = uVar9 | 0x800000; uVar8 = 0; bVar11 = SBORROW4(iVar6,1); uVar5 = iVar4 - 0x80; bVar10 = uVar5 == 0; uVar3 = uVar5; } else { lVar2 = (ulonglong)(param_2 >> 5 | 0x8000000) * (ulonglong)(uVar3 >> 5 | 0x8000000); bVar10 = (uint)((ulonglong)lVar2 >> 0x20) < 0x800000; if (bVar10) { lVar2 = lVar2 * 2; } uVar8 = (uint)lVar2; uVar9 = uVar9 & 0x80000000 | (uint)((ulonglong)lVar2 >> 0x20); uVar5 = iVar4 - (bVar10 + 0x7f); bVar11 = SBORROW4(uVar5,0xfd); bVar10 = uVar5 == 0xfd; uVar3 = uVar5 - 0xfd; if (uVar5 < 0xfe) { uVar3 = uVar9 + uVar5 * 0x800000 + (uint)(0x7fffffff < uVar8); if (uVar8 == 0x80000000) { uVar3 = uVar3 & 0xfffffffe; } return uVar3; } } if (bVar10 || (int)uVar3 < 0 != bVar11) { if (uVar5 != 0xffffffe7 && (int)(uVar5 + 0x19) < 0 == SCARRY4(uVar5,0x19)) { uVar1 = (uVar9 << 1) >> (-uVar5 & 0xff); uVar3 = uVar9 << (uVar5 + 0x20 & 0xff); uVar9 = (uVar9 & 0x80000000 | uVar1 >> 1) + (uint)((byte)uVar1 & 1); if (uVar8 == 0 && (uVar3 & 0x7fffffff) == 0) { uVar9 = uVar9 & ~(uVar3 >> 0x1f); } return uVar9; } return uVar9 & 0x80000000; } LAB_000569dc: return uVar9 & 0x80000000 | 0x7f800000; } ### FUNC __divsf3 @ 000569f8 uint __divsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4) { uint uVar1; uint uVar2; int iVar3; uint uVar4; int iVar5; uint uVar6; bool bVar7; bool bVar8; bool bVar9; uVar2 = param_1 >> 0x17 & 0xff; bVar7 = uVar2 == 0; if (!bVar7) { param_4 = param_2 >> 0x17 & 0xff; bVar7 = param_4 == 0; } if (!bVar7) { bVar7 = uVar2 == 0xff; } if (!bVar7) { bVar7 = param_4 == 0xff; } if (bVar7) { param_4 = param_2 >> 0x17 & 0xff; uVar6 = param_1; if (uVar2 == 0xff) { if (((param_1 & 0x7fffff) != 0) || (uVar6 = param_2, param_4 == 0xff)) { LAB_000569ec: return uVar6 | 0x7fc00000; } } else { if (param_4 == 0xff) { uVar6 = param_2; if ((param_2 & 0x7fffff) == 0) { LAB_00056990: return (param_1 ^ param_2) & 0x80000000; } goto LAB_000569ec; } if ((param_1 & 0x7fffffff) != 0 && (param_2 & 0x7fffffff) != 0) { bVar7 = uVar2 == 0; uVar6 = param_1 & 0x80000000; while( true ) { if (bVar7) { param_1 = param_1 << 1; bVar7 = (param_1 & 0x800000) == 0; } if (!bVar7) break; uVar2 = uVar2 - 1; } param_1 = param_1 | uVar6; bVar7 = param_4 == 0; uVar6 = param_2 & 0x80000000; while( true ) { if (bVar7) { param_2 = param_2 << 1; bVar7 = (param_2 & 0x800000) == 0; } if (!bVar7) break; param_4 = param_4 - 1; } param_2 = param_2 | uVar6; goto LAB_00056a10; } if ((param_1 & 0x7fffffff) == 0) { if ((param_2 & 0x7fffffff) != 0) goto LAB_00056990; goto LAB_000569ec; } } param_1 = param_1 ^ param_2; } else { LAB_00056a10: iVar3 = uVar2 - param_4; if (param_2 << 9 == 0) { param_1 = (param_1 ^ param_2) & 0x80000000 | param_1 & 0x7fffff; bVar9 = SCARRY4(iVar3,0x7f); iVar5 = iVar3 + 0x7f; bVar7 = iVar5 < 0; bVar8 = iVar5 == 0; if (!bVar8 && bVar7 == bVar9) { bVar9 = SBORROW4(0xff,iVar5); bVar7 = -iVar5 + 0xff < 0; bVar8 = -iVar5 == -0xff; } if (!bVar8 && bVar7 == bVar9) { return param_1 | iVar5 * 0x800000; } param_1 = param_1 | 0x800000; uVar2 = 0; bVar8 = SBORROW4(iVar5,1); uVar4 = iVar3 + 0x7e; bVar7 = uVar4 == 0; uVar6 = uVar4; } else { uVar1 = (param_2 << 9) >> 4 | 0x10000000; uVar2 = (param_1 << 9) >> 4 | 0x10000000; param_1 = (param_1 ^ param_2) & 0x80000000; bVar7 = uVar1 <= uVar2; if (!bVar7) { uVar2 = uVar2 << 1; } uVar4 = iVar3 + 0x7d + (uint)bVar7; uVar6 = 0x800000; do { if (uVar1 <= uVar2) { uVar2 = uVar2 - uVar1; param_1 = param_1 | uVar6; } if (uVar1 >> 1 <= uVar2) { uVar2 = uVar2 - (uVar1 >> 1); param_1 = param_1 | uVar6 >> 1; } if (uVar1 >> 2 <= uVar2) { uVar2 = uVar2 - (uVar1 >> 2); param_1 = param_1 | uVar6 >> 2; } if (uVar1 >> 3 <= uVar2) { uVar2 = uVar2 - (uVar1 >> 3); param_1 = param_1 | uVar6 >> 3; } uVar2 = uVar2 * 0x10; bVar7 = uVar2 == 0; if (!bVar7) { uVar6 = uVar6 >> 4; bVar7 = uVar6 == 0; } } while (!bVar7); bVar8 = SBORROW4(uVar4,0xfd); bVar7 = uVar4 == 0xfd; uVar6 = uVar4 - 0xfd; if (uVar4 < 0xfe) { uVar6 = param_1 + uVar4 * 0x800000 + (uint)(uVar1 <= uVar2); if (uVar2 == uVar1) { uVar6 = uVar6 & 0xfffffffe; } return uVar6; } } if (bVar7 || (int)uVar6 < 0 != bVar8) { if (uVar4 != 0xffffffe7 && (int)(uVar4 + 0x19) < 0 == SCARRY4(uVar4,0x19)) { uVar1 = (param_1 << 1) >> (-uVar4 & 0xff); uVar6 = param_1 << (uVar4 + 0x20 & 0xff); uVar4 = (param_1 & 0x80000000 | uVar1 >> 1) + (uint)((byte)uVar1 & 1); if (uVar2 == 0 && (uVar6 & 0x7fffffff) == 0) { uVar4 = uVar4 & ~(uVar6 >> 0x1f); } return uVar4; } return param_1 & 0x80000000; } } return param_1 & 0x80000000 | 0x7f800000; } ### FUNC __gesf2 @ 00056b58 uint __gesf2(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; bool bVar4; bool bVar5; uVar1 = param_1 * 2; uVar2 = param_2 * 2; if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) && ((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) || (((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) { return 0xffffffff; } uVar3 = uVar1 | param_2 & 0x7fffffff; bVar5 = uVar3 == 0; if (!bVar5) { uVar3 = param_1 ^ param_2; bVar5 = uVar3 == 0; } bVar4 = -1 < (int)uVar3; if (bVar4) { param_1 = uVar1 + param_2 * -2; bVar5 = param_1 == 0; } if ((bVar4 && uVar1 >= uVar2) && !bVar5) { param_1 = (int)param_2 >> 0x1f; } if (!bVar4 || uVar1 < uVar2) { param_1 = ~((int)param_2 >> 0x1f); } if (!bVar5) { param_1 = param_1 | 1; } return param_1; } ### FUNC __lesf2 @ 00056b60 uint __lesf2(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; bool bVar4; bool bVar5; uVar1 = param_1 * 2; uVar2 = param_2 * 2; if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) && ((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) || (((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) { return 1; } uVar3 = uVar1 | param_2 & 0x7fffffff; bVar5 = uVar3 == 0; if (!bVar5) { uVar3 = param_1 ^ param_2; bVar5 = uVar3 == 0; } bVar4 = -1 < (int)uVar3; if (bVar4) { param_1 = uVar1 + param_2 * -2; bVar5 = param_1 == 0; } if ((bVar4 && uVar1 >= uVar2) && !bVar5) { param_1 = (int)param_2 >> 0x1f; } if (!bVar4 || uVar1 < uVar2) { param_1 = ~((int)param_2 >> 0x1f); } if (!bVar5) { param_1 = param_1 | 1; } return param_1; } ### FUNC __eqsf2 @ 00056b68 uint __eqsf2(uint param_1,uint param_2) { uint uVar1; uint uVar2; uint uVar3; bool bVar4; bool bVar5; uVar1 = param_1 * 2; uVar2 = param_2 * 2; if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) && ((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) || (((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) { return 1; } uVar3 = uVar1 | param_2 & 0x7fffffff; bVar5 = uVar3 == 0; if (!bVar5) { uVar3 = param_1 ^ param_2; bVar5 = uVar3 == 0; } bVar4 = -1 < (int)uVar3; if (bVar4) { param_1 = uVar1 + param_2 * -2; bVar5 = param_1 == 0; } if ((bVar4 && uVar1 >= uVar2) && !bVar5) { param_1 = (int)param_2 >> 0x1f; } if (!bVar4 || uVar1 < uVar2) { param_1 = ~((int)param_2 >> 0x1f); } if (!bVar5) { param_1 = param_1 | 1; } return param_1; } ### FUNC __aeabi_cfrcmple @ 00056bcc void __aeabi_cfrcmple(undefined4 param_1,undefined4 param_2) { __aeabi_cfcmple(param_2,param_1); return; } ### FUNC __aeabi_cfcmple @ 00056bdc undefined8 __aeabi_cfcmple(undefined4 param_1,undefined4 param_2) { __eqsf2(); return CONCAT44(param_2,param_1); } ### FUNC __aeabi_fcmpeq @ 00056bf0 undefined1 __aeabi_fcmpeq(void) { undefined1 in_ZR; __aeabi_cfcmple(); return in_ZR; } ### FUNC __aeabi_fcmplt @ 00056c04 bool __aeabi_fcmplt(void) { undefined1 in_CY; __aeabi_cfcmple(); return !(bool)in_CY; } ### FUNC __aeabi_fcmple @ 00056c18 bool __aeabi_fcmple(void) { undefined1 in_ZR; undefined1 in_CY; __aeabi_cfcmple(); return !(bool)in_CY || (bool)in_ZR; } ### FUNC __aeabi_fcmpge @ 00056c2c bool __aeabi_fcmpge(void) { undefined1 in_ZR; undefined1 in_CY; __aeabi_cfrcmple(); return !(bool)in_CY || (bool)in_ZR; } ### FUNC __aeabi_fcmpgt @ 00056c40 bool __aeabi_fcmpgt(void) { undefined1 in_CY; __aeabi_cfrcmple(); return !(bool)in_CY; } ### FUNC __unordsf2 @ 00056c54 undefined4 __unordsf2(uint param_1,uint param_2) { if ((((int)(param_1 << 1) >> 0x18 != -1) || ((param_1 & 0x7fffff) == 0)) && (((int)(param_2 << 1) >> 0x18 != -1 || ((param_2 & 0x7fffff) == 0)))) { return 0; } return 1; } ### FUNC __fixsfsi @ 00056c8c uint __fixsfsi(uint param_1) { uint uVar1; uint uVar2; if (param_1 << 1 < 0x7f000000) { return 0; } uVar1 = (param_1 << 1) >> 0x18; uVar2 = 0x9e - uVar1; if (uVar1 < 0x9f && uVar2 != 0) { uVar1 = (param_1 << 8 | 0x80000000) >> (uVar2 & 0xff); if ((param_1 & 0x80000000) != 0) { uVar1 = -uVar1; } return uVar1; } if ((uVar2 == 0xffffff9f) && ((param_1 & 0x7fffff) != 0)) { return 0; } param_1 = param_1 & 0x80000000; if (param_1 == 0) { param_1 = 0x7fffffff; } return param_1; } ### FUNC __fixunssfsi @ 00056ce8 uint __fixunssfsi(uint param_1) { uint uVar1; if ((SUB41(param_1 >> 0x1f,0)) || (param_1 << 1 < 0x7f000000)) { return 0; } uVar1 = 0x9e - ((param_1 << 1) >> 0x18); if (-1 < (int)uVar1) { return (param_1 << 8 | 0x80000000) >> (uVar1 & 0xff); } if ((uVar1 == 0xffffff9f) && ((param_1 & 0x7fffff) != 0)) { return 0; } return 0xffffffff; } ### FUNC __aeabi_ldivmod @ 00056d3c void __aeabi_ldivmod(int param_1,int param_2,int param_3,int param_4) { bool bVar1; bool bVar2; bool bVar3; if (param_4 != 0 || param_3 != 0) { __gnu_ldivmod_helper(); return; } bVar1 = param_2 < 0; bVar2 = param_2 == 0; if (bVar2) { bVar1 = param_1 < 0; } bVar3 = param_1 != 0; if (bVar1) { param_2 = -0x80000000; param_1 = 0; } if ((!bVar2 || bVar3) && !bVar1) { param_2 = 0x7fffffff; } if ((!bVar2 || bVar3) && !bVar1) { param_1 = -1; } __aeabi_ldiv0(param_1,param_2); return; } ### FUNC __aeabi_uldivmod @ 00056d80 void __aeabi_uldivmod(int param_1,int param_2,int param_3,int param_4) { if (param_4 != 0 || param_3 != 0) { __gnu_uldivmod_helper(); return; } if (param_2 != 0 || param_1 != 0) { param_2 = -1; param_1 = -1; } __aeabi_ldiv0(param_1,param_2); return; } ### FUNC __aeabi_ldiv0 @ 00056dbc void __aeabi_ldiv0(void) { raise(8); return; } ### FUNC __muldi3 @ 00056dcc undefined8 __muldi3(uint param_1,int param_2,uint param_3,int param_4) { return CONCAT44(param_4 * param_1 + param_2 * param_3 + (int)((ulonglong)param_1 * (ulonglong)param_3 >> 0x20), (int)((ulonglong)param_1 * (ulonglong)param_3)); } ### FUNC __gnu_ldivmod_helper @ 00056de8 void __gnu_ldivmod_helper (uint param_1,int param_2,undefined4 param_3,undefined4 param_4,int *param_5) { uint uVar1; longlong lVar2; lVar2 = __divdi3(); lVar2 = lVar2 * CONCAT44(param_4,param_3); uVar1 = (uint)lVar2; *param_5 = param_1 - uVar1; param_5[1] = param_2 - ((int)((ulonglong)lVar2 >> 0x20) + (uint)(param_1 < uVar1)); return; } ### FUNC __gnu_uldivmod_helper @ 00056e24 void __gnu_uldivmod_helper (uint param_1,int param_2,undefined4 param_3,undefined4 param_4,int *param_5) { uint uVar1; longlong lVar2; lVar2 = __udivdi3(); lVar2 = lVar2 * CONCAT44(param_4,param_3); uVar1 = (uint)lVar2; *param_5 = param_1 - uVar1; param_5[1] = param_2 - ((int)((ulonglong)lVar2 >> 0x20) + (uint)(param_1 < uVar1)); return; } ### FUNC FUN_00056e60 @ 00056e60 int FUN_00056e60(int *param_1,int param_2) { int iVar1; int iVar2; do { iVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(iVar2,iVar2 + param_2,param_1); } while (iVar1 != 0); return iVar2; } ### FUNC FUN_00056e98 @ 00056e98 int FUN_00056e98(int *param_1,int param_2) { int iVar1; int iVar2; do { iVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(iVar2,iVar2 - param_2,param_1); } while (iVar1 != 0); return iVar2; } ### FUNC FUN_00056ed0 @ 00056ed0 uint FUN_00056ed0(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 | param_2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_00056f08 @ 00056f08 uint FUN_00056f08(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 & param_2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_00056f40 @ 00056f40 uint FUN_00056f40(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 ^ param_2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_00056f78 @ 00056f78 uint FUN_00056f78(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,~(uVar2 & param_2),param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_00056fb4 @ 00056fb4 int FUN_00056fb4(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,(uVar2 + param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, (uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)uVar2; } ### FUNC FUN_00057018 @ 00057018 int FUN_00057018(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,(uVar2 - param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, (uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)uVar2; } ### FUNC FUN_0005707c @ 0005707c int FUN_0005707c(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,((uVar2 | param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, (uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)uVar2; } ### FUNC FUN_000570e0 @ 000570e0 int FUN_000570e0(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,(uVar2 & param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, (uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)uVar2; } ### FUNC FUN_00057144 @ 00057144 int FUN_00057144(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,((uVar2 ^ param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, (uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)uVar2; } ### FUNC FUN_000571a8 @ 000571a8 int FUN_000571a8(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,(~(uVar2 & param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3, (uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)uVar2; } ### FUNC FUN_00057210 @ 00057210 int FUN_00057210(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,uVar2 & uVar3 + param_2 << iVar1 | ~uVar2 & uVar4, (uint *)(param_1 & 0xfffffffc)); } while (iVar5 != 0); return (int)(char)uVar3; } ### FUNC FUN_00057270 @ 00057270 int FUN_00057270(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,uVar2 & uVar3 - param_2 << iVar1 | ~uVar2 & uVar4, (uint *)(param_1 & 0xfffffffc)); } while (iVar5 != 0); return (int)(char)uVar3; } ### FUNC FUN_000572d0 @ 000572d0 int FUN_000572d0(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,uVar2 & (uVar3 | param_2) << iVar1 | ~uVar2 & uVar4, (uint *)(param_1 & 0xfffffffc)); } while (iVar5 != 0); return (int)(char)uVar3; } ### FUNC FUN_00057330 @ 00057330 int FUN_00057330(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,uVar2 & (uVar3 & param_2) << iVar1 | ~uVar2 & uVar4, (uint *)(param_1 & 0xfffffffc)); } while (iVar5 != 0); return (int)(char)uVar3; } ### FUNC FUN_00057390 @ 00057390 int FUN_00057390(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,uVar2 & (uVar3 ^ param_2) << iVar1 | ~uVar2 & uVar4, (uint *)(param_1 & 0xfffffffc)); } while (iVar5 != 0); return (int)(char)uVar3; } ### FUNC FUN_000573f0 @ 000573f0 int FUN_000573f0(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,uVar2 & ~(uVar3 & param_2) << iVar1 | ~uVar2 & uVar4, (uint *)(param_1 & 0xfffffffc)); } while (iVar5 != 0); return (int)(char)uVar3; } ### FUNC FUN_00057454 @ 00057454 int FUN_00057454(int *param_1,int param_2) { int iVar1; int iVar2; do { iVar2 = *param_1 + param_2; iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,iVar2,param_1); } while (iVar1 != 0); return iVar2; } ### FUNC FUN_0005748c @ 0005748c int FUN_0005748c(int *param_1,int param_2) { int iVar1; int iVar2; do { iVar2 = *param_1 - param_2; iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,iVar2,param_1); } while (iVar1 != 0); return iVar2; } ### FUNC FUN_000574c4 @ 000574c4 uint FUN_000574c4(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1 | param_2; iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_000574fc @ 000574fc uint FUN_000574fc(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1 & param_2; iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_00057534 @ 00057534 uint FUN_00057534(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = *param_1 ^ param_2; iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_0005756c @ 0005756c uint FUN_0005756c(uint *param_1,uint param_2) { int iVar1; uint uVar2; do { uVar2 = ~(*param_1 & param_2); iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_000575a8 @ 000575a8 int FUN_000575a8(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xffff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = (param_2 + ((uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057614 @ 00057614 int FUN_00057614(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xffff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = (((uVar3 & uVar2) >> iVar1) - param_2 & 0xffff) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057680 @ 00057680 int FUN_00057680(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xffff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = ((param_2 | (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_000576ec @ 000576ec int FUN_000576ec(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xffff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = (param_2 & (uVar3 & uVar2) >> iVar1 & 0xffff) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057758 @ 00057758 int FUN_00057758(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xffff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = ((param_2 ^ (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_000577c4 @ 000577c4 int FUN_000577c4(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xffff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = (~(param_2 & (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(short)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057834 @ 00057834 int FUN_00057834(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = uVar2 & param_2 + ((uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(char)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_0005789c @ 0005789c int FUN_0005789c(uint param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = uVar2 & ((uVar3 & uVar2) >> iVar1) - param_2 << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(char)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057904 @ 00057904 int FUN_00057904(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = uVar2 & (param_2 | (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(char)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_0005796c @ 0005796c int FUN_0005796c(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = uVar2 & (param_2 & (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(char)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_000579d4 @ 000579d4 int FUN_000579d4(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = uVar2 & (param_2 ^ (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(char)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057a3c @ 00057a3c int FUN_00057a3c(uint param_1,uint param_2) { int iVar1; uint uVar2; uint uVar3; int iVar4; uint uVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar5 = uVar2 & ~(param_2 & (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3; iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc)); } while (iVar4 != 0); return (int)(char)((uVar5 & uVar2) >> iVar1); } ### FUNC FUN_00057aa8 @ 00057aa8 int FUN_00057aa8(int *param_1,int param_2,undefined4 param_3) { int iVar1; do { if (param_2 != *param_1) { return *param_1; } iVar1 = (*(code *)&SUB_ffff0fc0)(param_2,param_3,param_1); } while (iVar1 != 0); return param_2; } ### FUNC FUN_00057aec @ 00057aec int FUN_00057aec(uint param_1,ushort param_2,uint param_3,undefined4 param_4) { int iVar1; uint uVar2; uint uVar3; int iVar4; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1; if (uVar2 != param_2) { param_2 = (ushort)uVar2; break; } iVar4 = (*(code *)&SUB_ffff0fc0) (uVar3,~(0xffff << iVar1) & uVar3 | (param_3 & 0xffff) << iVar1, (uint *)(param_1 & 0xfffffffc),uVar2,param_4); } while (iVar4 != 0); return (int)(short)param_2; } ### FUNC FUN_00057b68 @ 00057b68 int FUN_00057b68(uint param_1,byte param_2,int param_3,undefined4 param_4) { int iVar1; uint uVar2; uint uVar3; uint uVar4; int iVar5; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); uVar3 = (uVar4 & uVar2) >> iVar1; if (uVar3 != param_2) { param_2 = (byte)uVar3; break; } iVar5 = (*(code *)&SUB_ffff0fc0) (uVar4,~uVar2 & uVar4 | uVar2 & param_3 << iVar1, (uint *)(param_1 & 0xfffffffc),uVar3,param_4); } while (iVar5 != 0); return (int)(char)param_2; } ### FUNC FUN_00057bd8 @ 00057bd8 bool FUN_00057bd8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { int iVar1; iVar1 = (*(code *)&SUB_ffff0fc0)(param_2,param_3,param_1,&SUB_ffff0fc0,param_4); return iVar1 == 0; } ### FUNC FUN_00057c24 @ 00057c24 bool FUN_00057c24(undefined4 param_1,int param_2) { char cVar1; cVar1 = FUN_00057b68(); return param_2 == cVar1; } ### FUNC FUN_00057c50 @ 00057c50 undefined4 FUN_00057c50(undefined4 *param_1,undefined4 param_2) { int iVar1; undefined4 uVar2; do { uVar2 = *param_1; iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,param_2,param_1); } while (iVar1 != 0); return uVar2; } ### FUNC FUN_00057c88 @ 00057c88 int FUN_00057c88(uint param_1,uint param_2) { int iVar1; int iVar2; uint uVar3; iVar1 = (param_1 & 3) << 3; do { uVar3 = *(uint *)(param_1 & 0xfffffffc); iVar2 = (*(code *)&SUB_ffff0fc0) (uVar3,~(0xffff << iVar1) & uVar3 | (param_2 & 0xffff) << iVar1, (uint *)(param_1 & 0xfffffffc)); } while (iVar2 != 0); return (int)(short)((0xffff << iVar1 & uVar3) >> iVar1); } ### FUNC FUN_00057ce8 @ 00057ce8 int FUN_00057ce8(uint param_1,int param_2) { int iVar1; uint uVar2; int iVar3; uint uVar4; iVar1 = (param_1 & 3) << 3; uVar2 = 0xff << iVar1; do { uVar4 = *(uint *)(param_1 & 0xfffffffc); iVar3 = (*(code *)&SUB_ffff0fc0) (uVar4,~uVar2 & uVar4 | uVar2 & param_2 << iVar1, (uint *)(param_1 & 0xfffffffc)); } while (iVar3 != 0); return (int)(char)((uVar2 & uVar4) >> iVar1); } ### FUNC FUN_00057dc8 @ 00057dc8 int FUN_00057dc8(uint *param_1) { uint uVar1; uVar1 = *param_1; if ((uVar1 & 0x40000000) == 0) { uVar1 = uVar1 & 0x7fffffff; } else { uVar1 = uVar1 | 0x80000000; } return (int)param_1 + uVar1; } ### FUNC FUN_00057de0 @ 00057de0 int FUN_00057de0(int param_1,int param_2,uint param_3) { int iVar1; uint uVar2; int iVar3; int iVar4; int iVar5; int iVar6; if (param_2 == 0) { return 0; } iVar6 = 0; iVar5 = param_2 + -1; do { while( true ) { iVar1 = (iVar6 + iVar5) / 2; iVar4 = param_1 + iVar1 * 8; uVar2 = FUN_00057dc8(iVar4); if (iVar1 == param_2 + -1) break; iVar3 = FUN_00057dc8(param_1 + iVar1 * 8 + 8); if (param_3 < uVar2) goto LAB_00057e44; if (param_3 <= iVar3 - 1U) { return iVar4; } iVar6 = iVar1 + 1; } if (uVar2 <= param_3) { return iVar4; } LAB_00057e44: if (iVar1 == iVar6) { return 0; } iVar5 = iVar1 + -1; } while( true ); } ### FUNC FUN_00057e84 @ 00057e84 code * FUN_00057e84(int param_1) { if (param_1 == 1) { return __aeabi_unwind_cpp_pr1; } if (param_1 != 2) { if (param_1 == 0) { return __aeabi_unwind_cpp_pr0; } return (code *)0x0; } return __aeabi_unwind_cpp_pr2; } ### FUNC FUN_00057ed4 @ 00057ed4 /* WARNING: Removing unreachable block (ram,0x00057f14) */ undefined4 FUN_00057ed4(int param_1,int param_2,undefined4 param_3) { int iVar1; undefined4 uVar2; int iVar3; bool bVar4; int local_14; undefined4 uStack_10; local_14 = param_2; uStack_10 = param_3; iVar1 = __gnu_Unwind_Find_exidx(param_2 + -2,&local_14,param_3,__gnu_Unwind_Find_exidx,param_1); if ((iVar1 == 0) || (iVar1 = FUN_00057de0(iVar1,local_14,param_2 + -2), iVar1 == 0)) { *(undefined4 *)(param_1 + 0x10) = 0; uVar2 = 9; } else { uVar2 = FUN_00057dc8(); iVar3 = *(int *)(iVar1 + 4); bVar4 = iVar3 == 1; if (bVar4) { iVar3 = 0; *(undefined4 *)(param_1 + 0x10) = 0; } *(undefined4 *)(param_1 + 0x48) = uVar2; if (bVar4) { uVar2 = 5; } else { if (iVar3 < 0) { *(int *)(param_1 + 0x4c) = iVar1 + 4; } else { uVar2 = FUN_00057dc8(); *(undefined4 *)(param_1 + 0x4c) = uVar2; } *(uint *)(param_1 + 0x50) = (uint)(iVar3 < 0); if ((int)**(uint **)(param_1 + 0x4c) < 0) { iVar1 = FUN_00057e84(**(uint **)(param_1 + 0x4c) >> 0x18 & 0xf); *(int *)(param_1 + 0x10) = iVar1; if (iVar1 == 0) { uVar2 = 9; } else { uVar2 = 0; } } else { uVar2 = FUN_00057dc8(); *(undefined4 *)(param_1 + 0x10) = uVar2; uVar2 = 0; } } } return uVar2; } ### FUNC FUN_00057fd8 @ 00057fd8 void FUN_00057fd8(uint *param_1) { if ((*param_1 & 1) == 0) { if ((*param_1 & 2) == 0) { __gnu_Unwind_Restore_VFP(param_1 + 0x12); } else { __gnu_Unwind_Restore_VFP_D(); } } if ((*param_1 & 4) == 0) { __gnu_Unwind_Restore_VFP_D_16_to_31(param_1 + 0x34); } if ((*param_1 & 8) == 0) { __gnu_Unwind_Restore_WMMXD(param_1 + 0x54); } if ((*param_1 & 0x10) != 0) { return; } __gnu_Unwind_Restore_WMMXC(param_1 + 0x74); return; } ### FUNC FUN_00058044 @ 00058044 undefined4 FUN_00058044(int *param_1) { undefined4 uVar1; if (*param_1 == 0) { uVar1 = 0; } else { uVar1 = *(undefined4 *)(*param_1 + (int)param_1); } return uVar1; } ### FUNC FUN_00058058 @ 00058058 undefined4 FUN_00058058(void) { return 9; } ### FUNC FUN_00058060 @ 00058060 void FUN_00058060(void) { return; } ### FUNC FUN_00058064 @ 00058064 int FUN_00058064(int param_1,int param_2) { int iVar1; int iVar2; int iVar3; uint uVar4; int iVar5; code *pcVar6; undefined4 uVar7; undefined8 uVar8; undefined4 uStack_3f8; undefined4 uStack_3f4; undefined4 uStack_3f0; undefined4 uStack_3ec; undefined4 uStack_3e8; undefined4 uStack_3e4; undefined4 uStack_3e0; undefined4 uStack_3dc; undefined4 uStack_3d8; undefined4 uStack_3d4; undefined4 uStack_3d0; undefined4 uStack_3cc; undefined4 uStack_3c8; undefined4 uStack_3c4; undefined4 uStack_3c0; undefined4 uStack_3bc; undefined4 uStack_3b8; undefined4 uStack_3b4; undefined1 auStack_218 [56]; undefined4 uStack_1e0; int iStack_34; int iStack_30; undefined4 uStack_2c; do { iVar1 = FUN_00057ed4(param_1,*(undefined4 *)(param_2 + 0x40)); if (iVar1 != 0) goto LAB_00058084; *(undefined4 *)(param_1 + 0x14) = *(undefined4 *)(param_2 + 0x40); iVar1 = param_2; iVar2 = (**(code **)(param_1 + 0x10))(1,param_1); } while (iVar2 == 8); if (iVar2 == 7) { FUN_00058060(0,*(undefined4 *)(param_2 + 0x40)); uVar8 = restore_core_regs(param_2 + 4); iVar5 = (int)((ulonglong)uVar8 >> 0x20); iVar2 = (int)uVar8; pcVar6 = *(code **)(iVar2 + 0xc); uVar7 = *(undefined4 *)(iVar2 + 0x18); uStack_3f4 = *(undefined4 *)(iVar5 + 4); uStack_3f0 = *(undefined4 *)(iVar5 + 8); uStack_3ec = *(undefined4 *)(iVar5 + 0xc); uStack_3e8 = *(undefined4 *)(iVar5 + 0x10); uStack_3e4 = *(undefined4 *)(iVar5 + 0x14); uStack_3e0 = *(undefined4 *)(iVar5 + 0x18); uStack_3dc = *(undefined4 *)(iVar5 + 0x1c); uStack_3d8 = *(undefined4 *)(iVar5 + 0x20); uStack_3d4 = *(undefined4 *)(iVar5 + 0x24); uStack_3d0 = *(undefined4 *)(iVar5 + 0x28); uStack_3cc = *(undefined4 *)(iVar5 + 0x2c); uStack_3c8 = *(undefined4 *)(iVar5 + 0x30); uStack_3c4 = *(undefined4 *)(iVar5 + 0x34); uStack_3c0 = *(undefined4 *)(iVar5 + 0x38); uStack_3bc = *(undefined4 *)(iVar5 + 0x3c); uStack_3b8 = *(undefined4 *)(iVar5 + 0x40); iVar5 = 0; uStack_3f8 = 0; uStack_2c = 0; iStack_34 = param_2; iStack_30 = param_1; do { iVar3 = FUN_00057ed4(iVar2,uStack_3b8); if (iVar1 == 0) { uVar4 = 9; } else { uVar4 = 10; } if (iVar3 == 0) { *(undefined4 *)(iVar2 + 0x14) = uStack_3b8; memcpy(auStack_218,&uStack_3f8,0x1e0); iVar5 = (**(code **)(iVar2 + 0x10))(uVar4,iVar2,auStack_218); uStack_3b4 = uStack_1e0; } else { uVar4 = uVar4 | 0x10; uStack_3b4 = uStack_3c0; } iVar1 = (*pcVar6)(1,uVar4,iVar2,iVar2,&uStack_3f8,uVar7); if (iVar1 != 0) { return 9; } if (iVar3 != 0) { return iVar3; } memcpy(&uStack_3f8,auStack_218,0x1e0); iVar1 = 0; } while (iVar5 == 8); if (iVar5 == 7) { FUN_00058060(0,uStack_3b8); restore_core_regs(&uStack_3f4); } return 9; } LAB_00058084: /* WARNING: Subroutine does not return */ abort(); } ### FUNC FUN_000580c8 @ 000580c8 int FUN_000580c8(int param_1,int param_2,int param_3) { int iVar1; int iVar2; uint uVar3; int iVar4; code *pcVar5; undefined4 uVar6; undefined4 local_3e8; undefined4 local_3e4; undefined4 uStack_3e0; undefined4 uStack_3dc; undefined4 uStack_3d8; undefined4 local_3d4; undefined4 uStack_3d0; undefined4 uStack_3cc; undefined4 uStack_3c8; undefined4 local_3c4; undefined4 uStack_3c0; undefined4 uStack_3bc; undefined4 uStack_3b8; undefined4 local_3b4; undefined4 uStack_3b0; undefined4 uStack_3ac; undefined4 local_3a8; undefined4 local_3a4; undefined1 auStack_208 [56]; undefined4 local_1d0; pcVar5 = *(code **)(param_1 + 0xc); uVar6 = *(undefined4 *)(param_1 + 0x18); local_3e4 = *(undefined4 *)(param_2 + 4); uStack_3e0 = *(undefined4 *)(param_2 + 8); uStack_3dc = *(undefined4 *)(param_2 + 0xc); uStack_3d8 = *(undefined4 *)(param_2 + 0x10); local_3d4 = *(undefined4 *)(param_2 + 0x14); uStack_3d0 = *(undefined4 *)(param_2 + 0x18); uStack_3cc = *(undefined4 *)(param_2 + 0x1c); uStack_3c8 = *(undefined4 *)(param_2 + 0x20); local_3c4 = *(undefined4 *)(param_2 + 0x24); uStack_3c0 = *(undefined4 *)(param_2 + 0x28); uStack_3bc = *(undefined4 *)(param_2 + 0x2c); uStack_3b8 = *(undefined4 *)(param_2 + 0x30); local_3b4 = *(undefined4 *)(param_2 + 0x34); uStack_3b0 = *(undefined4 *)(param_2 + 0x38); uStack_3ac = *(undefined4 *)(param_2 + 0x3c); local_3a8 = *(undefined4 *)(param_2 + 0x40); iVar4 = 0; local_3e8 = 0; do { iVar1 = FUN_00057ed4(param_1,local_3a8); if (param_3 == 0) { uVar3 = 9; } else { uVar3 = 10; } if (iVar1 == 0) { *(undefined4 *)(param_1 + 0x14) = local_3a8; memcpy(auStack_208,&local_3e8,0x1e0); iVar4 = (**(code **)(param_1 + 0x10))(uVar3,param_1,auStack_208); local_3a4 = local_1d0; } else { uVar3 = uVar3 | 0x10; local_3a4 = uStack_3b0; } iVar2 = (*pcVar5)(1,uVar3,param_1,param_1,&local_3e8,uVar6); if (iVar2 != 0) { return 9; } if (iVar1 != 0) { return iVar1; } memcpy(&local_3e8,auStack_208,0x1e0); param_3 = 0; } while (iVar4 == 8); if (iVar4 == 7) { FUN_00058060(0,local_3a8); restore_core_regs(&local_3e4); } return 9; } ### FUNC _Unwind_GetCFA @ 000581f0 undefined4 _Unwind_GetCFA(int param_1) { return *(undefined4 *)(param_1 + 0x44); } ### FUNC __gnu_Unwind_RaiseException @ 000581f8 undefined4 __gnu_Unwind_RaiseException(int param_1,int param_2) { int iVar1; undefined4 local_1f8; undefined4 local_1f4; undefined4 uStack_1f0; undefined4 uStack_1ec; undefined4 uStack_1e8; undefined4 local_1e4; undefined4 uStack_1e0; undefined4 uStack_1dc; undefined4 uStack_1d8; undefined4 local_1d4; undefined4 uStack_1d0; undefined4 uStack_1cc; undefined4 uStack_1c8; undefined4 local_1c4; undefined4 uStack_1c0; undefined4 uStack_1bc; undefined4 local_1b8; *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_2 + 0x3c); local_1f4 = *(undefined4 *)(param_2 + 4); uStack_1f0 = *(undefined4 *)(param_2 + 8); uStack_1ec = *(undefined4 *)(param_2 + 0xc); uStack_1e8 = *(undefined4 *)(param_2 + 0x10); local_1e4 = *(undefined4 *)(param_2 + 0x14); uStack_1e0 = *(undefined4 *)(param_2 + 0x18); uStack_1dc = *(undefined4 *)(param_2 + 0x1c); uStack_1d8 = *(undefined4 *)(param_2 + 0x20); local_1d4 = *(undefined4 *)(param_2 + 0x24); uStack_1d0 = *(undefined4 *)(param_2 + 0x28); uStack_1cc = *(undefined4 *)(param_2 + 0x2c); uStack_1c8 = *(undefined4 *)(param_2 + 0x30); local_1c4 = *(undefined4 *)(param_2 + 0x34); uStack_1c0 = *(undefined4 *)(param_2 + 0x38); uStack_1bc = *(undefined4 *)(param_2 + 0x3c); local_1b8 = *(undefined4 *)(param_2 + 0x40); local_1f8 = 0xffffffff; do { iVar1 = FUN_00057ed4(param_1,local_1b8); if (iVar1 != 0) { return 9; } iVar1 = (**(code **)(param_1 + 0x10))(0,param_1,&local_1f8); } while (iVar1 == 8); FUN_00057fd8(&local_1f8); if (iVar1 == 6) { FUN_00058064(param_1,param_2); } return 9; } ### FUNC __gnu_Unwind_ForcedUnwind @ 0005829c void __gnu_Unwind_ForcedUnwind(int param_1,undefined4 param_2,undefined4 param_3,int param_4) { undefined4 uVar1; *(undefined4 *)(param_1 + 0x18) = param_3; uVar1 = *(undefined4 *)(param_4 + 0x3c); *(undefined4 *)(param_1 + 0xc) = param_2; *(undefined4 *)(param_4 + 0x40) = uVar1; FUN_000580c8(param_1,param_4,0); return; } ### FUNC __gnu_Unwind_Resume @ 000582b8 void __gnu_Unwind_Resume(int param_1,int param_2) { int iVar1; iVar1 = *(int *)(param_1 + 0xc); *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_1 + 0x14); if (iVar1 == 0) { iVar1 = (**(code **)(param_1 + 0x10))(2,param_1,param_2); if (iVar1 != 7) { if (iVar1 != 8) goto LAB_00058328; FUN_00058064(param_1,param_2); } FUN_00058060(0,*(undefined4 *)(param_2 + 0x40)); restore_core_regs(param_2 + 4); } else { FUN_000580c8(param_1,param_2,1); } LAB_00058328: /* WARNING: Subroutine does not return */ abort(); } ### FUNC __gnu_Unwind_Resume_or_Rethrow @ 0005832c void __gnu_Unwind_Resume_or_Rethrow(int param_1,int param_2) { if (*(int *)(param_1 + 0xc) == 0) { __gnu_Unwind_RaiseException(); return; } *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_2 + 0x3c); FUN_000580c8(param_1,param_2,0); return; } ### FUNC _Unwind_Complete @ 0005834c void _Unwind_Complete(void) { return; } ### FUNC _Unwind_DeleteException @ 00058350 void _Unwind_DeleteException(int param_1) { if (*(code **)(param_1 + 8) == (code *)0x0) { return; } /* WARNING: Could not recover jumptable at 0x00058364. Too many branches */ /* WARNING: Treating indirect jump as call */ (**(code **)(param_1 + 8))(1,param_1); return; } ### FUNC _Unwind_VRS_Get @ 00058368 undefined4 _Unwind_VRS_Get(int param_1,undefined4 param_2,uint param_3,int param_4,undefined4 *param_5) { bool bVar1; switch(param_2) { case 0: bVar1 = param_3 == 0xf; if (param_3 < 0x10) { bVar1 = param_4 == 0; } if (bVar1) { *param_5 = *(undefined4 *)(param_1 + param_3 * 4 + 4); return 0; } break; case 1: return 1; case 2: break; case 3: return 1; case 4: return 1; } return 2; } ### FUNC FUN_000583c4 @ 000583c4 undefined4 FUN_000583c4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 local_c; local_c = param_4; _Unwind_VRS_Get(param_1,0,param_2,0,&local_c,param_2,param_3); return local_c; } ### FUNC _Unwind_VRS_Set @ 000583ec undefined4 _Unwind_VRS_Set(int param_1,undefined4 param_2,uint param_3,int param_4,undefined4 *param_5) { bool bVar1; switch(param_2) { case 0: bVar1 = param_3 == 0xf; if (param_3 < 0x10) { bVar1 = param_4 == 0; } if (bVar1) { *(undefined4 *)(param_1 + param_3 * 4 + 4) = *param_5; return 0; } break; case 1: return 1; case 2: break; case 3: return 1; case 4: return 1; } return 2; } ### FUNC FUN_00058448 @ 00058448 void FUN_00058448(undefined4 param_1,undefined4 param_2,undefined4 param_3) { undefined4 local_c; local_c = param_3; _Unwind_VRS_Set(param_1,0,param_2,0,&local_c,param_2,param_3); return; } ### FUNC __gnu_Unwind_Backtrace @ 00058474 int __gnu_Unwind_Backtrace(code *param_1,undefined4 param_2,int param_3) { int iVar1; undefined1 auStack_250 [16]; code *local_240; undefined4 local_1f8; undefined4 local_1f4; undefined4 uStack_1f0; undefined4 uStack_1ec; undefined4 uStack_1e8; undefined4 local_1e4; undefined4 uStack_1e0; undefined4 uStack_1dc; undefined4 uStack_1d8; undefined4 local_1d4; undefined4 uStack_1d0; undefined4 uStack_1cc; undefined4 uStack_1c8; undefined4 local_1c4; undefined4 uStack_1c0; undefined4 uStack_1bc; undefined4 local_1b8; *(undefined4 *)(param_3 + 0x40) = *(undefined4 *)(param_3 + 0x3c); local_1f4 = *(undefined4 *)(param_3 + 4); uStack_1f0 = *(undefined4 *)(param_3 + 8); uStack_1ec = *(undefined4 *)(param_3 + 0xc); uStack_1e8 = *(undefined4 *)(param_3 + 0x10); local_1e4 = *(undefined4 *)(param_3 + 0x14); uStack_1e0 = *(undefined4 *)(param_3 + 0x18); uStack_1dc = *(undefined4 *)(param_3 + 0x1c); uStack_1d8 = *(undefined4 *)(param_3 + 0x20); local_1d4 = *(undefined4 *)(param_3 + 0x24); uStack_1d0 = *(undefined4 *)(param_3 + 0x28); uStack_1cc = *(undefined4 *)(param_3 + 0x2c); uStack_1c8 = *(undefined4 *)(param_3 + 0x30); local_1c4 = *(undefined4 *)(param_3 + 0x34); uStack_1c0 = *(undefined4 *)(param_3 + 0x38); uStack_1bc = *(undefined4 *)(param_3 + 0x3c); local_1b8 = *(undefined4 *)(param_3 + 0x40); local_1f8 = 0xffffffff; do { iVar1 = FUN_00057ed4(auStack_250,local_1b8); if (iVar1 != 0) { LAB_000584d8: iVar1 = 9; break; } FUN_00058448(&local_1f8,0xc,auStack_250); iVar1 = (*param_1)(&local_1f8,param_2); if (iVar1 != 0) goto LAB_000584d8; iVar1 = (*local_240)(8,auStack_250,&local_1f8); } while ((iVar1 - 5U & 0xfffffffb) != 0); FUN_00057fd8(&local_1f8); return iVar1; } ### FUNC __aeabi_unwind_cpp_pr0 @ 0005892c /* WARNING: Removing unreachable block (ram,0x000585fc) */ /* WARNING: Removing unreachable block (ram,0x00058584) */ /* WARNING: Removing unreachable block (ram,0x0005858c) */ /* WARNING: Removing unreachable block (ram,0x000585e4) */ /* WARNING: Removing unreachable block (ram,0x00058894) */ undefined4 __aeabi_unwind_cpp_pr0(uint param_1,code *param_2,undefined4 param_3) { ushort uVar1; bool bVar2; bool bVar3; uint uVar4; code *pcVar5; undefined4 uVar6; int iVar7; uint uVar8; uint *puVar9; uint uVar10; int iVar11; uint uVar12; uint *puVar13; code *pcStack_38; int iStack_34; uint *puStack_30; undefined1 uStack_2c; undefined1 uStack_2b; puStack_30 = (uint *)(*(int **)(param_2 + 0x4c) + 1); uVar10 = param_1 & 3; iStack_34 = **(int **)(param_2 + 0x4c) << 8; uStack_2b = 0; uStack_2c = 3; puVar13 = puStack_30; if (uVar10 == 2) { puVar13 = *(uint **)(param_2 + 0x38); } if ((*(uint *)(param_2 + 0x50) & 1) == 0) { bVar3 = false; LAB_000585d4: do { while( true ) { if (*puVar13 == 0) goto LAB_0005888c; uVar1 = *(ushort *)((int)puVar13 + 2); uVar8 = *puVar13; puVar9 = puVar13 + 1; uVar12 = (uVar1 & 0xfffffffe) + *(int *)(param_2 + 0x48); uVar4 = FUN_000583c4(param_3,0xf); if (uVar4 < uVar12) { bVar2 = false; } else if (uVar4 < uVar12 + ((ushort)uVar8 & 0xfffffffe)) { bVar2 = true; } else { bVar2 = false; } uVar8 = (ushort)uVar8 & 1 | (uVar1 & 1) << 1; if (uVar8 != 1) break; if (uVar10 == 0) { if (bVar2) { uVar8 = *puVar9; if (puVar13[2] == 0xfffffffe) { return 9; } pcStack_38 = param_2 + 0x58; iVar7 = 1; if (puVar13[2] == 0xffffffff) { LAB_000586fc: iVar11 = FUN_000583c4(param_3,0xd); pcVar5 = param_2; if (iVar7 != 2) { pcVar5 = pcStack_38; } *(int *)(param_2 + 0x20) = iVar11; if (iVar7 == 2) { pcVar5 = pcVar5 + 0x2c; *(code **)pcVar5 = pcStack_38; } LAB_00058914: *(code **)(param_2 + 0x24) = pcVar5; *(uint **)(param_2 + 0x28) = puVar9; return 6; } uVar6 = FUN_00058044(puVar13 + 2); iVar7 = __cxa_type_match(param_2,uVar6,uVar8 >> 0x1f); if (iVar7 != 0) goto LAB_000586fc; } } else { iVar11 = *(int *)(param_2 + 0x20); iVar7 = FUN_000583c4(param_3,0xd); if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { uVar6 = FUN_00057dc8(puVar9); FUN_00058448(param_3,0xf,uVar6); LAB_0005885c: uVar6 = 0; pcVar5 = param_2; goto LAB_000588ec; } } puVar13 = puVar13 + 3; } if (uVar8 != 0) { if (uVar8 != 2) { return 9; } uVar8 = *puVar9 & 0x7fffffff; if (uVar10 == 0) { if (bVar2) { uVar4 = (param_1 >> 3 ^ 1) & 1; if (uVar8 == 0) { uVar4 = 1; } if (uVar4 != 0) { uVar4 = 0; do { if (uVar4 == uVar8) { iVar7 = FUN_000583c4(param_3,0xd); *(int *)(param_2 + 0x20) = iVar7; pcVar5 = pcStack_38; goto LAB_00058914; } uVar4 = uVar4 + 1; pcStack_38 = param_2 + 0x58; uVar6 = FUN_00058044(puVar9 + uVar4); iVar7 = __cxa_type_match(param_2,uVar6,0,&pcStack_38); } while (iVar7 == 0); } } } else { iVar11 = *(int *)(param_2 + 0x20); iVar7 = FUN_000583c4(param_3,0xd); if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { *(int *)(param_2 + 0x30) = 4; *(uint *)(param_2 + 0x28) = uVar8; *(int *)(param_2 + 0x2c) = 0; *(uint **)(param_2 + 0x34) = puVar13 + 2; if ((int)*puVar9 < 0) { uVar6 = FUN_00057dc8(puVar9 + uVar8 + 1); FUN_00058448(param_3,0xf,uVar6); goto LAB_0005885c; } bVar3 = true; } } if ((int)*puVar9 < 0) { puVar9 = puVar13 + 2; } puVar13 = puVar9 + uVar8 + 1; goto LAB_000585d4; } if (uVar10 == 0) { bVar2 = false; } puVar13 = puVar13 + 2; } while (!bVar2); pcVar5 = (code *)FUN_00057dc8(puVar9); *(uint **)(param_2 + 0x38) = puVar13; iVar7 = __cxa_begin_cleanup(param_2); if (iVar7 == 0) { return 9; } uVar6 = 0xf; } else { bVar3 = false; LAB_0005888c: iVar7 = __gnu_unwind_execute(param_3,&iStack_34); if (iVar7 != 0) { return 9; } if (!bVar3) { return 8; } uVar6 = FUN_000583c4(param_3,0xf); FUN_00058448(param_3,0xe,uVar6); pcVar5 = __cxa_call_unexpected; uVar6 = 0xf; } LAB_000588ec: FUN_00058448(param_3,uVar6,pcVar5); return 7; } ### FUNC __aeabi_unwind_cpp_pr1 @ 00058934 /* WARNING: Removing unreachable block (ram,0x000585fc) */ /* WARNING: Removing unreachable block (ram,0x0005856c) */ /* WARNING: Removing unreachable block (ram,0x000585e4) */ /* WARNING: Removing unreachable block (ram,0x00058894) */ undefined4 __aeabi_unwind_cpp_pr1(uint param_1,code *param_2,undefined4 param_3) { ushort uVar1; bool bVar2; bool bVar3; uint uVar4; code *pcVar5; undefined4 uVar6; int iVar7; uint uVar8; uint *puVar9; uint uVar10; int iVar11; uint uVar12; uint *puVar13; code *pcStack_38; int iStack_34; uint *puStack_30; undefined1 uStack_2c; undefined1 uStack_2b; uVar8 = **(uint **)(param_2 + 0x4c); puStack_30 = *(uint **)(param_2 + 0x4c) + 1; uVar10 = param_1 & 3; uStack_2b = (undefined1)(uVar8 >> 0x10); iStack_34 = uVar8 << 0x10; puVar13 = puStack_30 + (uVar8 >> 0x10 & 0xff); uStack_2c = 2; if (uVar10 == 2) { puVar13 = *(uint **)(param_2 + 0x38); } if ((*(uint *)(param_2 + 0x50) & 1) == 0) { bVar3 = false; LAB_000585d4: do { while( true ) { if (*puVar13 == 0) goto LAB_0005888c; uVar1 = *(ushort *)((int)puVar13 + 2); uVar8 = *puVar13; puVar9 = puVar13 + 1; uVar12 = (uVar1 & 0xfffffffe) + *(int *)(param_2 + 0x48); uVar4 = FUN_000583c4(param_3,0xf); if (uVar4 < uVar12) { bVar2 = false; } else if (uVar4 < uVar12 + ((ushort)uVar8 & 0xfffffffe)) { bVar2 = true; } else { bVar2 = false; } uVar8 = (ushort)uVar8 & 1 | (uVar1 & 1) << 1; if (uVar8 != 1) break; if (uVar10 == 0) { if (bVar2) { uVar8 = *puVar9; if (puVar13[2] == 0xfffffffe) { return 9; } pcStack_38 = param_2 + 0x58; iVar7 = 1; if (puVar13[2] == 0xffffffff) { LAB_000586fc: iVar11 = FUN_000583c4(param_3,0xd); pcVar5 = param_2; if (iVar7 != 2) { pcVar5 = pcStack_38; } *(int *)(param_2 + 0x20) = iVar11; if (iVar7 == 2) { pcVar5 = pcVar5 + 0x2c; *(code **)pcVar5 = pcStack_38; } LAB_00058914: *(code **)(param_2 + 0x24) = pcVar5; *(uint **)(param_2 + 0x28) = puVar9; return 6; } uVar6 = FUN_00058044(puVar13 + 2); iVar7 = __cxa_type_match(param_2,uVar6,uVar8 >> 0x1f); if (iVar7 != 0) goto LAB_000586fc; } } else { iVar11 = *(int *)(param_2 + 0x20); iVar7 = FUN_000583c4(param_3,0xd); if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { uVar6 = FUN_00057dc8(puVar9); FUN_00058448(param_3,0xf,uVar6); LAB_0005885c: uVar6 = 0; pcVar5 = param_2; goto LAB_000588ec; } } puVar13 = puVar13 + 3; } if (uVar8 != 0) { if (uVar8 != 2) { return 9; } uVar8 = *puVar9 & 0x7fffffff; if (uVar10 == 0) { if (bVar2) { uVar4 = (param_1 >> 3 ^ 1) & 1; if (uVar8 == 0) { uVar4 = 1; } if (uVar4 != 0) { uVar4 = 0; do { if (uVar4 == uVar8) { iVar7 = FUN_000583c4(param_3,0xd); *(int *)(param_2 + 0x20) = iVar7; pcVar5 = pcStack_38; goto LAB_00058914; } uVar4 = uVar4 + 1; pcStack_38 = param_2 + 0x58; uVar6 = FUN_00058044(puVar9 + uVar4); iVar7 = __cxa_type_match(param_2,uVar6,0,&pcStack_38); } while (iVar7 == 0); } } } else { iVar11 = *(int *)(param_2 + 0x20); iVar7 = FUN_000583c4(param_3,0xd); if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) { *(int *)(param_2 + 0x30) = 4; *(uint *)(param_2 + 0x28) = uVar8; *(int *)(param_2 + 0x2c) = 0; *(uint **)(param_2 + 0x34) = puVar13 + 2; if ((int)*puVar9 < 0) { uVar6 = FUN_00057dc8(puVar9 + uVar8 + 1); FUN_00058448(param_3,0xf,uVar6); goto LAB_0005885c; } bVar3 = true; } } if ((int)*puVar9 < 0) { puVar9 = puVar13 + 2; } puVar13 = puVar9 + uVar8 + 1; goto LAB_000585d4; } if (uVar10 == 0) { bVar2 = false; } puVar13 = puVar13 + 2; } while (!bVar2); pcVar5 = (code *)FUN_00057dc8(puVar9); *(uint **)(param_2 + 0x38) = puVar13; iVar7 = __cxa_begin_cleanup(param_2); if (iVar7 == 0) { return 9; } uVar6 = 0xf; } else { bVar3 = false; LAB_0005888c: iVar7 = __gnu_unwind_execute(param_3,&iStack_34); if (iVar7 != 0) { return 9; } if (!bVar3) { return 8; } uVar6 = FUN_000583c4(param_3,0xf); FUN_00058448(param_3,0xe,uVar6); pcVar5 = __cxa_call_unexpected; uVar6 = 0xf; } LAB_000588ec: FUN_00058448(param_3,uVar6,pcVar5); return 7; } ### FUNC __aeabi_unwind_cpp_pr2 @ 0005893c /* WARNING: Removing unreachable block (ram,0x00058600) */ /* WARNING: Removing unreachable block (ram,0x0005856c) */ /* WARNING: Removing unreachable block (ram,0x000585e8) */ /* WARNING: Removing unreachable block (ram,0x00058604) */ /* WARNING: Removing unreachable block (ram,0x00058894) */ undefined4 __aeabi_unwind_cpp_pr2(uint param_1,code *param_2,undefined4 param_3) { bool bVar1; bool bVar2; uint uVar3; code *pcVar4; undefined4 uVar5; int iVar6; uint uVar7; uint *puVar8; uint uVar9; uint uVar10; int iVar11; uint uVar12; uint *puVar13; code *local_38; int local_34; uint *local_30; undefined1 local_2c; undefined1 local_2b; uVar7 = **(uint **)(param_2 + 0x4c); local_30 = *(uint **)(param_2 + 0x4c) + 1; uVar9 = param_1 & 3; local_2b = (undefined1)(uVar7 >> 0x10); local_34 = uVar7 << 0x10; puVar13 = local_30 + (uVar7 >> 0x10 & 0xff); local_2c = 2; if (uVar9 == 2) { puVar13 = *(uint **)(param_2 + 0x38); } if ((*(uint *)(param_2 + 0x50) & 1) == 0) { bVar2 = false; LAB_000585d4: do { while( true ) { uVar7 = *puVar13; if (uVar7 == 0) goto LAB_0005888c; uVar10 = puVar13[1]; puVar8 = puVar13 + 2; uVar12 = (uVar10 & 0xfffffffe) + *(int *)(param_2 + 0x48); uVar3 = FUN_000583c4(param_3,0xf); if (uVar3 < uVar12) { bVar1 = false; } else if (uVar3 < uVar12 + (uVar7 & 0xfffffffe)) { bVar1 = true; } else { bVar1 = false; } uVar7 = uVar7 & 1 | (uVar10 & 1) << 1; if (uVar7 != 1) break; if (uVar9 == 0) { if (bVar1) { uVar7 = *puVar8; if (puVar13[3] == 0xfffffffe) { return 9; } local_38 = param_2 + 0x58; iVar6 = 1; if (puVar13[3] == 0xffffffff) { LAB_000586fc: iVar11 = FUN_000583c4(param_3,0xd); pcVar4 = param_2; if (iVar6 != 2) { pcVar4 = local_38; } *(int *)(param_2 + 0x20) = iVar11; if (iVar6 == 2) { pcVar4 = pcVar4 + 0x2c; *(code **)pcVar4 = local_38; } LAB_00058914: *(code **)(param_2 + 0x24) = pcVar4; *(uint **)(param_2 + 0x28) = puVar8; return 6; } uVar5 = FUN_00058044(puVar13 + 3); iVar6 = __cxa_type_match(param_2,uVar5,uVar7 >> 0x1f); if (iVar6 != 0) goto LAB_000586fc; } } else { iVar11 = *(int *)(param_2 + 0x20); iVar6 = FUN_000583c4(param_3,0xd); if ((iVar11 == iVar6) && (puVar8 == *(uint **)(param_2 + 0x28))) { uVar5 = FUN_00057dc8(puVar8); FUN_00058448(param_3,0xf,uVar5); LAB_0005885c: uVar5 = 0; pcVar4 = param_2; goto LAB_000588ec; } } puVar13 = puVar13 + 4; } if (uVar7 != 0) { if (uVar7 != 2) { return 9; } uVar7 = *puVar8 & 0x7fffffff; if (uVar9 == 0) { if (bVar1) { uVar3 = (param_1 >> 3 ^ 1) & 1; if (uVar7 == 0) { uVar3 = 1; } if (uVar3 != 0) { uVar3 = 0; do { if (uVar3 == uVar7) { iVar6 = FUN_000583c4(param_3,0xd); *(int *)(param_2 + 0x20) = iVar6; pcVar4 = local_38; goto LAB_00058914; } uVar3 = uVar3 + 1; local_38 = param_2 + 0x58; uVar5 = FUN_00058044(puVar8 + uVar3); iVar6 = __cxa_type_match(param_2,uVar5,0,&local_38); } while (iVar6 == 0); } } } else { iVar11 = *(int *)(param_2 + 0x20); iVar6 = FUN_000583c4(param_3,0xd); if ((iVar11 == iVar6) && (puVar8 == *(uint **)(param_2 + 0x28))) { *(int *)(param_2 + 0x30) = 4; *(uint *)(param_2 + 0x28) = uVar7; *(int *)(param_2 + 0x2c) = 0; *(uint **)(param_2 + 0x34) = puVar13 + 3; if ((int)*puVar8 < 0) { uVar5 = FUN_00057dc8(puVar8 + uVar7 + 1); FUN_00058448(param_3,0xf,uVar5); goto LAB_0005885c; } bVar2 = true; } } if ((int)*puVar8 < 0) { puVar8 = puVar13 + 3; } puVar13 = puVar8 + uVar7 + 1; goto LAB_000585d4; } if (uVar9 == 0) { bVar1 = false; } puVar13 = puVar13 + 3; } while (!bVar1); pcVar4 = (code *)FUN_00057dc8(puVar8); *(uint **)(param_2 + 0x38) = puVar13; iVar6 = __cxa_begin_cleanup(param_2); if (iVar6 == 0) { return 9; } uVar5 = 0xf; } else { bVar2 = false; LAB_0005888c: iVar6 = __gnu_unwind_execute(param_3,&local_34); if (iVar6 != 0) { return 9; } if (!bVar2) { return 8; } uVar5 = FUN_000583c4(param_3,0xf); FUN_00058448(param_3,0xe,uVar5); pcVar4 = __cxa_call_unexpected; uVar5 = 0xf; } LAB_000588ec: FUN_00058448(param_3,uVar5,pcVar4); return 7; } ### FUNC _Unwind_VRS_Pop @ 00058944 /* WARNING: Type propagation algorithm not settling */ undefined4 _Unwind_VRS_Pop(uint *param_1,undefined4 param_2,uint param_3,uint param_4) { uint *puVar1; uint uVar2; undefined4 *puVar3; int iVar4; uint uVar5; undefined4 *puVar6; uint uVar7; uint uVar8; undefined4 *puVar9; uint uVar10; bool bVar11; undefined4 auStack_1ac [33]; undefined1 auStack_128 [124]; undefined4 auStack_ac [36]; switch(param_2) { case 0: if (param_4 != 0) { return 2; } iVar4 = 1; puVar1 = (uint *)param_1[0xe]; do { bVar11 = (param_3 & 0xffff & 1 << (iVar4 - 1U & 0xff)) != 0; if (bVar11) { param_1[iVar4] = *puVar1; } iVar4 = iVar4 + 1; if (bVar11) { puVar1 = puVar1 + 1; } } while (iVar4 != 0x11); if ((param_3 & 0x2000) != 0) { return 0; } param_1[0xe] = (uint)puVar1; return 0; case 1: if ((param_4 & 0xfffffffb) != 1) { return 2; } uVar5 = param_3 >> 0x10; param_3 = param_3 & 0xffff; uVar7 = param_3 + uVar5; if (param_4 == 1) { if (0x10 < uVar7) { return 2; } if (0xf < uVar5) { return 2; } uVar8 = 0; uVar7 = 1; } else { if (0x20 < uVar7) { return 2; } uVar8 = param_3; if (uVar5 < 0x10) { if (uVar7 < 0x11) { uVar8 = 0; uVar7 = uVar8; goto LAB_00058a18; } uVar8 = uVar7 - 0x10; } uVar7 = 0; } LAB_00058a18: uVar10 = uVar8; if (uVar8 != 0) { uVar10 = 1; } if (param_4 != 5 && uVar8 != 0) { return 2; } if ((uVar5 < 0x10) && (uVar2 = *param_1, (uVar2 & 1) != 0)) { *param_1 = uVar2 & 0xfffffffe; if (param_4 != 5) { *param_1 = uVar2 & 0xfffffffc; __gnu_Unwind_Save_VFP(param_1 + 0x12); goto LAB_00058a80; } *param_1 = uVar2 & 0xfffffffe | 2; __gnu_Unwind_Save_VFP_D(); if (uVar10 != 0) goto LAB_00058a88; LAB_00058a68: __gnu_Unwind_Save_VFP_D(auStack_ac + 1); LAB_00058ab4: if (uVar10 == 0) goto LAB_00058ac8; __gnu_Unwind_Save_VFP_D_16_to_31(auStack_128); } else { LAB_00058a80: if (uVar10 == 0) { if (uVar7 != 0) { __gnu_Unwind_Save_VFP(auStack_ac + 1); goto LAB_00058ac8; } if (0xf < uVar5) goto LAB_00058ac8; goto LAB_00058a68; } LAB_00058a88: if ((*param_1 & 4) != 0) { *param_1 = *param_1 & 0xfffffffb; __gnu_Unwind_Save_VFP_D_16_to_31(param_1 + 0x34); } if (uVar7 == 0) { if (uVar5 < 0x10) goto LAB_00058a68; goto LAB_00058ab4; } __gnu_Unwind_Save_VFP(auStack_ac + 1); } param_3 = 0x10 - uVar5; LAB_00058ac8: puVar6 = (undefined4 *)param_1[0xe]; if (0 < (int)param_3) { for (iVar4 = 0; iVar4 != param_3 * 2; iVar4 = iVar4 + 1) { auStack_ac[uVar5 * 2 + iVar4 + 1U] = puVar6[iVar4]; } puVar6 = puVar6 + iVar4; } if (uVar10 != 0) { uVar2 = uVar5; if (uVar5 < 0x10) { uVar2 = 0x10; } puVar3 = auStack_1ac + uVar2 * 2; puVar9 = puVar6 + uVar8 * 2; for (; puVar6 != puVar9; puVar6 = puVar6 + 1) { puVar3 = puVar3 + 1; *puVar3 = *puVar6; } } if (uVar7 != 0) { puVar6 = puVar6 + 1; } param_1[0xe] = (uint)puVar6; if (uVar7 == 0) { if (uVar5 < 0x10) { __gnu_Unwind_Restore_VFP_D(auStack_ac + 1); } if (uVar10 != 0) { __gnu_Unwind_Restore_VFP_D_16_to_31(auStack_128); } } else { __gnu_Unwind_Restore_VFP(auStack_ac + 1); } return 0; case 2: break; case 3: if (param_4 == 3) { if ((param_3 & 0xffff) + (param_3 >> 0x10) < 0x11) { if ((*param_1 & 8) != 0) { *param_1 = *param_1 & 0xfffffff7; __gnu_Unwind_Save_WMMXD(param_1 + 0x54); } __gnu_Unwind_Save_WMMXD(auStack_ac + 1); puVar6 = (undefined4 *)param_1[0xe]; puVar3 = auStack_ac + (param_3 >> 0x10) * 2; puVar9 = puVar6 + (param_3 & 0xffff) * 2; for (; puVar6 != puVar9; puVar6 = puVar6 + 1) { puVar3 = puVar3 + 1; *puVar3 = *puVar6; } param_1[0xe] = (uint)puVar6; __gnu_Unwind_Restore_WMMXD(auStack_ac + 1); return 0; } } break; case 4: bVar11 = param_3 == 0x10; if (param_3 < 0x11) { bVar11 = param_4 == 0; } if (bVar11) { if ((*param_1 & 0x10) != 0) { *param_1 = *param_1 & 0xffffffef; __gnu_Unwind_Save_WMMXC(param_1 + 0x74); } puVar6 = auStack_ac + 1; __gnu_Unwind_Save_WMMXC(puVar6); puVar3 = (undefined4 *)param_1[0xe]; uVar5 = 0; do { bVar11 = (param_3 & 1 << (uVar5 & 0xff)) != 0; if (bVar11) { puVar6[uVar5] = *puVar3; } uVar5 = uVar5 + 1; if (bVar11) { puVar3 = puVar3 + 1; } } while (uVar5 != 4); param_1[0xe] = (uint)puVar3; __gnu_Unwind_Restore_WMMXC(puVar6); return 0; } } return 2; } ### FUNC restore_core_regs @ 00058cb0 undefined8 restore_core_regs(undefined8 *param_1) { return *param_1; } ### FUNC __gnu_Unwind_Restore_VFP @ 00058cc4 undefined8 __gnu_Unwind_Restore_VFP(undefined8 *param_1) { return *param_1; } ### FUNC __gnu_Unwind_Save_VFP @ 00058ccc void __gnu_Unwind_Save_VFP(undefined8 *param_1) { undefined8 in_d0; undefined8 in_d1; undefined8 in_d2; undefined8 in_d3; undefined8 in_d4; undefined8 in_d5; undefined8 in_d6; undefined8 in_d7; undefined8 unaff_d8; undefined8 unaff_d9; undefined8 unaff_d10; undefined8 unaff_d11; undefined8 unaff_d12; undefined8 unaff_d13; undefined8 unaff_d14; undefined8 unaff_d15; *param_1 = in_d0; param_1[1] = in_d1; param_1[2] = in_d2; param_1[3] = in_d3; param_1[4] = in_d4; param_1[5] = in_d5; param_1[6] = in_d6; param_1[7] = in_d7; param_1[8] = unaff_d8; param_1[9] = unaff_d9; param_1[10] = unaff_d10; param_1[0xb] = unaff_d11; param_1[0xc] = unaff_d12; param_1[0xd] = unaff_d13; param_1[0xe] = unaff_d14; param_1[0xf] = unaff_d15; return; } ### FUNC __gnu_Unwind_Restore_VFP_D @ 00058cd4 undefined8 __gnu_Unwind_Restore_VFP_D(undefined8 *param_1) { return *param_1; } ### FUNC __gnu_Unwind_Save_VFP_D @ 00058cdc void __gnu_Unwind_Save_VFP_D(undefined8 *param_1) { undefined8 in_d0; undefined8 in_d1; undefined8 in_d2; undefined8 in_d3; undefined8 in_d4; undefined8 in_d5; undefined8 in_d6; undefined8 in_d7; undefined8 unaff_d8; undefined8 unaff_d9; undefined8 unaff_d10; undefined8 unaff_d11; undefined8 unaff_d12; undefined8 unaff_d13; undefined8 unaff_d14; undefined8 unaff_d15; *param_1 = in_d0; param_1[1] = in_d1; param_1[2] = in_d2; param_1[3] = in_d3; param_1[4] = in_d4; param_1[5] = in_d5; param_1[6] = in_d6; param_1[7] = in_d7; param_1[8] = unaff_d8; param_1[9] = unaff_d9; param_1[10] = unaff_d10; param_1[0xb] = unaff_d11; param_1[0xc] = unaff_d12; param_1[0xd] = unaff_d13; param_1[0xe] = unaff_d14; param_1[0xf] = unaff_d15; return; } ### FUNC __gnu_Unwind_Restore_VFP_D_16_to_31 @ 00058ce4 void __gnu_Unwind_Restore_VFP_D_16_to_31(void) { return; } ### FUNC __gnu_Unwind_Save_VFP_D_16_to_31 @ 00058cec void __gnu_Unwind_Save_VFP_D_16_to_31(undefined8 *param_1) { undefined8 in_d16; undefined8 in_d17; undefined8 in_d18; undefined8 in_d19; undefined8 in_d20; undefined8 in_d21; undefined8 in_d22; undefined8 in_d23; undefined8 in_d24; undefined8 in_d25; undefined8 in_d26; undefined8 in_d27; undefined8 in_d28; undefined8 in_d29; undefined8 in_d30; undefined8 in_d31; *param_1 = in_d16; param_1[1] = in_d17; param_1[2] = in_d18; param_1[3] = in_d19; param_1[4] = in_d20; param_1[5] = in_d21; param_1[6] = in_d22; param_1[7] = in_d23; param_1[8] = in_d24; param_1[9] = in_d25; param_1[10] = in_d26; param_1[0xb] = in_d27; param_1[0xc] = in_d28; param_1[0xd] = in_d29; param_1[0xe] = in_d30; param_1[0xf] = in_d31; return; } ### FUNC __gnu_Unwind_Restore_WMMXD @ 00058cf4 int __gnu_Unwind_Restore_WMMXD(int param_1) { undefined4 in_cr0; undefined4 in_cr1; undefined4 in_cr2; undefined4 in_cr3; undefined4 in_cr4; undefined4 in_cr5; undefined4 in_cr6; undefined4 in_cr7; undefined4 in_cr8; undefined4 in_cr9; undefined4 in_cr10; undefined4 in_cr11; undefined4 in_cr12; undefined4 in_cr13; undefined4 in_cr14; undefined4 in_cr15; coprocessor_loadlong(1,in_cr0,param_1); coprocessor_loadlong(1,in_cr1,param_1 + 8); coprocessor_loadlong(1,in_cr2,param_1 + 0x10); coprocessor_loadlong(1,in_cr3,param_1 + 0x18); coprocessor_loadlong(1,in_cr4,param_1 + 0x20); coprocessor_loadlong(1,in_cr5,param_1 + 0x28); coprocessor_loadlong(1,in_cr6,param_1 + 0x30); coprocessor_loadlong(1,in_cr7,param_1 + 0x38); coprocessor_loadlong(1,in_cr8,param_1 + 0x40); coprocessor_loadlong(1,in_cr9,param_1 + 0x48); coprocessor_loadlong(1,in_cr10,param_1 + 0x50); coprocessor_loadlong(1,in_cr11,param_1 + 0x58); coprocessor_loadlong(1,in_cr12,param_1 + 0x60); coprocessor_loadlong(1,in_cr13,param_1 + 0x68); coprocessor_loadlong(1,in_cr14,param_1 + 0x70); coprocessor_loadlong(1,in_cr15,param_1 + 0x78); return param_1 + 0x80; } ### FUNC __gnu_Unwind_Save_WMMXD @ 00058d38 int __gnu_Unwind_Save_WMMXD(int param_1) { undefined4 in_cr0; undefined4 in_cr1; undefined4 in_cr2; undefined4 in_cr3; undefined4 in_cr4; undefined4 in_cr5; undefined4 in_cr6; undefined4 in_cr7; undefined4 in_cr8; undefined4 in_cr9; undefined4 in_cr10; undefined4 in_cr11; undefined4 in_cr12; undefined4 in_cr13; undefined4 in_cr14; undefined4 in_cr15; coprocessor_storelong(1,in_cr0,param_1); coprocessor_storelong(1,in_cr1,param_1 + 8); coprocessor_storelong(1,in_cr2,param_1 + 0x10); coprocessor_storelong(1,in_cr3,param_1 + 0x18); coprocessor_storelong(1,in_cr4,param_1 + 0x20); coprocessor_storelong(1,in_cr5,param_1 + 0x28); coprocessor_storelong(1,in_cr6,param_1 + 0x30); coprocessor_storelong(1,in_cr7,param_1 + 0x38); coprocessor_storelong(1,in_cr8,param_1 + 0x40); coprocessor_storelong(1,in_cr9,param_1 + 0x48); coprocessor_storelong(1,in_cr10,param_1 + 0x50); coprocessor_storelong(1,in_cr11,param_1 + 0x58); coprocessor_storelong(1,in_cr12,param_1 + 0x60); coprocessor_storelong(1,in_cr13,param_1 + 0x68); coprocessor_storelong(1,in_cr14,param_1 + 0x70); coprocessor_storelong(1,in_cr15,param_1 + 0x78); return param_1 + 0x80; } ### FUNC __gnu_Unwind_Restore_WMMXC @ 00058d7c int __gnu_Unwind_Restore_WMMXC(int param_1) { undefined4 in_cr8; undefined4 in_cr9; undefined4 in_cr10; undefined4 in_cr11; coprocessor_load2(1,in_cr8,param_1); coprocessor_load2(1,in_cr9,param_1 + 4); coprocessor_load2(1,in_cr10,param_1 + 8); coprocessor_load2(1,in_cr11,param_1 + 0xc); return param_1 + 0x10; } ### FUNC __gnu_Unwind_Save_WMMXC @ 00058d90 int __gnu_Unwind_Save_WMMXC(int param_1) { undefined4 in_cr8; undefined4 in_cr9; undefined4 in_cr10; undefined4 in_cr11; coprocessor_store2(1,in_cr8,param_1); coprocessor_store2(1,in_cr9,param_1 + 4); coprocessor_store2(1,in_cr10,param_1 + 8); coprocessor_store2(1,in_cr11,param_1 + 0xc); return param_1 + 0x10; } ### FUNC ___Unwind_RaiseException @ 00058da4 void ___Unwind_RaiseException (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 uStack_44; undefined4 uStack_40; undefined4 uStack_3c; undefined4 uStack_38; undefined4 uStack_34; uStack_44 = 0; uStack_40 = param_1; uStack_3c = param_2; uStack_38 = param_3; uStack_34 = param_4; __gnu_Unwind_RaiseException(param_1,&uStack_44,param_3,0,param_3); return; } ### FUNC ___Unwind_Resume @ 00058dc8 void ___Unwind_Resume(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 uStack_44; undefined4 uStack_40; undefined4 uStack_3c; undefined4 uStack_38; undefined4 uStack_34; uStack_44 = 0; uStack_40 = param_1; uStack_3c = param_2; uStack_38 = param_3; uStack_34 = param_4; __gnu_Unwind_Resume(param_1,&uStack_44,param_3,0,param_3); return; } ### FUNC _Unwind_Resume_or_Rethrow @ 00058dec void _Unwind_Resume_or_Rethrow (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 uStack_44; undefined4 uStack_40; undefined4 uStack_3c; undefined4 uStack_38; undefined4 uStack_34; uStack_44 = 0; uStack_40 = param_1; uStack_3c = param_2; uStack_38 = param_3; uStack_34 = param_4; __gnu_Unwind_Resume_or_Rethrow(param_1,&uStack_44,param_3,0,param_3); return; } ### FUNC _Unwind_ForcedUnwind @ 00058e10 void _Unwind_ForcedUnwind(void) { __gnu_Unwind_ForcedUnwind(); return; } ### FUNC _Unwind_Backtrace @ 00058e34 void _Unwind_Backtrace(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 uStack_44; undefined4 uStack_40; undefined4 uStack_3c; undefined4 uStack_38; undefined4 uStack_34; uStack_44 = 0; uStack_40 = param_1; uStack_3c = param_2; uStack_38 = param_3; uStack_34 = param_4; __gnu_Unwind_Backtrace(param_1,param_2,&uStack_44,0,param_3); return; } ### FUNC FUN_00058e58 @ 00058e58 uint FUN_00058e58(uint *param_1) { char cVar1; uint uVar2; if ((char)param_1[2] == '\0') { if (*(char *)((int)param_1 + 9) == '\0') { return 0xb0; } *(char *)((int)param_1 + 9) = *(char *)((int)param_1 + 9) + -1; *param_1 = *(uint *)param_1[1]; param_1[1] = (uint)((uint *)param_1[1] + 1); cVar1 = '\x03'; } else { cVar1 = (char)param_1[2] + -1; } *(char *)(param_1 + 2) = cVar1; uVar2 = *param_1; *param_1 = uVar2 << 8; return uVar2 >> 0x18; } ### FUNC FUN_00058eb8 @ 00058eb8 undefined4 FUN_00058eb8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { undefined4 local_c; local_c = param_4; _Unwind_VRS_Get(param_1,0,0xc,0,&local_c,param_2,param_3); return local_c; } ### FUNC __gnu_unwind_execute @ 00058ee4 undefined4 __gnu_unwind_execute(int *param_1,undefined4 param_2,undefined4 param_3,int param_4) { uint uVar1; undefined4 uVar2; uint uVar3; undefined4 uVar4; bool bVar5; int iVar6; int *piVar7; undefined4 uVar8; int local_24; bVar5 = false; piVar7 = param_1; uVar8 = param_2; local_24 = param_4; LAB_00058efc: do { while( true ) { uVar1 = FUN_00058e58(param_2); if (uVar1 == 0xb0) { if (!bVar5) { _Unwind_VRS_Get(param_1,0,0xe,0,&local_24,uVar8,param_3); _Unwind_VRS_Set(param_1,0,0xf,0,&local_24); } return 0; } if ((uVar1 & 0x80) != 0) break; _Unwind_VRS_Get(param_1,0,0xd,0,&local_24,uVar8,param_3); iVar6 = (uVar1 & 0x3f) * 4 + 4; if ((uVar1 & 0x40) != 0) { iVar6 = -iVar6; } local_24 = local_24 + iVar6; LAB_00059024: piVar7 = &local_24; _Unwind_VRS_Set(param_1,0,0xd,0); } uVar3 = uVar1 & 0xf0; if (uVar3 == 0x80) { uVar3 = FUN_00058e58(param_2); uVar3 = uVar3 | uVar1 << 8; if (uVar3 == 0x8000) { return 9; } iVar6 = _Unwind_VRS_Pop(param_1,0,(uVar3 << 0x14) >> 0x10,0,piVar7); if (iVar6 != 0) { return 9; } if ((uVar3 & 0x800) != 0) { bVar5 = true; } goto LAB_00058efc; } if (uVar3 == 0x90) { if ((uVar1 & 0xd) == 0xd) { return 9; } _Unwind_VRS_Get(param_1,0,uVar1 & 0xf,0,&local_24,uVar8,param_3); goto LAB_00059024; } if (uVar3 == 0xa0) { uVar3 = 0xff0 >> (~uVar1 & 7) & 0xff0; if ((uVar1 & 8) != 0) { uVar3 = uVar3 | 0x4000; } uVar2 = 0; uVar4 = uVar2; } else if (uVar3 == 0xb0) { if (uVar1 == 0xb1) { uVar3 = FUN_00058e58(param_2); if (uVar3 == 0) { return 9; } if ((uVar3 & 0xf0) != 0) { return 9; } uVar2 = 0; uVar4 = uVar2; } else { if (uVar1 == 0xb2) { _Unwind_VRS_Get(param_1,0,0xd,0,&local_24,uVar8,param_3); uVar1 = FUN_00058e58(param_2); uVar3 = 2; while ((uVar1 & 0x80) != 0) { local_24 = local_24 + ((uVar1 & 0x7f) << (uVar3 & 0xff)); uVar3 = uVar3 + 7; uVar1 = FUN_00058e58(param_2); } local_24 = local_24 + 0x204 + ((uVar1 & 0x7f) << (uVar3 & 0xff)); goto LAB_00059024; } if (uVar1 == 0xb3) { uVar1 = FUN_00058e58(param_2); uVar2 = 1; goto LAB_00059178; } if ((uVar1 & 0xfc) == 0xb4) { return 9; } uVar2 = 1; uVar3 = (uVar1 & 7) + 1 | 0x80000; uVar4 = uVar2; } } else if (uVar3 == 0xc0) { if (uVar1 == 0xc6) { uVar1 = FUN_00058e58(param_2); uVar2 = 3; LAB_00059178: uVar3 = (uVar1 & 0xf) + 1 | (uVar1 & 0xf0) << 0xc; uVar4 = uVar2; } else if (uVar1 == 199) { uVar3 = FUN_00058e58(param_2); if (uVar3 == 0) { return 9; } if ((uVar3 & 0xf0) != 0) { return 9; } uVar2 = 4; uVar4 = 0; } else { if ((uVar1 & 0xf8) != 0xc0) { if (uVar1 == 200) { uVar1 = FUN_00058e58(param_2); uVar3 = (uVar1 & 0xf) + 1 | ((uVar1 & 0xf0) + 0x10) * 0x1000; } else { if (uVar1 != 0xc9) { return 9; } uVar1 = FUN_00058e58(param_2); uVar3 = (uVar1 & 0xf) + 1 | (uVar1 & 0xf0) << 0xc; } goto LAB_0005924c; } uVar2 = 3; uVar3 = (uVar1 & 0xf) + 1 | 0xa0000; uVar4 = uVar2; } } else { if ((uVar1 & 0xf8) != 0xd0) { return 9; } uVar3 = (uVar1 & 7) + 1 | 0x80000; LAB_0005924c: uVar2 = 1; uVar4 = 5; } iVar6 = _Unwind_VRS_Pop(param_1,uVar2,uVar3,uVar4,piVar7); if (iVar6 != 0) { return 9; } } while( true ); } ### FUNC __gnu_unwind_frame @ 0005926c void __gnu_unwind_frame(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { int iVar1; int local_14; int local_10; undefined1 local_c; undefined1 local_b; undefined2 uStack_a; iVar1 = *(int *)(param_1 + 0x4c); local_14 = *(int *)(iVar1 + 4) << 8; local_10 = iVar1 + 8; uStack_a = (undefined2)((uint)param_4 >> 0x10); _local_c = CONCAT11(*(undefined1 *)(iVar1 + 7),3); __gnu_unwind_execute(param_2,&local_14,3,*(undefined1 *)(iVar1 + 7),param_1); return; } ### FUNC _Unwind_GetRegionStart @ 000592ac undefined4 _Unwind_GetRegionStart(void) { int iVar1; iVar1 = thunk_FUN_00058eb8(); return *(undefined4 *)(iVar1 + 0x48); } ### FUNC _Unwind_GetLanguageSpecificData @ 000592bc int _Unwind_GetLanguageSpecificData(void) { int iVar1; iVar1 = thunk_FUN_00058eb8(); return *(int *)(iVar1 + 0x4c) + (uint)*(byte *)(*(int *)(iVar1 + 0x4c) + 7) * 4 + 8; } ### FUNC _Unwind_GetDataRelBase @ 000592d8 void _Unwind_GetDataRelBase(void) { /* WARNING: Subroutine does not return */ abort(); } ### FUNC _Unwind_GetTextRelBase @ 000592e0 void _Unwind_GetTextRelBase(void) { /* WARNING: Subroutine does not return */ abort(); } ### FUNC __divdi3 @ 000592e8 undefined8 __divdi3(uint param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; uint uVar2; int iVar3; uint uVar4; int iVar5; uint uVar6; uint uVar7; bool bVar8; bool bVar9; undefined8 uVar10; longlong lVar11; int iVar12; if ((int)param_2 < 0) { uVar4 = -param_1; param_2 = -(param_2 + (param_1 != 0)); uVar6 = 0xffffffff; } else { uVar6 = 0; uVar4 = param_1; } uVar7 = param_3; if ((int)param_4 < 0) { uVar7 = -param_3; param_4 = -(param_4 + (param_3 != 0)); uVar6 = ~uVar6; } bVar9 = param_2 <= param_4; bVar8 = param_4 != param_2; if (!bVar8) { bVar9 = uVar4 <= uVar7; } uVar2 = param_4; uVar1 = uVar7; if (bVar9 && (bVar8 || uVar7 != uVar4)) { uVar1 = 0; uVar2 = 0; } lVar11 = CONCAT44(uVar2,uVar1); if (!bVar9 || !bVar8 && uVar7 == uVar4) { if (param_4 == 0) { iVar5 = LZCOUNT(uVar7) + 0x20; } else { iVar5 = LZCOUNT(param_4); } if (param_2 == 0) { iVar3 = LZCOUNT(uVar4) + 0x20; } else { iVar3 = LZCOUNT(param_2); } iVar5 = iVar5 - iVar3; iVar12 = iVar5; uVar10 = __ashldi3(uVar7,param_4,iVar5,iVar3,param_1,iVar5,param_3); uVar7 = (uint)((ulonglong)uVar10 >> 0x20); uVar1 = (uint)uVar10; bVar9 = uVar7 <= param_2; if (param_2 == uVar7) { bVar9 = uVar1 <= uVar4; } if (bVar9) { bVar9 = uVar4 < uVar1; uVar4 = uVar4 - uVar1; param_2 = param_2 - (uVar7 + bVar9); lVar11 = __ashldi3(1,0,iVar5); } else { lVar11 = 0; } if (iVar5 != 0) { uVar7 = uVar7 >> 1; uVar1 = (uint)((byte)((ulonglong)uVar10 >> 0x20) & 1) << 0x1f | uVar1 >> 1; do { uVar2 = uVar4 - uVar1; iVar3 = param_2 - (uVar7 + (uVar4 < uVar1)); bVar9 = uVar7 <= param_2; if (param_2 == uVar7) { bVar9 = uVar1 <= uVar4; } param_2 = param_2 * 2 + (uint)CARRY4(uVar4,uVar4); uVar4 = uVar4 * 2; if (bVar9) { param_2 = iVar3 * 2 + (uint)CARRY4(uVar2,uVar2) + (uint)(0xfffffffe < uVar2 * 2); uVar4 = uVar2 * 2 + 1; } iVar5 = iVar5 + -1; } while (iVar5 != 0); lVar11 = lVar11 + CONCAT44(param_2,uVar4); uVar7 = (uint)lVar11; uVar10 = __lshrdi3(uVar4,param_2,iVar12); uVar10 = __ashldi3((int)uVar10,(int)((ulonglong)uVar10 >> 0x20),iVar12); lVar11 = CONCAT44((int)((ulonglong)lVar11 >> 0x20) - ((int)((ulonglong)uVar10 >> 0x20) + (uint)(uVar7 < (uint)uVar10)), uVar7 - (uint)uVar10); } } if (uVar6 != 0) { uVar6 = 1; } uVar4 = (uint)lVar11 ^ -uVar6; return CONCAT44(((uint)((ulonglong)lVar11 >> 0x20) ^ -(uint)(uVar6 != 0)) + (uint)CARRY4(uVar4,uVar6),uVar4 + uVar6); } ### FUNC __udivdi3 @ 00059468 int __udivdi3(uint param_1,uint param_2,uint param_3,uint param_4) { uint uVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; int iVar6; int iVar7; uint uVar8; bool bVar9; bool bVar10; undefined8 uVar11; bVar9 = param_2 <= param_4; if (param_4 == param_2) { bVar9 = param_1 <= param_3; } if (bVar9 && (param_4 != param_2 || param_3 != param_1)) { return 0; } if (param_4 == 0) { iVar6 = LZCOUNT(param_3) + 0x20; } else { iVar6 = LZCOUNT(param_4); } if (param_2 == 0) { iVar4 = LZCOUNT(param_1) + 0x20; } else { iVar4 = LZCOUNT(param_2); } iVar6 = iVar6 - iVar4; uVar11 = __ashldi3(param_3,param_4,iVar6,param_4,param_4); uVar5 = (uint)((ulonglong)uVar11 >> 0x20); uVar3 = (uint)uVar11; bVar9 = uVar5 <= param_2; if (param_2 == uVar5) { bVar9 = uVar3 <= param_1; } if (bVar9) { bVar9 = param_1 < uVar3; param_1 = param_1 - uVar3; param_2 = param_2 - (uVar5 + bVar9); iVar4 = __ashldi3(1,0,iVar6); } else { iVar4 = 0; } if (iVar6 != 0) { uVar5 = uVar5 >> 1; uVar3 = (uint)((byte)((ulonglong)uVar11 >> 0x20) & 1) << 0x1f | uVar3 >> 1; iVar7 = iVar6; do { uVar8 = param_1 - uVar3; bVar10 = CARRY4(param_1,param_1); uVar1 = param_1 * 2; iVar2 = param_2 * 2; bVar9 = uVar5 <= param_2; if (param_2 == uVar5) { bVar9 = uVar3 <= param_1; } param_2 = (param_2 - (uVar5 + (param_1 < uVar3))) * 2 + (uint)CARRY4(uVar8,uVar8) + (uint)(0xfffffffe < uVar8 * 2); param_1 = uVar8 * 2 + 1; if (!bVar9) { param_2 = iVar2 + (uint)bVar10; param_1 = uVar1; } iVar7 = iVar7 + -1; } while (iVar7 != 0); uVar11 = __lshrdi3(param_1,param_2,iVar6); iVar6 = __ashldi3((int)uVar11,(int)((ulonglong)uVar11 >> 0x20),iVar6); return (param_1 + iVar4) - iVar6; } return iVar4; } ### FUNC __lshrdi3 @ 00059574 undefined8 __lshrdi3(uint param_1,uint param_2,uint param_3) { uint uVar1; if ((int)(param_3 - 0x20) < 0) { uVar1 = param_1 >> (param_3 & 0xff) | param_2 << (0x20 - param_3 & 0xff); } else { uVar1 = param_2 >> (param_3 - 0x20 & 0xff); } return CONCAT44(param_2 >> (param_3 & 0xff),uVar1); } ### FUNC __ashldi3 @ 00059590 undefined8 __ashldi3(uint param_1,int param_2,uint param_3) { uint uVar1; if ((int)(param_3 - 0x20) < 0) { uVar1 = param_2 << (param_3 & 0xff) | param_1 >> (0x20 - param_3 & 0xff); } else { uVar1 = param_1 << (param_3 - 0x20 & 0xff); } return CONCAT44(uVar1,param_1 << (param_3 & 0xff)); }