acdream/docs/research/decompiled/chunk_00660000.c
Erik 4d36756b91 research: full acclient.exe decompilation — 22,225 functions, 688K lines
Complete decompilation of the retail Asheron's Call client using
Ghidra 12.0.4 + pyghidra headless. 22,225 of 22,226 functions
successfully decompiled in 75 seconds.

Output: docs/research/decompiled/ (54 files, 688,567 lines of C)

Key findings already identified:
- CLandBlockStruct::ConstructPolygons at chunk_00530000.c:2270
  (split direction formula with 0x0CCAC033 constants)
- Motion command handlers at chunk_00510000.c (0x45000005 etc)
- Motion interpreter at chunk_00520000.c
- Portal space UI at chunk_004D0000.c and chunk_00560000.c

Next: identify CPhysicsObj, CMotionInterp, collision, and movement
functions by cross-referencing against ACE's C# port.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:25:51 +02:00

11520 lines
471 KiB
C

// Decompiled from acclient.exe — chunk 0x00660000
// Ghidra 12.0.4 + pyghidra headless
// --- FUN_00660090 at 0x00660090 (size: 82) ---
int __thiscall FUN_00660090(int param_1,uint *param_2)
{
int iVar1;
uint uVar2;
uVar2 = *param_2 % *(uint *)(param_1 + 0x68);
iVar1 = *(int *)(*(int *)(param_1 + 0x60) + uVar2 * 4);
while( true ) {
if (iVar1 == 0) {
return 0;
}
if (*(uint *)(iVar1 + 4) == *param_2) break;
iVar1 = *(int *)(iVar1 + 8);
}
if (iVar1 == 0) {
return 0;
}
FUN_0065fc20(param_1,*(int *)(param_1 + 0x60) + uVar2 * 4,iVar1);
return iVar1;
}
// --- FUN_006600f0 at 0x006600F0 (size: 86) ---
undefined4 __thiscall FUN_006600f0(int param_1,undefined4 param_2)
{
undefined4 uVar1;
undefined4 uVar2;
undefined1 local_c [8];
int local_4;
uVar2 = param_2;
FUN_0065ed80(local_c,param_2);
if (local_4 != 0) {
return *(undefined4 *)(local_4 + 8);
}
uVar1 = *(undefined4 *)(param_1 + 0x168);
param_2 = uVar1;
FUN_0065fff0(uVar2,&param_2);
return uVar1;
}
// --- FUN_00660150 at 0x00660150 (size: 82) ---
undefined4 * __thiscall FUN_00660150(undefined4 *param_1,byte param_2)
{
*param_1 = &PTR_FUN_007feb54;
FUN_00409e20();
param_1[1] = &PTR_FUN_007feb2c;
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
operator_delete__((undefined4 *)param_1[0x19]);
}
param_1[0x19] = 0;
param_1[0x1a] = 0;
param_1[0x1b] = 0;
param_1[0x1c] = 0;
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_006601b0 at 0x006601B0 (size: 95) ---
int __thiscall FUN_006601b0(int param_1,uint *param_2)
{
int iVar1;
int iVar2;
iVar2 = *(int *)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
if (iVar2 != 0) {
while (*(uint *)(iVar2 + 4) != *param_2) {
iVar2 = *(int *)(iVar2 + 8);
if (iVar2 == 0) {
return 0;
}
}
if (iVar2 != 0) {
if (iVar2 == -4) {
iVar1 = 0;
}
else {
iVar1 = iVar2 + 0xc;
}
FUN_00410880(iVar1);
FUN_00660090(param_2);
}
}
return iVar2;
}
// --- FUN_00660210 at 0x00660210 (size: 8) ---
void FUN_00660210(void)
{
FUN_006600f0();
return;
}
// --- FUN_00660220 at 0x00660220 (size: 117) ---
undefined4 * __fastcall FUN_00660220(undefined4 *param_1)
{
undefined4 uVar1;
*param_1 = &PTR_FUN_007feb58;
FUN_0065f2a0(0);
param_1[0x1d] = 0;
param_1[0x1e] = 0;
FUN_0065f340(0);
param_1[0x3c] = 0;
param_1[0x3d] = 0;
param_1[0x3e] = &PTR_FUN_007feb54;
FUN_0065f3e0(0);
param_1[0x3e] = &PTR_FUN_007feb54;
param_1[0x5b] = 1;
param_1[0x5c] = 0;
uVar1 = FUN_0040fca0();
FUN_0065eb70(uVar1);
return param_1;
}
// --- FUN_006602c0 at 0x006602C0 (size: 531) ---
void __fastcall FUN_006602c0(undefined4 *param_1)
{
uint uVar1;
undefined4 *puVar2;
int iVar3;
int *piVar4;
int iVar5;
int *piVar6;
int iVar7;
uint uVar8;
int *piVar9;
*param_1 = &PTR_FUN_007feb58;
if ((param_1[0x3b] != 0) && (param_1[0x3c] != 0)) {
iVar5 = param_1[0x3c] + -0x10;
while (iVar5 != 0) {
uVar1 = *(uint *)(iVar5 + 8);
for (iVar5 = *(int *)(param_1[0x38] + (uVar1 % (uint)param_1[0x3a]) * 4); iVar5 != 0;
iVar5 = *(int *)(iVar5 + 0xc)) {
if (*(uint *)(iVar5 + 8) == uVar1) {
if (iVar5 != 0) {
FUN_0065fe70(uVar1,4);
}
break;
}
}
iVar5 = 0;
if (param_1[0x3b] != 0) {
if (param_1[0x3c] == 0) {
iVar5 = 0;
}
else {
iVar5 = param_1[0x3c] + -0x10;
}
}
}
}
if ((param_1[0x1c] != 0) && (param_1[0x1d] != 0)) {
piVar4 = (int *)(param_1[0x1d] + -0xc);
joined_r0x0066035d:
if (piVar4 != (int *)0x0) {
piVar4[5] = 0;
(**(code **)(*piVar4 + 0x1c))();
iVar5 = piVar4[3];
if ((iVar5 == 0) || (iVar5 == 8)) {
piVar9 = (int *)0x0;
}
else {
piVar9 = (int *)(iVar5 + -0xc);
}
if ((uint *)(piVar4 + 1) == (uint *)0x0) {
piVar6 = (int *)0x0;
}
else {
piVar6 = piVar4 + 3;
}
if ((int *)piVar6[1] == (int *)0x0) {
iVar5 = *(int *)param_1[0x1d];
param_1[0x1d] = iVar5;
if (iVar5 != 0) {
*(undefined4 *)(iVar5 + 4) = 0;
}
}
else {
*(int *)piVar6[1] = *piVar6;
}
if (*piVar6 == 0) {
puVar2 = *(undefined4 **)(param_1[0x1e] + 4);
param_1[0x1e] = puVar2;
if (puVar2 != (undefined4 *)0x0) {
*puVar2 = 0;
}
}
else {
*(int *)(*piVar6 + 4) = piVar6[1];
}
*piVar6 = 0;
piVar6[1] = 0;
uVar1 = piVar4[1];
uVar8 = uVar1 % (uint)param_1[0x1b];
iVar5 = *(int *)(param_1[0x19] + uVar8 * 4);
for (iVar3 = iVar5; piVar4 = piVar9, iVar3 != 0; iVar3 = *(int *)(iVar3 + 8)) {
if (*(uint *)(iVar3 + 4) == uVar1) {
if (iVar3 != 0) {
if (iVar5 != iVar3) goto LAB_00660406;
goto LAB_00660413;
}
break;
}
}
goto joined_r0x0066035d;
}
}
param_1[0x3e] = &PTR_FUN_007feb54;
FUN_00409e20();
param_1[0x3f] = &PTR_FUN_007feb2c;
if ((undefined4 *)param_1[0x57] != param_1 + 0x40) {
operator_delete__((undefined4 *)param_1[0x57]);
}
param_1[0x57] = 0;
param_1[0x58] = 0;
param_1[0x59] = 0;
param_1[0x5a] = 0;
param_1[0x20] = &PTR_FUN_007feb28;
if ((undefined4 *)param_1[0x38] != param_1 + 0x21) {
operator_delete__((undefined4 *)param_1[0x38]);
}
param_1[0x38] = 0;
param_1[0x39] = 0;
param_1[0x3a] = 0;
param_1[0x3b] = 0;
param_1[1] = &PTR_FUN_007feb24;
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
operator_delete__((undefined4 *)param_1[0x19]);
}
param_1[0x19] = 0;
param_1[0x1a] = 0;
param_1[0x1b] = 0;
param_1[0x1c] = 0;
return;
LAB_00660406:
do {
iVar7 = iVar5;
iVar5 = *(int *)(iVar7 + 8);
} while (iVar5 != iVar3);
if (iVar7 == 0) {
LAB_00660413:
*(undefined4 *)(param_1[0x19] + uVar8 * 4) = *(undefined4 *)(iVar5 + 8);
}
else {
*(undefined4 *)(iVar7 + 8) = *(undefined4 *)(iVar5 + 8);
}
param_1[0x1c] = param_1[0x1c] + -1;
goto joined_r0x0066035d;
}
// --- FUN_006604e0 at 0x006604E0 (size: 202) ---
undefined4 __thiscall FUN_006604e0(int param_1,uint param_2)
{
int *piVar1;
int iVar2;
int iVar3;
piVar1 = *(int **)(*(int *)(param_1 + 100) + (param_2 % *(uint *)(param_1 + 0x6c)) * 4);
while( true ) {
if (piVar1 == (int *)0x0) {
return 0;
}
if (piVar1[1] == param_2) break;
piVar1 = (int *)piVar1[2];
}
if (piVar1 == (int *)0x0) {
return 0;
}
if (((*(int *)(param_1 + 0xec) != 0) && (*(int *)(param_1 + 0xec) != 0)) &&
(*(int *)(param_1 + 0xf0) != 0)) {
iVar3 = *(int *)(param_1 + 0xf0) + -0x10;
while (iVar2 = iVar3, iVar2 != 0) {
iVar3 = *(int *)(iVar2 + 0x10);
if ((iVar3 == 0) || (iVar3 == 8)) {
iVar3 = 0;
}
else {
iVar3 = iVar3 + -0x10;
}
if (*(int **)(iVar2 + 0x30) == piVar1) {
FUN_0065fe70(*(undefined4 *)(iVar2 + 8),5);
}
}
}
piVar1[5] = 0;
(**(code **)(*piVar1 + 0x1c))();
FUN_006601b0(&param_2);
return 1;
}
// --- FUN_006605b0 at 0x006605B0 (size: 34) ---
void __fastcall FUN_006605b0(undefined4 *param_1)
{
*param_1 = &PTR_FUN_007feb30;
if (param_1[5] != 0) {
FUN_006604e0(param_1[1]);
}
param_1[5] = 0;
return;
}
// --- FUN_006605e0 at 0x006605E0 (size: 30) ---
void * __thiscall FUN_006605e0(void *param_1,byte param_2)
{
FUN_006602c0();
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_00660600 at 0x00660600 (size: 54) ---
undefined4 * __thiscall FUN_00660600(undefined4 *param_1,byte param_2)
{
*param_1 = &PTR_FUN_007feb30;
if (param_1[5] != 0) {
FUN_006604e0(param_1[1]);
}
param_1[5] = 0;
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_00660640 at 0x00660640 (size: 96) ---
int FUN_00660640(byte *param_1,uint param_2)
{
byte *pbVar1;
byte bVar2;
char cVar3;
int iVar4;
int iVar5;
if (param_1 != (byte *)0x0) {
iVar5 = param_2 << 0x10;
for (pbVar1 = param_1; pbVar1 < param_1 + (param_2 & 0xfffffffc); pbVar1 = pbVar1 + 4) {
iVar5 = iVar5 + *(int *)pbVar1;
}
iVar4 = 0;
cVar3 = '\x03';
for (; pbVar1 < param_1 + param_2; pbVar1 = pbVar1 + 1) {
bVar2 = cVar3 * '\b';
cVar3 = cVar3 + -1;
iVar4 = iVar4 + ((uint)*pbVar1 << (bVar2 & 0x1f));
}
return iVar4 + iVar5;
}
return 0;
}
// --- FUN_006606a0 at 0x006606A0 (size: 25) ---
void __fastcall FUN_006606a0(int param_1)
{
if (*(undefined4 **)(param_1 + 8) != (undefined4 *)0x0) {
(**(code **)**(undefined4 **)(param_1 + 8))(1);
}
*(undefined4 *)(param_1 + 8) = 0;
return;
}
// --- FUN_00660770 at 0x00660770 (size: 26) ---
void __fastcall FUN_00660770(int param_1)
{
operator_delete__(*(void **)(param_1 + 4));
operator_delete__(*(void **)(param_1 + 8));
return;
}
// --- FUN_00660790 at 0x00660790 (size: 123) ---
int * __thiscall FUN_00660790(int *param_1,int param_2,int param_3,int param_4)
{
int iVar1;
*param_1 = (int)&PTR_FUN_007feb7c;
iVar1 = thunk_FUN_005df0f5(0x400);
param_1[2] = iVar1;
iVar1 = thunk_FUN_005df0f5(0x400);
param_1[3] = iVar1;
iVar1 = 0;
do {
*(undefined4 *)(iVar1 + param_1[2]) = 0;
*(undefined4 *)(iVar1 + 4 + param_1[2]) = 0;
*(undefined4 *)(iVar1 + 8 + param_1[2]) = 0;
*(undefined4 *)(iVar1 + 0xc + param_1[2]) = 0;
iVar1 = iVar1 + 0x10;
} while (iVar1 < 0x400);
param_1[4] = param_2;
param_1[5] = param_3;
param_1[6] = param_4;
(**(code **)(*param_1 + 4))(param_1 + 1,1);
return param_1;
}
// --- FUN_00660810 at 0x00660810 (size: 673) ---
void __thiscall FUN_00660810(int *param_1,undefined4 *param_2,char param_3)
{
int iVar1;
int iVar2;
int *piVar3;
int *piVar4;
int local_2c;
int local_28;
int local_24;
int local_20;
int local_1c;
int local_18;
int local_14;
int local_10;
int local_c;
int local_8;
int local_4;
iVar2 = param_2[2];
iVar1 = param_2[1];
local_10 = -0x61c88647;
local_14 = -0x61c88647;
local_18 = -0x61c88647;
local_1c = -0x61c88647;
local_20 = -0x61c88647;
local_24 = -0x61c88647;
local_28 = -0x61c88647;
local_2c = -0x61c88647;
if (param_3 == '\0') {
param_2[3] = 0;
param_2[4] = 0;
param_2[5] = 0;
}
local_c = 4;
local_8 = iVar1;
local_4 = iVar2;
do {
(**(code **)(*param_1 + 0x10))
(&local_2c,&local_28,&local_24,&local_20,&local_1c,&local_18,&local_14,&local_10);
local_c = local_c + -1;
} while (local_c != 0);
if (param_3 == '\0') {
(**(code **)(*param_1 + 0x10))
(&local_2c,&local_28,&local_24,&local_20,&local_1c,&local_18,&local_14,&local_10);
*(int *)(iVar2 + 0x10) = local_2c;
*(int *)(iVar2 + 0x14) = local_28;
*(int *)(iVar2 + 0x18) = local_24;
*(int *)(iVar2 + 0x1c) = local_20;
*(int *)(iVar2 + 0x20) = local_1c;
*(int *)(iVar2 + 0x24) = local_18;
*(int *)(iVar2 + 0x28) = local_14;
*(int *)(iVar2 + 0x2c) = local_10;
}
else {
piVar4 = (int *)(iVar2 + 0xc);
piVar3 = (int *)(iVar1 + 8);
iVar2 = iVar2 - local_8;
_param_3 = 0x20;
do {
local_2c = local_2c + piVar3[-2];
local_28 = local_28 + piVar3[-1];
local_24 = local_24 + *piVar3;
local_20 = local_20 + piVar3[1];
local_1c = local_1c + piVar3[2];
local_18 = local_18 + piVar3[3];
local_14 = local_14 + piVar3[4];
local_10 = local_10 + piVar3[5];
(**(code **)(*param_1 + 0x10))
(&local_2c,&local_28,&local_24,&local_20,&local_1c,&local_18,&local_14,&local_10);
piVar4[-3] = local_2c;
piVar4[-2] = local_28;
*(int *)(iVar2 + (int)piVar3) = local_24;
*piVar4 = local_20;
piVar4[1] = local_1c;
piVar4[2] = local_18;
piVar4[3] = local_14;
piVar4[4] = local_10;
piVar3 = piVar3 + 8;
piVar4 = piVar4 + 8;
_param_3 = _param_3 + -1;
} while (_param_3 != 0);
piVar4 = (int *)(local_4 + 8);
iVar2 = 0x20;
do {
local_2c = local_2c + piVar4[-2];
local_28 = local_28 + piVar4[-1];
local_24 = local_24 + *piVar4;
local_20 = local_20 + piVar4[1];
local_1c = local_1c + piVar4[2];
local_18 = local_18 + piVar4[3];
local_14 = local_14 + piVar4[4];
local_10 = local_10 + piVar4[5];
(**(code **)(*param_1 + 0x10))
(&local_2c,&local_28,&local_24,&local_20,&local_1c,&local_18,&local_14,&local_10);
piVar4[-2] = local_2c;
piVar4[-1] = local_28;
*piVar4 = local_24;
piVar4[1] = local_20;
piVar4[2] = local_1c;
piVar4[3] = local_18;
piVar4[4] = local_14;
piVar4[5] = local_10;
piVar4 = piVar4 + 8;
iVar2 = iVar2 + -1;
} while (iVar2 != 0);
}
(**(code **)(*param_1 + 0xc))(param_2);
*param_2 = 0x100;
return;
}
// --- FUN_00660b80 at 0x00660B80 (size: 39) ---
undefined4 * __thiscall FUN_00660b80(undefined4 *param_1,byte param_2)
{
*param_1 = &PTR_FUN_007feb7c;
FUN_00660770();
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_00660bb0 at 0x00660BB0 (size: 70) ---
undefined4 * __thiscall FUN_00660bb0(undefined4 *param_1,undefined4 param_2)
{
int iVar1;
undefined4 uVar2;
*param_1 = 1;
param_1[1] = param_2;
param_1[2] = 0;
iVar1 = FUN_005df0f5(0x1c);
if (iVar1 != 0) {
uVar2 = param_1[1];
uVar2 = FUN_00660790(uVar2,uVar2,uVar2);
param_1[2] = uVar2;
return param_1;
}
param_1[2] = 0;
return param_1;
}
// --- FUN_00660c00 at 0x00660C00 (size: 653) ---
void FUN_00660c00(int param_1)
{
uint *puVar1;
uint *puVar2;
uint *puVar3;
int *piVar4;
uint uVar5;
uint uVar6;
int iVar7;
uint *puVar8;
uint uVar9;
int local_8;
puVar2 = *(uint **)(param_1 + 8);
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) + 1;
piVar4 = *(int **)(param_1 + 4);
uVar6 = *(uint *)(param_1 + 0xc);
local_8 = *(int *)(param_1 + 0x10) + *(int *)(param_1 + 0x14);
puVar1 = puVar2 + 0x80;
puVar8 = puVar1;
for (puVar3 = puVar2; puVar3 < puVar1; puVar3 = puVar3 + 4) {
uVar5 = *puVar3;
uVar9 = (uVar6 << 0xd ^ uVar6) + *puVar8;
uVar6 = *(int *)((uVar5 & 0x3fc) + (int)puVar2) + local_8 + uVar9;
*puVar3 = uVar6;
iVar7 = *(int *)((uVar6 >> 8 & 0x3fc) + (int)puVar2) + uVar5;
*piVar4 = iVar7;
uVar6 = puVar3[1];
uVar5 = (uVar9 >> 6 ^ uVar9) + puVar8[1];
uVar9 = *(int *)((uVar6 & 0x3fc) + (int)puVar2) + iVar7 + uVar5;
puVar3[1] = uVar9;
iVar7 = *(int *)((uVar9 >> 8 & 0x3fc) + (int)puVar2) + uVar6;
piVar4[1] = iVar7;
uVar6 = puVar3[2];
uVar9 = (uVar5 * 4 ^ uVar5) + puVar8[2];
uVar5 = *(int *)((uVar6 & 0x3fc) + (int)puVar2) + iVar7 + uVar9;
puVar3[2] = uVar5;
iVar7 = *(int *)((uVar5 >> 8 & 0x3fc) + (int)puVar2) + uVar6;
piVar4[2] = iVar7;
uVar5 = puVar3[3];
uVar6 = (uVar9 >> 0x10 ^ uVar9) + puVar8[3];
uVar9 = *(int *)((uVar5 & 0x3fc) + (int)puVar2) + iVar7 + uVar6;
puVar3[3] = uVar9;
local_8 = *(int *)((uVar9 >> 8 & 0x3fc) + (int)puVar2) + uVar5;
piVar4[3] = local_8;
puVar8 = puVar8 + 4;
piVar4 = piVar4 + 4;
}
puVar8 = puVar2;
if (puVar2 < puVar1) {
do {
uVar5 = *puVar3;
uVar9 = (uVar6 << 0xd ^ uVar6) + *puVar8;
uVar6 = *(int *)((uVar5 & 0x3fc) + (int)puVar2) + local_8 + uVar9;
*puVar3 = uVar6;
iVar7 = *(int *)((uVar6 >> 8 & 0x3fc) + (int)puVar2) + uVar5;
*piVar4 = iVar7;
uVar6 = puVar3[1];
uVar9 = (uVar9 >> 6 ^ uVar9) + puVar8[1];
uVar5 = *(int *)((uVar6 & 0x3fc) + (int)puVar2) + iVar7 + uVar9;
puVar3[1] = uVar5;
iVar7 = *(int *)((uVar5 >> 8 & 0x3fc) + (int)puVar2) + uVar6;
piVar4[1] = iVar7;
uVar6 = puVar3[2];
uVar9 = (uVar9 * 4 ^ uVar9) + puVar8[2];
uVar5 = *(int *)((uVar6 & 0x3fc) + (int)puVar2) + iVar7 + uVar9;
puVar3[2] = uVar5;
iVar7 = *(int *)((uVar5 >> 8 & 0x3fc) + (int)puVar2) + uVar6;
piVar4[2] = iVar7;
uVar5 = puVar3[3];
uVar6 = (uVar9 >> 0x10 ^ uVar9) + puVar8[3];
uVar9 = *(int *)((uVar5 & 0x3fc) + (int)puVar2) + iVar7 + uVar6;
puVar3[3] = uVar9;
local_8 = *(int *)((uVar9 >> 8 & 0x3fc) + (int)puVar2) + uVar5;
puVar8 = puVar8 + 4;
piVar4[3] = local_8;
puVar3 = puVar3 + 4;
piVar4 = piVar4 + 4;
} while (puVar8 < puVar1);
*(uint *)(param_1 + 0xc) = uVar6;
*(int *)(param_1 + 0x10) = local_8;
return;
}
*(uint *)(param_1 + 0xc) = uVar6;
*(int *)(param_1 + 0x10) = local_8;
return;
}
// --- FUN_00660ea0 at 0x00660EA0 (size: 62) ---
undefined4 __fastcall FUN_00660ea0(int *param_1)
{
int *piVar1;
int iVar2;
int *piVar3;
int iVar4;
*param_1 = *param_1 + 1;
piVar3 = (int *)param_1[2];
iVar4 = piVar3[1];
piVar1 = piVar3 + 1;
iVar2 = iVar4 + -1;
*piVar1 = iVar2;
if (iVar4 == 0) {
(**(code **)(*piVar3 + 0xc))(piVar1);
*piVar1 = 0xff;
return *(undefined4 *)(piVar3[2] + 0x3fc);
}
return *(undefined4 *)(piVar3[2] + iVar2 * 4);
}
// --- FUN_00660ee0 at 0x00660EE0 (size: 98) ---
void __thiscall
FUN_00660ee0(int *param_1,undefined4 param_2,uint *param_3,uint param_4,uint *param_5)
{
int *piVar1;
int iVar2;
uint *puVar3;
int *piVar4;
int iVar5;
uint uVar6;
if (param_5 == (uint *)0x0) {
*param_1 = *param_1 + 1;
piVar4 = (int *)param_1[2];
iVar5 = piVar4[1];
piVar1 = piVar4 + 1;
iVar2 = iVar5 + -1;
*piVar1 = iVar2;
if (iVar5 == 0) {
(**(code **)(*piVar4 + 0xc))(piVar1);
*piVar1 = 0xff;
uVar6 = *(uint *)(piVar4[2] + 0x3fc);
}
else {
uVar6 = *(uint *)(piVar4[2] + iVar2 * 4);
}
}
else {
uVar6 = *param_5;
}
puVar3 = (uint *)((int)param_3 + (param_4 & 0xfffffffc));
for (; param_3 < puVar3; param_3 = param_3 + 1) {
*param_3 = *param_3 ^ uVar6;
}
return;
}
// --- FUN_00660f50 at 0x00660F50 (size: 249) ---
void __thiscall
FUN_00660f50(int *param_1,void *param_2,undefined4 *param_3,undefined4 param_4,undefined4 *param_5,
char param_6)
{
int iVar1;
void *pvVar2;
void *pvVar3;
uint *puVar4;
uint uVar5;
size_t _Size;
undefined4 *_Dst;
uint local_4;
uVar5 = (uint)param_5;
local_4 = param_1[1] - *param_1 >> 2;
puVar4 = (uint *)&param_5;
if (param_5 <= local_4) {
puVar4 = &local_4;
}
local_4 = *puVar4 + local_4;
if (local_4 == 0) {
param_5 = (undefined4 *)0x0;
}
else if (local_4 * 4 < 0x81) {
param_5 = (undefined4 *)FUN_004050d0(local_4 * 4);
}
else {
param_5 = (undefined4 *)FUN_005df0f5();
}
pvVar3 = (void *)*param_1;
_Dst = param_5;
if (param_2 != pvVar3) {
pvVar2 = memmove(param_5,pvVar3,(int)param_2 - (int)pvVar3);
_Dst = (undefined4 *)((int)pvVar2 + ((int)param_2 - (int)pvVar3));
}
for (; uVar5 != 0; uVar5 = uVar5 - 1) {
*_Dst = *param_3;
_Dst = _Dst + 1;
}
if ((param_6 == '\0') && ((void *)param_1[1] != param_2)) {
_Size = param_1[1] - (int)param_2;
pvVar3 = memmove(_Dst,param_2,_Size);
_Dst = (undefined4 *)((int)pvVar3 + _Size);
}
iVar1 = *param_1;
if (iVar1 != 0) {
FUN_004051c0(iVar1,(param_1[2] - iVar1 >> 2) * 4);
}
*param_1 = (int)param_5;
param_1[1] = (int)_Dst;
param_1[2] = (int)(param_5 + local_4);
return;
}
// --- FUN_00661050 at 0x00661050 (size: 53) ---
void __thiscall FUN_00661050(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4)
{
*param_1 = param_2;
param_1[1] = param_3;
param_1[2] = 0;
param_1[3] = 0;
param_1[4] = 0;
param_1[5] = 0;
if (param_4 != 0) {
param_1[6] = param_4;
return;
}
param_1[6] = FUN_0040e900;
return;
}
// --- FUN_00661090 at 0x00661090 (size: 118) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __fastcall FUN_00661090(int param_1)
{
uint uVar1;
undefined4 *puVar2;
puVar2 = *(undefined4 **)(param_1 + 8);
if (puVar2 != *(undefined4 **)(param_1 + 0xc)) {
do {
operator_delete__((void *)*puVar2);
puVar2 = puVar2 + 1;
} while (puVar2 != *(undefined4 **)(param_1 + 0xc));
}
puVar2 = *(undefined4 **)(param_1 + 8);
if (puVar2 != (undefined4 *)0x0) {
uVar1 = (*(int *)(param_1 + 0x10) - (int)puVar2 >> 2) * 4;
if (0x80 < uVar1) {
operator_delete(puVar2);
return;
}
FUN_00404d90(&DAT_008376c0);
*puVar2 = *(undefined4 *)(&DAT_008376c8 + (uVar1 - 1 >> 3) * 4);
*(undefined4 **)(&DAT_008376c8 + (uVar1 - 1 >> 3) * 4) = puVar2;
_DAT_008376c0 = 0;
}
return;
}
// --- FUN_00661110 at 0x00661110 (size: 119) ---
void __fastcall FUN_00661110(int *param_1)
{
int iVar1;
undefined4 *puVar2;
int iVar3;
int *piVar4;
undefined1 local_5;
int *local_4;
local_4 = (int *)thunk_FUN_005df0f5(*param_1 * param_1[1]);
iVar1 = *param_1;
iVar3 = (param_1[1] + -1) * iVar1;
for (piVar4 = local_4; piVar4 != (int *)(iVar3 + (int)local_4);
piVar4 = (int *)((int)piVar4 + iVar1)) {
*piVar4 = iVar1 + (int)piVar4;
iVar1 = *param_1;
}
*piVar4 = param_1[5];
param_1[5] = (int)local_4;
puVar2 = (undefined4 *)param_1[3];
if (puVar2 != (undefined4 *)param_1[4]) {
if (puVar2 != (undefined4 *)0x0) {
*puVar2 = local_4;
}
param_1[3] = param_1[3] + 4;
return;
}
FUN_00660f50(puVar2,&local_4,&local_5,1,1);
return;
}
// --- FUN_00661190 at 0x00661190 (size: 47) ---
void FUN_00661190(void)
{
DWORD dwMessageId;
DWORD dwLanguageId;
HLOCAL *lpBuffer;
DWORD nSize;
va_list *Arguments;
HLOCAL local_4;
Arguments = (va_list *)0x0;
nSize = 0;
lpBuffer = &local_4;
dwLanguageId = 0x400;
dwMessageId = GetLastError();
FormatMessageA(0x1100,(LPCVOID)0x0,dwMessageId,dwLanguageId,(LPSTR)lpBuffer,nSize,Arguments);
LocalFree(local_4);
return;
}
// --- FUN_006611c0 at 0x006611C0 (size: 104) ---
undefined1 FUN_006611c0(void)
{
if (DAT_008f86ad == '\0') {
DAT_008f86ad = '\x01';
DAT_008f86ac = 1;
}
return DAT_008f86ac;
}
// --- FUN_006612a0 at 0x006612A0 (size: 242) ---
void FUN_006612a0(int *param_1,int *param_2)
{
int iVar1;
code *pcVar2;
int iVar3;
int *piVar4;
int aiStack_28 [7];
int iStack_c;
int iStack_8;
undefined1 uStack_4;
if (((param_1[2] != 0) && (*param_1 != 7)) &&
((code *)(&PTR_LAB_00834150)[(*param_1 * 3 + param_1[1]) * 3 + param_1[4]] != (code *)0x0)) {
(*(code *)(&PTR_LAB_00834150)[(*param_1 * 3 + param_1[1]) * 3 + param_1[4]])(param_1);
}
if ((param_2 != (int *)0x0) && (iVar3 = *param_2, iVar3 != 7)) {
iVar1 = param_2[2];
pcVar2 = (code *)(&PTR_LAB_00834270)[(iVar1 + iVar3 * 2 + iVar3) * 3 + param_1[4]];
if (pcVar2 != (code *)0x0) {
DAT_008f86b0._2_1_ = *(undefined1 *)((int)param_2 + 6);
DAT_008f86b0._1_1_ = *(undefined1 *)((int)param_2 + 5);
DAT_008f86b0._0_1_ = (undefined1)param_2[1];
piVar4 = aiStack_28;
for (iVar3 = 10; iVar3 != 0; iVar3 = iVar3 + -1) {
*piVar4 = *param_1;
param_1 = param_1 + 1;
piVar4 = piVar4 + 1;
}
iStack_c = param_2[5];
iStack_8 = param_2[6];
if (iVar1 != 0) {
uStack_4 = *(undefined1 *)((int)param_2 + 7);
aiStack_28[2] = param_2[3];
aiStack_28[3] = param_2[4];
DAT_008f86b0._3_1_ = 0;
(*pcVar2)(aiStack_28);
return;
}
DAT_008f86b0._3_1_ = *(undefined1 *)((int)param_2 + 7);
uStack_4 = 0xff;
(*pcVar2)(aiStack_28);
}
}
return;
}
// --- FUN_006613a0 at 0x006613A0 (size: 32) ---
void FUN_006613a0(int *param_1)
{
if (*(code **)(&DAT_00834390 + (*param_1 * 3 + param_1[3]) * 4) != (code *)0x0) {
/* WARNING: Could not recover jumptable at 0x006613bd. Too many branches */
/* WARNING: Treating indirect jump as call */
(**(code **)(&DAT_00834390 + (*param_1 * 3 + param_1[3]) * 4))();
return;
}
return;
}
// --- FUN_006615b0 at 0x006615B0 (size: 165) ---
void FUN_006615b0(int param_1)
{
undefined1 *puVar1;
undefined1 uVar2;
undefined1 uVar3;
int iVar4;
int iVar5;
int iVar6;
undefined1 *puVar7;
undefined1 *puVar8;
int iVar9;
int iVar10;
int iVar11;
int local_10;
iVar9 = *(int *)(param_1 + 8);
iVar10 = *(int *)(param_1 + 0x14);
if ((*(char *)(param_1 + 0x24) != '\0') && (local_10 = *(int *)(param_1 + 0x20), local_10 != 0)) {
iVar4 = *(int *)(param_1 + 0x1c);
iVar5 = *(int *)(param_1 + 0xc);
iVar6 = *(int *)(param_1 + 0x18);
do {
if (iVar4 != 0) {
puVar7 = (undefined1 *)(iVar4 * 3 + 2 + iVar9);
puVar8 = (undefined1 *)(iVar4 * 3 + iVar10);
iVar11 = iVar4;
do {
uVar2 = puVar7[-4];
puVar1 = puVar7 + -5;
puVar7 = puVar7 + -3;
iVar11 = iVar11 + -1;
uVar3 = *puVar7;
puVar8[-3] = *puVar1;
puVar8[-2] = uVar2;
puVar7[iVar10 - iVar9] = uVar3;
puVar8 = puVar8 + -3;
} while (iVar11 != 0);
}
iVar9 = iVar9 + iVar5;
iVar10 = iVar10 + iVar6;
local_10 = local_10 + -1;
} while (local_10 != 0);
}
return;
}
// --- FUN_00661660 at 0x00661660 (size: 338) ---
void FUN_00661660(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uint uVar7;
uint *puVar8;
int iVar9;
int iVar10;
ushort uVar11;
short sVar12;
short sVar14;
short sVar16;
uint5 uVar15;
short sVar17;
short sVar18;
ulonglong uVar19;
int local_2c;
int local_28;
int local_20;
ulonglong uVar13;
local_2c = *(int *)(param_1 + 8);
iVar9 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_20 = *(int *)(param_1 + 0x20);
iVar10 = *(byte *)(param_1 + 0x24) + 1;
if (local_20 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar8 = (uint *)(iVar9 + iVar1 * 4);
local_28 = iVar1;
do {
uVar4 = *(uint *)((local_2c - iVar9) + -4 + (int)puVar8);
puVar8 = puVar8 + -1;
uVar7 = uVar4 >> 0x18;
if (iVar10 != 0x100) {
uVar7 = (int)(uVar7 * iVar10) >> 8;
}
if (uVar7 != 0) {
uVar5 = *puVar8;
if (uVar7 + 1 == 0x100) {
*puVar8 = (uVar5 ^ uVar4) & 0xffffff ^ uVar5;
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar5 >> 0x10),uVar5)) >>
0x20),uVar5) >> 0x18);
uVar15 = (uint5)uVar6 & 0xffffffff00;
uVar13 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)(uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar11 = (ushort)uVar5 & 0xff;
uVar19 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar4 >> 0x10),uVar4) >> 0x18),
CONCAT12((char)(uVar4 >> 8),(short)uVar4)) >> 0x10,
(short)uVar4) & 0xff00ff00ff;
sVar18 = (short)(uVar7 + 1);
sVar14 = (short)(uVar13 >> 0x10);
sVar16 = (short)(uVar15 >> 8);
sVar17 = (short)(uVar15 >> 0x18);
sVar12 = uVar11 - (((ushort)(uVar11 * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8));
sVar14 = sVar14 - (((ushort)(sVar14 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar13 >> 0x30) * sVar18) >> 8));
*puVar8 = CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
CONCAT11((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14
- (0xff < sVar14),
(0 < sVar12) * (sVar12 < 0x100) * (char)sVar12
- (0xff < sVar12))));
}
}
local_28 = local_28 + -1;
} while (local_28 != 0);
}
local_2c = local_2c + iVar2;
iVar9 = iVar9 + iVar3;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
}
return;
}
// --- FUN_006617c0 at 0x006617C0 (size: 393) ---
void FUN_006617c0(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
ushort uVar5;
ushort uVar6;
uint uVar7;
char *pcVar8;
char *pcVar9;
int iVar10;
int iVar11;
int iVar12;
short sVar13;
short sVar14;
short sVar15;
ulonglong uVar16;
uint local_28;
int local_24;
int local_1c;
local_24 = *(int *)(param_1 + 8);
iVar10 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar11 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pcVar8 = (char *)(iVar1 * 3 + 2 + iVar10);
iVar12 = iVar1;
do {
uVar4 = *(uint *)(local_24 + -4 + iVar12 * 4);
iVar12 = iVar12 + -1;
pcVar9 = pcVar8 + -3;
uVar7 = uVar4 >> 0x18;
if (iVar11 != 0x100) {
uVar7 = (int)(uVar7 * iVar11) >> 8;
}
if (uVar7 != 0) {
uVar6 = (ushort)*(uint3 *)(pcVar8 + -5);
local_28 = (uint)*(uint3 *)(pcVar8 + -5);
if (uVar7 + 1 == 0x100) {
local_28 = (local_28 ^ uVar4) & 0xffffff ^ local_28;
pcVar8[-5] = (char)local_28;
pcVar8[-4] = (char)(local_28 >> 8);
*pcVar9 = (char)(local_28 >> 0x10);
}
else {
uVar5 = (ushort)(CONCAT14(*pcVar9,local_28) >> 0x18);
uVar16 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar4 >> 0x10),uVar4) >> 0x18),
CONCAT12((char)(uVar4 >> 8),(short)uVar4)) >> 0x10,
(short)uVar4) & 0xff00ff00ff;
sVar15 = (short)(uVar7 + 1);
sVar14 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar13 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar15) >> 8) -
((ushort)((short)uVar16 * sVar15) >> 8));
sVar14 = sVar14 - (((ushort)(sVar14 * sVar15) >> 8) -
((ushort)((short)(uVar16 >> 0x10) * sVar15) >> 8));
sVar15 = uVar5 - (((ushort)(uVar5 * sVar15) >> 8) -
((ushort)((short)(uVar16 >> 0x20) * sVar15) >> 8));
pcVar8[-5] = (0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 - (0xff < sVar13);
pcVar8[-4] = (0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14);
*pcVar9 = (0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 - (0xff < sVar15);
}
}
pcVar8 = pcVar9;
} while (iVar12 != 0);
}
local_24 = local_24 + iVar2;
iVar10 = iVar10 + iVar3;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_00661950 at 0x00661950 (size: 344) ---
void FUN_00661950(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
uint uVar5;
uint uVar6;
int iVar7;
uint *puVar8;
int iVar9;
int iVar10;
ushort uVar11;
short sVar12;
short sVar14;
short sVar16;
uint5 uVar15;
short sVar17;
short sVar18;
ulonglong uVar19;
uint local_28;
int local_24;
int local_20;
int local_18;
ulonglong uVar13;
local_24 = *(int *)(param_1 + 8);
iVar9 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar10 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar8 = (uint *)(iVar9 + iVar1 * 4);
local_20 = iVar1;
do {
uVar4 = *(uint *)((local_24 - iVar9) + -4 + (int)puVar8);
puVar8 = puVar8 + -1;
local_28 = uVar4 & 0xffffff;
iVar7 = 0xff;
if ((iVar10 == 0x100) || (iVar7 = iVar10 * 0xff >> 8, iVar7 != 0)) {
uVar5 = *puVar8;
if (iVar7 + 1 == 0x100) {
*puVar8 = (uVar5 ^ local_28) & 0xffffff ^ uVar5;
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar5 >> 0x10),uVar5)) >>
0x20),uVar5) >> 0x18);
uVar15 = (uint5)uVar6 & 0xffffffff00;
uVar13 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)(uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar11 = (ushort)uVar5 & 0xff;
uVar19 = (ulonglong)
(CONCAT52(CONCAT23((short)(CONCAT14((char)(local_28 >> 0x10),uVar4) >> 0x18
),CONCAT12((char)(local_28 >> 8),(short)local_28)
) >> 0x10,(short)local_28) & 0xff00ffffff) & 0xff00ff00ff
;
sVar18 = (short)(iVar7 + 1);
sVar14 = (short)(uVar13 >> 0x10);
sVar16 = (short)(uVar15 >> 8);
sVar17 = (short)(uVar15 >> 0x18);
sVar12 = uVar11 - (((ushort)(uVar11 * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8));
sVar14 = sVar14 - (((ushort)(sVar14 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar13 >> 0x30) * sVar18) >> 8));
*puVar8 = CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
CONCAT11((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14
- (0xff < sVar14),
(0 < sVar12) * (sVar12 < 0x100) * (char)sVar12
- (0xff < sVar12))));
}
}
local_20 = local_20 + -1;
} while (local_20 != 0);
}
local_24 = local_24 + iVar2;
iVar9 = iVar9 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00661ac0 at 0x00661AC0 (size: 395) ---
void FUN_00661ac0(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
ushort uVar5;
ushort uVar6;
int iVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
short sVar14;
short sVar15;
short sVar16;
byte bVar18;
byte bVar19;
ulonglong uVar17;
uint local_20;
int local_18;
iVar10 = *(int *)(param_1 + 0x14);
iVar11 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar13 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pbVar8 = (byte *)(iVar1 * 3 + 2 + iVar10);
iVar12 = iVar1;
do {
uVar4 = *(uint *)(iVar11 + -4 + iVar12 * 4);
iVar12 = iVar12 + -1;
pbVar9 = pbVar8 + -3;
local_20 = uVar4 & 0xffffff;
iVar7 = 0xff;
if ((iVar13 == 0x100) || (iVar7 = iVar13 * 0xff >> 8, iVar7 != 0)) {
uVar6 = *(ushort *)(pbVar8 + -5);
bVar18 = (byte)(local_20 >> 8);
bVar19 = (byte)(local_20 >> 0x10);
if (iVar7 + 1 == 0x100) {
pbVar8[-5] = (byte)local_20;
pbVar8[-4] = bVar18;
*pbVar9 = bVar19;
}
else {
uVar5 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar17 = (ulonglong)
(CONCAT52(CONCAT23((short)(CONCAT14(bVar19,uVar4) >> 0x18),
CONCAT12(bVar18,(short)local_20)) >> 0x10,
(short)local_20) & 0xff00ffffff) & 0xff00ff00ff;
sVar16 = (short)(iVar7 + 1);
sVar15 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar14 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar16) >> 8) -
((ushort)((short)uVar17 * sVar16) >> 8));
sVar15 = sVar15 - (((ushort)(sVar15 * sVar16) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar16) >> 8));
sVar16 = uVar5 - (((ushort)(uVar5 * sVar16) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar16) >> 8));
pbVar8[-5] = (0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14);
pbVar8[-4] = (0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 - (0xff < sVar15);
*pbVar9 = (0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16);
}
}
pbVar8 = pbVar9;
} while (iVar12 != 0);
}
iVar11 = iVar11 + iVar2;
iVar10 = iVar10 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00661c50 at 0x00661C50 (size: 352) ---
void FUN_00661c50(int param_1)
{
uint3 *puVar1;
int iVar2;
int iVar3;
int iVar4;
uint uVar5;
uint uVar6;
undefined2 uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
undefined1 *puVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar17;
short sVar19;
uint5 uVar18;
short sVar20;
short sVar21;
ulonglong uVar22;
uint local_24;
int local_1c;
ulonglong uVar16;
iVar10 = *(int *)(param_1 + 8);
iVar13 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar11 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
puVar12 = (undefined1 *)(iVar2 * 3 + 2 + iVar10);
iVar9 = iVar2;
do {
puVar1 = (uint3 *)(puVar12 + -5);
uVar7 = (undefined2)*puVar1;
puVar12 = puVar12 + -3;
iVar9 = iVar9 + -1;
local_24 = (uint)*puVar1;
iVar8 = 0xff;
if ((iVar11 == 0x100) || (iVar8 = iVar11 * 0xff >> 8, iVar8 != 0)) {
uVar5 = *(uint *)(iVar13 + iVar9 * 4);
if (iVar8 + 1 == 0x100) {
*(uint *)(iVar13 + iVar9 * 4) = (uVar5 ^ local_24) & 0xffffff ^ uVar5;
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar5 >> 0x10),uVar5)) >>
0x20),uVar5) >> 0x18);
uVar18 = (uint5)uVar6 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)(uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar5 & 0xff;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(*puVar12,local_24) >> 0x18),
CONCAT12((char)((ushort)uVar7 >> 8),uVar7)) >> 0x10,uVar7
) & 0xff00ff00ff;
sVar21 = (short)(iVar8 + 1);
sVar17 = (short)(uVar16 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar15 = uVar14 - (((ushort)(uVar14 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar21) >> 8));
*(uint *)(iVar13 + iVar9 * 4) =
CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 - (0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15))));
}
}
} while (iVar9 != 0);
}
iVar10 = iVar10 + iVar3;
iVar13 = iVar13 + iVar4;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_00661dc0 at 0x00661DC0 (size: 438) ---
void FUN_00661dc0(int param_1)
{
byte *pbVar1;
byte bVar2;
byte bVar3;
int iVar4;
int iVar5;
int iVar6;
ushort uVar7;
ushort uVar8;
int iVar9;
byte *pbVar10;
byte *pbVar11;
int iVar12;
int iVar13;
int iVar14;
short sVar15;
short sVar16;
short sVar17;
ulonglong uVar18;
undefined2 local_2c;
int local_28;
int local_24;
int local_1c;
local_28 = *(int *)(param_1 + 0x14);
iVar13 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar12 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar4 = *(int *)(param_1 + 0x1c);
iVar5 = *(int *)(param_1 + 0xc);
iVar6 = *(int *)(param_1 + 0x18);
do {
if (iVar4 != 0) {
iVar14 = iVar4 * 3 + iVar13;
pbVar10 = (byte *)(iVar4 * 3 + 2 + local_28);
local_24 = iVar4;
do {
pbVar1 = (byte *)(iVar14 + -3);
bVar2 = pbVar10[(iVar13 - local_28) + -4];
iVar14 = iVar14 + -3;
pbVar11 = pbVar10 + -3;
bVar3 = pbVar11[iVar13 - local_28];
local_2c = CONCAT11(bVar2,*pbVar1);
iVar9 = 0xff;
if ((iVar12 == 0x100) || (iVar9 = iVar12 * 0xff >> 8, iVar9 != 0)) {
uVar8 = *(ushort *)(pbVar10 + -5);
if (iVar9 + 1 == 0x100) {
pbVar10[-5] = *pbVar1;
pbVar10[-4] = bVar2;
*pbVar11 = bVar3;
}
else {
uVar7 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(((uint5)bVar3 << 0x20) >> 0x18),
CONCAT12(bVar2,local_2c)) >> 0x10,local_2c) &
0xff00ff00ff;
sVar17 = (short)(iVar9 + 1);
sVar16 = (short)(CONCAT23(uVar7,CONCAT12((char)(uVar8 >> 8),uVar8)) >> 0x10);
uVar7 = uVar7 >> 8;
sVar15 = (uVar8 & 0xff) -
(((ushort)((uVar8 & 0xff) * sVar17) >> 8) -
((ushort)((short)uVar18 * sVar17) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
sVar17 = uVar7 - (((ushort)(uVar7 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
pbVar10[-5] = (0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 - (0xff < sVar15);
pbVar10[-4] = (0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16);
*pbVar11 = (0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17);
}
}
local_24 = local_24 + -1;
pbVar10 = pbVar11;
} while (local_24 != 0);
}
local_28 = local_28 + iVar6;
iVar13 = iVar13 + iVar5;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_00661f80 at 0x00661F80 (size: 984) ---
void FUN_00661f80(uint param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
int iVar5;
uint uVar6;
uint uVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
uint uVar12;
uint *puVar13;
uint uVar14;
int iVar15;
int iVar16;
uint uVar17;
uint uVar18;
uint uVar19;
int iVar20;
uint local_58;
uint local_54;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
int local_38;
int local_2c;
iVar9 = *(int *)(param_1 + 0x14);
iVar20 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_2c = *(int *)(param_1 + 0x20);
iVar10 = *(byte *)(param_1 + 0x24) + 1;
if (local_2c != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar13 = (uint *)(iVar9 + iVar1 * 4);
local_38 = iVar1;
do {
uVar8 = *(uint *)((iVar20 - iVar9) + -4 + (int)puVar13);
puVar13 = puVar13 + -1;
iVar4 = (uVar8 >> 0x18) + (uint)(uVar8 >> 0x18 != 0);
if (iVar10 != 0x100) {
iVar4 = iVar4 * iVar10 >> 8;
}
if (iVar4 != 0) {
uVar12 = *puVar13;
uVar14 = uVar8 >> 8 & 0xff;
uVar7 = uVar8 >> 0x10 & 0xff;
uVar7 = uVar7 + (uVar7 != 0);
uVar14 = uVar14 + (uVar14 != 0);
uVar17 = (uVar8 & 0xff) + (uint)((uVar8 & 0xff) != 0);
uVar8 = uVar7;
uVar6 = uVar14;
if ((uVar14 <= uVar7) && (uVar6 = uVar7, uVar14 < uVar7)) {
uVar8 = uVar14;
}
uVar18 = uVar17;
if ((uVar17 <= uVar6) && (uVar18 = uVar6, uVar17 < uVar8)) {
uVar8 = uVar17;
}
iVar5 = uVar18 - uVar8;
if (iVar5 == 0) {
iVar15 = 0;
iVar11 = 0;
}
else {
iVar11 = (iVar5 * 0x100) / (int)uVar18;
iVar15 = 0;
if (uVar7 == uVar18) {
iVar16 = uVar14 - uVar17;
if (iVar16 < 0) {
iVar15 = 0x6000;
}
}
else if (uVar14 == uVar18) {
iVar16 = uVar17 - uVar7;
iVar15 = 0x2000;
}
else {
iVar16 = uVar7 - uVar14;
iVar15 = 0x4000;
}
iVar15 = (iVar16 << 0xc) / iVar5 + iVar15;
}
param_1._1_1_ = (byte)(uVar12 >> 8);
uVar6 = (uint)param_1._1_1_;
param_1._0_1_ = (char)uVar12;
uVar17 = uVar12 & 0xff;
param_1._2_1_ = (byte)(uVar12 >> 0x10);
uVar14 = (uint)param_1._2_1_;
uVar7 = uVar6 + (uVar6 != 0);
uVar18 = uVar17 + (uVar17 != 0);
uVar8 = uVar14 + (uVar14 != 0);
if (uVar8 < uVar7) {
uVar8 = uVar7;
}
if (uVar8 < uVar18) {
uVar8 = uVar18;
}
param_1._3_1_ = (undefined1)(uVar12 >> 0x18);
if (iVar4 == 0x100) {
uVar12 = uVar8;
uVar6 = uVar8;
uVar7 = uVar8;
if (iVar11 != 0) {
iVar4 = (int)(iVar15 + (iVar15 >> 0x1f & 0xfffU)) >> 0xc;
iVar5 = (int)(uVar8 * iVar11 + ((int)(uVar8 * iVar11) >> 0x1f & 0xffU)) >> 8;
uVar6 = (iVar15 + ((iVar4 + 1) / 2) * -0x2000) * iVar5;
uVar14 = uVar8 - iVar5;
uVar12 = uVar6 & 0x80000fff;
if ((int)uVar12 < 0) {
uVar12 = (uVar12 - 1 | 0xfffff000) + 1;
}
iVar5 = (int)(uVar6 + ((int)uVar6 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar12 < -0x800) {
iVar5 = iVar5 + -1;
}
if (0x800 < (int)uVar12) {
iVar5 = iVar5 + 1;
}
uVar12 = local_58;
uVar6 = local_54;
uVar7 = local_50;
switch(iVar4) {
case 0:
uVar12 = uVar14;
uVar6 = uVar8;
uVar7 = uVar14 + iVar5;
break;
case 1:
uVar12 = uVar14;
uVar6 = uVar14 - iVar5;
uVar7 = uVar8;
break;
case 2:
uVar12 = uVar14 + iVar5;
uVar6 = uVar14;
uVar7 = uVar8;
break;
case 3:
uVar12 = uVar8;
uVar6 = uVar14;
uVar7 = uVar14 - iVar5;
break;
case 4:
uVar12 = uVar8;
uVar6 = uVar14 + iVar5;
uVar7 = uVar14;
break;
case 5:
uVar12 = uVar14 - iVar5;
uVar6 = uVar8;
uVar7 = uVar14;
}
}
local_50 = uVar7;
local_54 = uVar6;
local_58 = uVar12;
local_54 = local_54 - (local_54 != 0);
local_50 = local_50 - (local_50 != 0);
local_58 = local_58 - (local_58 != 0);
param_1 = CONCAT31(CONCAT21(CONCAT11(param_1._3_1_,(char)local_54),(char)local_50),
(char)local_58);
}
else {
uVar12 = uVar8;
uVar7 = uVar8;
uVar18 = uVar8;
if (iVar11 != 0) {
iVar5 = (int)(iVar15 + (iVar15 >> 0x1f & 0xfffU)) >> 0xc;
iVar11 = (int)(uVar8 * iVar11 + ((int)(uVar8 * iVar11) >> 0x1f & 0xffU)) >> 8;
uVar7 = (iVar15 + ((iVar5 + 1) / 2) * -0x2000) * iVar11;
uVar19 = uVar8 - iVar11;
uVar12 = uVar7 & 0x80000fff;
if ((int)uVar12 < 0) {
uVar12 = (uVar12 - 1 | 0xfffff000) + 1;
}
iVar11 = (int)(uVar7 + ((int)uVar7 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar12 < -0x800) {
iVar11 = iVar11 + -1;
}
if (0x800 < (int)uVar12) {
iVar11 = iVar11 + 1;
}
uVar12 = local_4c;
uVar7 = local_48;
uVar18 = local_44;
switch(iVar5) {
case 0:
uVar12 = uVar8;
uVar7 = uVar19 + iVar11;
uVar18 = uVar19;
break;
case 1:
uVar12 = uVar19 - iVar11;
uVar7 = uVar8;
uVar18 = uVar19;
break;
case 2:
uVar12 = uVar19;
uVar7 = uVar8;
uVar18 = uVar19 + iVar11;
break;
case 3:
uVar12 = uVar19;
uVar7 = uVar19 - iVar11;
uVar18 = uVar8;
break;
case 4:
uVar12 = uVar19 + iVar11;
uVar7 = uVar19;
uVar18 = uVar8;
break;
case 5:
uVar12 = uVar8;
uVar7 = uVar19;
uVar18 = uVar19 - iVar11;
}
}
local_44 = uVar18;
local_48 = uVar7;
local_4c = uVar12;
local_4c = local_4c - (local_4c != 0);
local_48 = local_48 - (local_48 != 0);
local_44 = local_44 - (local_44 != 0);
iVar5 = (uVar14 - local_4c) * iVar4;
iVar11 = (uVar6 - local_48) * iVar4;
iVar4 = (uVar17 - local_44) * iVar4;
param_1 = CONCAT31(CONCAT21(CONCAT11(param_1._3_1_,
param_1._2_1_ -
(char)(iVar5 + (iVar5 >> 0x1f & 0xffU) >> 8)),
param_1._1_1_ -
(char)(iVar11 + (iVar11 >> 0x1f & 0xffU) >> 8)),
(char)param_1 - (char)(iVar4 + (iVar4 >> 0x1f & 0xffU) >> 8));
}
*puVar13 = param_1;
}
local_38 = local_38 + -1;
} while (local_38 != 0);
}
iVar20 = iVar20 + iVar2;
iVar9 = iVar9 + iVar3;
local_2c = local_2c + -1;
} while (local_2c != 0);
}
}
return;
}
// --- FUN_00662440 at 0x00662440 (size: 991) ---
void FUN_00662440(uint param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
int iVar5;
uint uVar6;
uint uVar7;
uint uVar8;
int iVar9;
byte bVar10;
int iVar11;
int iVar12;
byte *pbVar13;
byte *pbVar14;
uint uVar15;
int iVar16;
int iVar17;
int iVar18;
uint uVar19;
uint uVar20;
uint uVar21;
uint local_54;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
int local_38;
int local_34;
int local_24;
local_34 = *(int *)(param_1 + 0x14);
local_38 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_24 = *(int *)(param_1 + 0x20);
iVar9 = *(byte *)(param_1 + 0x24) + 1;
if (local_24 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pbVar13 = (byte *)(iVar1 * 3 + 2 + local_34);
iVar18 = iVar1;
do {
uVar8 = *(uint *)(local_38 + -4 + iVar18 * 4);
iVar18 = iVar18 + -1;
pbVar14 = pbVar13 + -3;
iVar11 = (uVar8 >> 0x18) + (uint)(uVar8 >> 0x18 != 0);
if (iVar9 != 0x100) {
iVar11 = iVar11 * iVar9 >> 8;
}
if (iVar11 != 0) {
uVar15 = uVar8 >> 8 & 0xff;
uVar7 = uVar8 >> 0x10 & 0xff;
uVar7 = uVar7 + (uVar7 != 0);
uVar15 = uVar15 + (uVar15 != 0);
uVar19 = (uVar8 & 0xff) + (uint)((uVar8 & 0xff) != 0);
uVar8 = uVar7;
uVar6 = uVar15;
if ((uVar15 <= uVar7) && (uVar6 = uVar7, uVar15 < uVar7)) {
uVar8 = uVar15;
}
uVar20 = uVar19;
if ((uVar19 <= uVar6) && (uVar20 = uVar6, uVar19 < uVar8)) {
uVar8 = uVar19;
}
iVar5 = uVar20 - uVar8;
if (iVar5 == 0) {
iVar16 = 0;
iVar12 = 0;
}
else {
iVar12 = (iVar5 * 0x100) / (int)uVar20;
iVar16 = 0;
if (uVar7 == uVar20) {
iVar17 = uVar15 - uVar19;
if (iVar17 < 0) {
iVar16 = 0x6000;
}
}
else if (uVar15 == uVar20) {
iVar17 = uVar19 - uVar7;
iVar16 = 0x2000;
}
else {
iVar17 = uVar7 - uVar15;
iVar16 = 0x4000;
}
iVar16 = (iVar17 << 0xc) / iVar5 + iVar16;
}
uVar6 = (uint)pbVar13[-4];
uVar19 = (uint)pbVar13[-5];
uVar15 = (uint)*pbVar14;
uVar7 = uVar6 + (uVar6 != 0);
uVar20 = uVar19 + (uVar19 != 0);
uVar8 = uVar15 + (uVar15 != 0);
if (uVar8 < uVar7) {
uVar8 = uVar7;
}
if (uVar8 < uVar20) {
uVar8 = uVar20;
}
if (iVar11 == 0x100) {
uVar6 = uVar8;
uVar7 = uVar8;
uVar15 = uVar8;
if (iVar12 != 0) {
iVar11 = (int)(iVar16 + (iVar16 >> 0x1f & 0xfffU)) >> 0xc;
iVar5 = (int)(uVar8 * iVar12 + ((int)(uVar8 * iVar12) >> 0x1f & 0xffU)) >> 8;
uVar7 = (iVar16 + ((iVar11 + 1) / 2) * -0x2000) * iVar5;
uVar19 = uVar8 - iVar5;
uVar6 = uVar7 & 0x80000fff;
if ((int)uVar6 < 0) {
uVar6 = (uVar6 - 1 | 0xfffff000) + 1;
}
iVar5 = (int)(uVar7 + ((int)uVar7 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar6 < -0x800) {
iVar5 = iVar5 + -1;
}
if (0x800 < (int)uVar6) {
iVar5 = iVar5 + 1;
}
uVar6 = param_1;
uVar7 = local_54;
uVar15 = local_50;
switch(iVar11) {
case 0:
uVar6 = uVar19;
uVar7 = uVar8;
uVar15 = uVar19 + iVar5;
break;
case 1:
uVar6 = uVar19;
uVar7 = uVar19 - iVar5;
uVar15 = uVar8;
break;
case 2:
uVar6 = uVar19 + iVar5;
uVar7 = uVar19;
uVar15 = uVar8;
break;
case 3:
uVar6 = uVar8;
uVar7 = uVar19;
uVar15 = uVar19 - iVar5;
break;
case 4:
uVar6 = uVar8;
uVar7 = uVar19 + iVar5;
uVar15 = uVar19;
break;
case 5:
uVar6 = uVar19 - iVar5;
uVar7 = uVar8;
uVar15 = uVar19;
}
}
local_50 = uVar15;
local_54 = uVar7;
param_1 = uVar6;
uVar7 = local_54 - (local_54 != 0);
local_50 = local_50 - (local_50 != 0);
uVar8 = param_1 - (param_1 != 0);
bVar10 = (byte)local_50;
param_1 = uVar8;
local_54 = uVar7;
}
else {
uVar7 = uVar8;
uVar20 = uVar8;
uVar4 = uVar8;
if (iVar12 != 0) {
iVar5 = (int)(iVar16 + (iVar16 >> 0x1f & 0xfffU)) >> 0xc;
iVar12 = (int)(uVar8 * iVar12 + ((int)(uVar8 * iVar12) >> 0x1f & 0xffU)) >> 8;
uVar20 = (iVar16 + ((iVar5 + 1) / 2) * -0x2000) * iVar12;
uVar21 = uVar8 - iVar12;
uVar7 = uVar20 & 0x80000fff;
if ((int)uVar7 < 0) {
uVar7 = (uVar7 - 1 | 0xfffff000) + 1;
}
iVar12 = (int)(uVar20 + ((int)uVar20 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar7 < -0x800) {
iVar12 = iVar12 + -1;
}
if (0x800 < (int)uVar7) {
iVar12 = iVar12 + 1;
}
uVar7 = local_4c;
uVar20 = local_48;
uVar4 = local_44;
switch(iVar5) {
case 0:
uVar7 = uVar8;
uVar20 = uVar21 + iVar12;
uVar4 = uVar21;
break;
case 1:
uVar7 = uVar21 - iVar12;
uVar20 = uVar8;
uVar4 = uVar21;
break;
case 2:
uVar7 = uVar21;
uVar20 = uVar8;
uVar4 = uVar21 + iVar12;
break;
case 3:
uVar7 = uVar21;
uVar20 = uVar21 - iVar12;
uVar4 = uVar8;
break;
case 4:
uVar7 = uVar21 + iVar12;
uVar20 = uVar21;
uVar4 = uVar8;
break;
case 5:
uVar7 = uVar8;
uVar20 = uVar21;
uVar4 = uVar21 - iVar12;
}
}
local_44 = uVar4;
local_48 = uVar20;
local_4c = uVar7;
local_4c = local_4c - (local_4c != 0);
local_48 = local_48 - (local_48 != 0);
local_44 = local_44 - (local_44 != 0);
iVar5 = (uVar15 - local_4c) * iVar11;
uVar7 = (uint)(byte)(*pbVar14 - (char)(iVar5 + (iVar5 >> 0x1f & 0xffU) >> 8));
iVar5 = (uVar6 - local_48) * iVar11;
bVar10 = pbVar13[-4] - (char)(iVar5 + (iVar5 >> 0x1f & 0xffU) >> 8);
iVar11 = (uVar19 - local_44) * iVar11;
uVar8 = (uint)(byte)(pbVar13[-5] - (char)((iVar11 >> 0x1f & 0xffU) + iVar11 >> 8));
}
pbVar13[-5] = (byte)uVar8;
pbVar13[-4] = bVar10;
*pbVar14 = (byte)uVar7;
}
pbVar13 = pbVar14;
} while (iVar18 != 0);
}
local_38 = local_38 + iVar2;
local_34 = local_34 + iVar3;
local_24 = local_24 + -1;
} while (local_24 != 0);
}
}
return;
}
// --- FUN_00662900 at 0x00662900 (size: 984) ---
void FUN_00662900(uint param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
uint uVar5;
uint uVar6;
uint uVar7;
int iVar8;
int iVar9;
int iVar10;
uint uVar11;
uint *puVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
uint uVar17;
uint uVar18;
int iVar19;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
uint local_40;
uint local_3c;
int local_38;
int local_30;
int local_24;
iVar8 = *(int *)(param_1 + 0x14);
iVar19 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_24 = *(int *)(param_1 + 0x20);
iVar9 = *(byte *)(param_1 + 0x24) + 1;
if (local_24 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar12 = (uint *)(iVar8 + iVar1 * 4);
local_30 = iVar1;
do {
uVar7 = *(uint *)((iVar19 - iVar8) + -4 + (int)puVar12);
puVar12 = puVar12 + -1;
local_38 = 0x100;
if ((iVar9 == 0x100) || (local_38 = iVar9 * 0x100 >> 8, local_38 != 0)) {
uVar11 = *puVar12;
uVar13 = uVar7 >> 8 & 0xff;
uVar6 = uVar7 >> 0x10 & 0xff;
uVar6 = uVar6 + (uVar6 != 0);
uVar13 = uVar13 + (uVar13 != 0);
uVar16 = (uVar7 & 0xff) + (uint)((uVar7 & 0xff) != 0);
uVar7 = uVar6;
uVar5 = uVar13;
if ((uVar13 <= uVar6) && (uVar5 = uVar6, uVar13 < uVar6)) {
uVar7 = uVar13;
}
uVar17 = uVar16;
if ((uVar16 <= uVar5) && (uVar17 = uVar5, uVar16 < uVar7)) {
uVar7 = uVar16;
}
iVar4 = uVar17 - uVar7;
if (iVar4 == 0) {
iVar14 = 0;
iVar10 = 0;
}
else {
iVar10 = (iVar4 * 0x100) / (int)uVar17;
iVar14 = 0;
if (uVar6 == uVar17) {
iVar15 = uVar13 - uVar16;
if (iVar15 < 0) {
iVar14 = 0x6000;
}
}
else if (uVar13 == uVar17) {
iVar15 = uVar16 - uVar6;
iVar14 = 0x2000;
}
else {
iVar15 = uVar6 - uVar13;
iVar14 = 0x4000;
}
iVar14 = (iVar15 << 0xc) / iVar4 + iVar14;
}
param_1._1_1_ = (byte)(uVar11 >> 8);
uVar5 = (uint)param_1._1_1_;
param_1._0_1_ = (char)uVar11;
uVar16 = uVar11 & 0xff;
param_1._2_1_ = (byte)(uVar11 >> 0x10);
uVar13 = (uint)param_1._2_1_;
uVar6 = uVar5 + (uVar5 != 0);
uVar17 = uVar16 + (uVar16 != 0);
uVar7 = uVar13 + (uVar13 != 0);
if (uVar7 < uVar6) {
uVar7 = uVar6;
}
if (uVar7 < uVar17) {
uVar7 = uVar17;
}
param_1._3_1_ = (undefined1)(uVar11 >> 0x18);
if (local_38 == 0x100) {
uVar11 = uVar7;
uVar5 = uVar7;
uVar6 = uVar7;
if (iVar10 != 0) {
iVar4 = (int)(iVar14 + (iVar14 >> 0x1f & 0xfffU)) >> 0xc;
iVar10 = (int)(uVar7 * iVar10 + ((int)(uVar7 * iVar10) >> 0x1f & 0xffU)) >> 8;
uVar5 = (iVar14 + ((iVar4 + 1) / 2) * -0x2000) * iVar10;
uVar13 = uVar7 - iVar10;
uVar11 = uVar5 & 0x80000fff;
if ((int)uVar11 < 0) {
uVar11 = (uVar11 - 1 | 0xfffff000) + 1;
}
iVar10 = (int)(uVar5 + ((int)uVar5 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar11 < -0x800) {
iVar10 = iVar10 + -1;
}
if (0x800 < (int)uVar11) {
iVar10 = iVar10 + 1;
}
uVar11 = local_50;
uVar5 = local_4c;
uVar6 = local_48;
switch(iVar4) {
case 0:
uVar11 = uVar13;
uVar5 = uVar7;
uVar6 = uVar13 + iVar10;
break;
case 1:
uVar11 = uVar13;
uVar5 = uVar13 - iVar10;
uVar6 = uVar7;
break;
case 2:
uVar11 = uVar13 + iVar10;
uVar5 = uVar13;
uVar6 = uVar7;
break;
case 3:
uVar11 = uVar7;
uVar5 = uVar13;
uVar6 = uVar13 - iVar10;
break;
case 4:
uVar11 = uVar7;
uVar5 = uVar13 + iVar10;
uVar6 = uVar13;
break;
case 5:
uVar11 = uVar13 - iVar10;
uVar5 = uVar7;
uVar6 = uVar13;
}
}
local_48 = uVar6;
local_4c = uVar5;
local_50 = uVar11;
local_4c = local_4c - (local_4c != 0);
local_48 = local_48 - (local_48 != 0);
local_50 = local_50 - (local_50 != 0);
param_1 = CONCAT31(CONCAT21(CONCAT11(param_1._3_1_,(char)local_4c),(char)local_48),
(char)local_50);
}
else {
uVar11 = uVar7;
uVar6 = uVar7;
uVar17 = uVar7;
if (iVar10 != 0) {
iVar4 = (int)(iVar14 + (iVar14 >> 0x1f & 0xfffU)) >> 0xc;
iVar10 = (int)(uVar7 * iVar10 + ((int)(uVar7 * iVar10) >> 0x1f & 0xffU)) >> 8;
uVar6 = (iVar14 + ((iVar4 + 1) / 2) * -0x2000) * iVar10;
uVar18 = uVar7 - iVar10;
uVar11 = uVar6 & 0x80000fff;
if ((int)uVar11 < 0) {
uVar11 = (uVar11 - 1 | 0xfffff000) + 1;
}
iVar10 = (int)(uVar6 + ((int)uVar6 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar11 < -0x800) {
iVar10 = iVar10 + -1;
}
if (0x800 < (int)uVar11) {
iVar10 = iVar10 + 1;
}
uVar11 = local_44;
uVar6 = local_40;
uVar17 = local_3c;
switch(iVar4) {
case 0:
uVar11 = uVar7;
uVar6 = uVar18 + iVar10;
uVar17 = uVar18;
break;
case 1:
uVar11 = uVar18 - iVar10;
uVar6 = uVar7;
uVar17 = uVar18;
break;
case 2:
uVar11 = uVar18;
uVar6 = uVar7;
uVar17 = uVar18 + iVar10;
break;
case 3:
uVar11 = uVar18;
uVar6 = uVar18 - iVar10;
uVar17 = uVar7;
break;
case 4:
uVar11 = uVar18 + iVar10;
uVar6 = uVar18;
uVar17 = uVar7;
break;
case 5:
uVar11 = uVar7;
uVar6 = uVar18;
uVar17 = uVar18 - iVar10;
}
}
local_3c = uVar17;
local_40 = uVar6;
local_44 = uVar11;
local_44 = local_44 - (local_44 != 0);
local_40 = local_40 - (local_40 != 0);
local_3c = local_3c - (local_3c != 0);
iVar4 = (uVar13 - local_44) * local_38;
iVar10 = (uVar5 - local_40) * local_38;
local_38 = (uVar16 - local_3c) * local_38;
param_1 = CONCAT31(CONCAT21(CONCAT11(param_1._3_1_,
param_1._2_1_ -
(char)(iVar4 + (iVar4 >> 0x1f & 0xffU) >> 8)),
param_1._1_1_ -
(char)(iVar10 + (iVar10 >> 0x1f & 0xffU) >> 8)),
(char)param_1 -
(char)(local_38 + (local_38 >> 0x1f & 0xffU) >> 8));
}
*puVar12 = param_1;
}
local_30 = local_30 + -1;
} while (local_30 != 0);
}
iVar19 = iVar19 + iVar2;
iVar8 = iVar8 + iVar3;
local_24 = local_24 + -1;
} while (local_24 != 0);
}
}
return;
}
// --- FUN_00663270 at 0x00663270 (size: 995) ---
void FUN_00663270(int param_1)
{
byte *pbVar1;
byte *pbVar2;
byte *pbVar3;
int iVar4;
int iVar5;
int iVar6;
int iVar7;
uint uVar8;
int iVar9;
uint uVar10;
uint uVar11;
int iVar12;
int iVar13;
uint uVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
int iVar19;
uint uVar20;
uint uVar21;
uint uVar22;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
uint local_40;
uint local_3c;
int local_38;
int local_34;
int local_24;
iVar12 = *(int *)(param_1 + 8);
local_34 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_24 = *(int *)(param_1 + 0x20);
iVar19 = *(byte *)(param_1 + 0x24) + 1;
if (local_24 != 0) {
iVar4 = *(int *)(param_1 + 0x1c);
iVar5 = *(int *)(param_1 + 0xc);
iVar6 = *(int *)(param_1 + 0x18);
do {
if (iVar4 != 0) {
iVar9 = iVar4 * 3 + 2 + iVar12;
iVar15 = iVar4;
do {
pbVar1 = (byte *)(iVar9 + -4);
pbVar2 = (byte *)(iVar9 + -3);
pbVar3 = (byte *)(iVar9 + -5);
iVar9 = iVar9 + -3;
iVar15 = iVar15 + -1;
local_38 = 0x100;
if ((iVar19 == 0x100) || (local_38 = iVar19 * 0x100 >> 8, local_38 != 0)) {
uVar14 = *(uint *)(local_34 + iVar15 * 4);
uVar10 = (uint)*pbVar2 + (uint)(*pbVar2 != 0);
uVar16 = (uint)*pbVar1 + (uint)(*pbVar1 != 0);
uVar20 = (uint)*pbVar3 + (uint)(*pbVar3 != 0);
uVar11 = uVar10;
uVar8 = uVar16;
if ((uVar16 <= uVar10) && (uVar8 = uVar10, uVar16 < uVar10)) {
uVar11 = uVar16;
}
uVar21 = uVar20;
if ((uVar20 <= uVar8) && (uVar21 = uVar8, uVar20 < uVar11)) {
uVar11 = uVar20;
}
iVar7 = uVar21 - uVar11;
if (iVar7 == 0) {
iVar17 = 0;
iVar13 = 0;
}
else {
iVar13 = (iVar7 * 0x100) / (int)uVar21;
iVar17 = 0;
if (uVar10 == uVar21) {
iVar18 = uVar16 - uVar20;
if (iVar18 < 0) {
iVar17 = 0x6000;
}
}
else if (uVar16 == uVar21) {
iVar18 = uVar20 - uVar10;
iVar17 = 0x2000;
}
else {
iVar18 = uVar10 - uVar16;
iVar17 = 0x4000;
}
iVar17 = (iVar18 << 0xc) / iVar7 + iVar17;
}
param_1._1_1_ = (byte)(uVar14 >> 8);
uVar8 = (uint)param_1._1_1_;
param_1._0_1_ = (char)uVar14;
uVar20 = uVar14 & 0xff;
param_1._2_1_ = (byte)(uVar14 >> 0x10);
uVar16 = (uint)param_1._2_1_;
uVar10 = uVar8 + (uVar8 != 0);
uVar21 = uVar20 + (uVar20 != 0);
uVar11 = uVar16 + (uVar16 != 0);
if (uVar11 < uVar10) {
uVar11 = uVar10;
}
if (uVar11 < uVar21) {
uVar11 = uVar21;
}
param_1._3_1_ = (undefined1)(uVar14 >> 0x18);
if (local_38 == 0x100) {
uVar14 = uVar11;
uVar8 = uVar11;
uVar10 = uVar11;
if (iVar13 != 0) {
iVar7 = (int)(iVar17 + (iVar17 >> 0x1f & 0xfffU)) >> 0xc;
iVar13 = (int)(uVar11 * iVar13 + ((int)(uVar11 * iVar13) >> 0x1f & 0xffU)) >> 8;
uVar8 = (iVar17 + ((iVar7 + 1) / 2) * -0x2000) * iVar13;
uVar16 = uVar11 - iVar13;
uVar14 = uVar8 & 0x80000fff;
if ((int)uVar14 < 0) {
uVar14 = (uVar14 - 1 | 0xfffff000) + 1;
}
iVar13 = (int)(uVar8 + ((int)uVar8 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar14 < -0x800) {
iVar13 = iVar13 + -1;
}
if (0x800 < (int)uVar14) {
iVar13 = iVar13 + 1;
}
uVar14 = local_50;
uVar8 = local_4c;
uVar10 = local_48;
switch(iVar7) {
case 0:
uVar14 = uVar16;
uVar8 = uVar11;
uVar10 = uVar16 + iVar13;
break;
case 1:
uVar14 = uVar16;
uVar8 = uVar16 - iVar13;
uVar10 = uVar11;
break;
case 2:
uVar14 = uVar16 + iVar13;
uVar8 = uVar16;
uVar10 = uVar11;
break;
case 3:
uVar14 = uVar11;
uVar8 = uVar16;
uVar10 = uVar16 - iVar13;
break;
case 4:
uVar14 = uVar11;
uVar8 = uVar16 + iVar13;
uVar10 = uVar16;
break;
case 5:
uVar14 = uVar16 - iVar13;
uVar8 = uVar11;
uVar10 = uVar16;
}
}
local_48 = uVar10;
local_4c = uVar8;
local_50 = uVar14;
local_4c = local_4c - (local_4c != 0);
local_48 = local_48 - (local_48 != 0);
local_50 = local_50 - (local_50 != 0);
param_1 = CONCAT31(CONCAT21(CONCAT11(param_1._3_1_,(char)local_4c),(char)local_48),
(char)local_50);
}
else {
uVar14 = uVar11;
uVar10 = uVar11;
uVar21 = uVar11;
if (iVar13 != 0) {
iVar7 = (int)(iVar17 + (iVar17 >> 0x1f & 0xfffU)) >> 0xc;
iVar13 = (int)(uVar11 * iVar13 + ((int)(uVar11 * iVar13) >> 0x1f & 0xffU)) >> 8;
uVar10 = (iVar17 + ((iVar7 + 1) / 2) * -0x2000) * iVar13;
uVar22 = uVar11 - iVar13;
uVar14 = uVar10 & 0x80000fff;
if ((int)uVar14 < 0) {
uVar14 = (uVar14 - 1 | 0xfffff000) + 1;
}
iVar13 = (int)(uVar10 + ((int)uVar10 >> 0x1f & 0xfffU)) >> 0xc;
if ((int)uVar14 < -0x800) {
iVar13 = iVar13 + -1;
}
if (0x800 < (int)uVar14) {
iVar13 = iVar13 + 1;
}
uVar14 = local_44;
uVar10 = local_40;
uVar21 = local_3c;
switch(iVar7) {
case 0:
uVar14 = uVar11;
uVar10 = uVar22 + iVar13;
uVar21 = uVar22;
break;
case 1:
uVar14 = uVar22 - iVar13;
uVar10 = uVar11;
uVar21 = uVar22;
break;
case 2:
uVar14 = uVar22;
uVar10 = uVar11;
uVar21 = uVar22 + iVar13;
break;
case 3:
uVar14 = uVar22;
uVar10 = uVar22 - iVar13;
uVar21 = uVar11;
break;
case 4:
uVar14 = uVar22 + iVar13;
uVar10 = uVar22;
uVar21 = uVar11;
break;
case 5:
uVar14 = uVar11;
uVar10 = uVar22;
uVar21 = uVar22 - iVar13;
}
}
local_3c = uVar21;
local_40 = uVar10;
local_44 = uVar14;
local_44 = local_44 - (local_44 != 0);
local_40 = local_40 - (local_40 != 0);
local_3c = local_3c - (local_3c != 0);
iVar7 = (uVar16 - local_44) * local_38;
iVar13 = (uVar8 - local_40) * local_38;
local_38 = (uVar20 - local_3c) * local_38;
param_1 = CONCAT31(CONCAT21(CONCAT11(param_1._3_1_,
param_1._2_1_ -
(char)(iVar7 + (iVar7 >> 0x1f & 0xffU) >> 8)),
param_1._1_1_ -
(char)(iVar13 + (iVar13 >> 0x1f & 0xffU) >> 8)),
(char)param_1 -
(char)(local_38 + (local_38 >> 0x1f & 0xffU) >> 8));
}
*(int *)(local_34 + iVar15 * 4) = param_1;
}
} while (iVar15 != 0);
}
iVar12 = iVar12 + iVar5;
local_34 = local_34 + iVar6;
local_24 = local_24 + -1;
} while (local_24 != 0);
}
}
return;
}
// --- FUN_00663c00 at 0x00663C00 (size: 337) ---
void FUN_00663c00(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
undefined4 uVar5;
uint uVar6;
ulonglong uVar7;
int iVar8;
undefined4 *puVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar13;
short sVar15;
uint5 uVar14;
short sVar16;
ushort uVar17;
ushort uVar19;
ushort uVar20;
ulonglong uVar18;
short sVar21;
int local_28;
int local_24;
int local_1c;
local_28 = *(int *)(param_1 + 8);
iVar10 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar11 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar9 = (undefined4 *)(iVar10 + iVar1 * 4);
local_24 = iVar1;
do {
uVar4 = *(uint *)((local_28 - iVar10) + -4 + (int)puVar9);
puVar9 = puVar9 + -1;
iVar8 = (uVar4 >> 0x18) + (uint)(uVar4 >> 0x18 != 0);
if (iVar11 != 0x100) {
iVar8 = iVar8 * iVar11 >> 8;
}
if (iVar8 != 0) {
uVar5 = *puVar9;
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar14 = (uint5)uVar6 & 0xffffffff00;
uVar18 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar5 & 0xff;
uVar20 = (ushort)(byte)(uVar4 >> 0x10);
uVar19 = (ushort)(byte)(uVar4 >> 8);
uVar7 = uVar18 >> 0x10 & 0xffffff00ff00;
sVar13 = (short)(uVar18 >> 0x10);
sVar15 = (short)(uVar14 >> 8);
sVar16 = (short)(uVar14 >> 0x18);
uVar17 = (ushort)(((ushort)(byte)uVar4 + (ushort)((byte)uVar4 != 0)) * uVar12) >> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * sVar13) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * sVar15) >> 8;
uVar18 = (ulonglong)CONCAT24(uVar20,CONCAT22(uVar19,uVar17)) | uVar7 << 0x10;
if (iVar8 != 0x100) {
sVar21 = (short)iVar8;
uVar18 = CONCAT26(sVar16 - (((ushort)(sVar16 * sVar21) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar21) >> 8)),
CONCAT24(sVar15 - (((ushort)(sVar15 * sVar21) >> 8) -
((ushort)(uVar20 * sVar21) >> 8)),
CONCAT22(sVar13 - (((ushort)(sVar13 * sVar21) >> 8) -
((ushort)(uVar19 * sVar21) >> 8)),
uVar12 - (((ushort)(uVar12 * sVar21) >> 8) -
((ushort)(uVar17 * sVar21) >> 8)))));
}
sVar13 = (short)uVar18;
sVar15 = (short)(uVar18 >> 0x10);
sVar16 = (short)(uVar18 >> 0x20);
sVar21 = (short)(uVar18 >> 0x30);
*puVar9 = CONCAT13((0 < sVar21) * (sVar21 < 0x100) * (char)(uVar18 >> 0x30) -
(0xff < sVar21),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)(uVar18 >> 0x20) -
(0xff < sVar16),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)(uVar18 >> 0x10) - (0xff < sVar15),
(0 < sVar13) * (sVar13 < 0x100) * (char)uVar18 -
(0xff < sVar13))));
}
local_24 = local_24 + -1;
} while (local_24 != 0);
}
local_28 = local_28 + iVar2;
iVar10 = iVar10 + iVar3;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_00663d60 at 0x00663D60 (size: 387) ---
void FUN_00663d60(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
short sVar5;
ushort uVar6;
int iVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
int iVar12;
ushort uVar13;
short sVar15;
undefined6 uVar14;
ushort uVar16;
ushort uVar17;
ushort uVar18;
short sVar19;
int local_24;
int local_1c;
local_24 = *(int *)(param_1 + 8);
iVar10 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar11 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pbVar8 = (byte *)(iVar1 * 3 + 2 + iVar10);
iVar12 = iVar1;
do {
uVar4 = *(uint *)(local_24 + -4 + iVar12 * 4);
iVar12 = iVar12 + -1;
pbVar9 = pbVar8 + -3;
iVar7 = (uVar4 >> 0x18) + (uint)(uVar4 >> 0x18 != 0);
if (iVar11 != 0x100) {
iVar7 = iVar7 * iVar11 >> 8;
}
if (iVar7 != 0) {
uVar16 = *(ushort *)(pbVar8 + -5);
uVar6 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar13 = uVar16 & 0xff;
uVar18 = (ushort)(byte)(uVar4 >> 0x10);
uVar17 = (ushort)(byte)(uVar4 >> 8);
sVar15 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar16 >> 8),uVar16)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar16 = (ushort)(((ushort)(byte)uVar4 + (ushort)((byte)uVar4 != 0)) * uVar13) >> 8;
uVar17 = (ushort)((uVar17 + (uVar17 != 0)) * sVar15) >> 8;
uVar18 = (ushort)((uVar18 + (uVar18 != 0)) * uVar6) >> 8;
uVar14 = CONCAT24(uVar18,CONCAT22(uVar17,uVar16));
if (iVar7 != 0x100) {
sVar19 = (short)iVar7;
uVar14 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar19) >> 8) -
((ushort)(uVar18 * sVar19) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar19) >> 8) -
((ushort)(uVar17 * sVar19) >> 8)),
uVar13 - (((ushort)(uVar13 * sVar19) >> 8) -
((ushort)(uVar16 * sVar19) >> 8))));
}
sVar15 = (short)uVar14;
sVar19 = (short)((uint6)uVar14 >> 0x10);
sVar5 = (short)((uint6)uVar14 >> 0x20);
pbVar8[-5] = (0 < sVar15) * (sVar15 < 0x100) * (char)uVar14 - (0xff < sVar15);
pbVar8[-4] = (0 < sVar19) * (sVar19 < 0x100) * (char)((uint6)uVar14 >> 0x10) -
(0xff < sVar19);
*pbVar9 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar14 >> 0x20) -
(0xff < sVar5);
}
pbVar8 = pbVar9;
} while (iVar12 != 0);
}
local_24 = local_24 + iVar2;
iVar10 = iVar10 + iVar3;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_00663ef0 at 0x00663EF0 (size: 327) ---
void FUN_00663ef0(int param_1)
{
uint *puVar1;
int iVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
ulonglong uVar7;
int iVar8;
undefined4 *puVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar13;
short sVar15;
uint5 uVar14;
short sVar16;
ushort uVar17;
ushort uVar19;
ushort uVar20;
ulonglong uVar18;
short sVar21;
int local_24;
uint local_20;
int local_1c;
int local_18;
local_24 = *(int *)(param_1 + 8);
iVar10 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar11 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
puVar9 = (undefined4 *)(iVar10 + iVar2 * 4);
local_1c = iVar2;
do {
puVar1 = (uint *)((local_24 - iVar10) + -4 + (int)puVar9);
puVar9 = puVar9 + -1;
iVar8 = 0x100;
local_20 = *puVar1 & 0xffffff;
if ((iVar11 == 0x100) || (iVar8 = iVar11 * 0x100 >> 8, iVar8 != 0)) {
uVar5 = *puVar9;
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar14 = (uint5)uVar6 & 0xffffffff00;
uVar18 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar5 & 0xff;
uVar20 = (ushort)(byte)(local_20 >> 0x10);
uVar19 = (ushort)(byte)(local_20 >> 8);
uVar7 = uVar18 >> 0x10 & 0xffffff00ff00;
sVar13 = (short)(uVar18 >> 0x10);
sVar15 = (short)(uVar14 >> 8);
sVar16 = (short)(uVar14 >> 0x18);
uVar17 = (ushort)(((ushort)(byte)local_20 + (ushort)((byte)local_20 != 0)) * uVar12)
>> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * sVar13) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * sVar15) >> 8;
uVar18 = (ulonglong)CONCAT24(uVar20,CONCAT22(uVar19,uVar17)) | uVar7 << 0x10;
if (iVar8 != 0x100) {
sVar21 = (short)iVar8;
uVar18 = CONCAT26(sVar16 - (((ushort)(sVar16 * sVar21) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar21) >> 8)),
CONCAT24(sVar15 - (((ushort)(sVar15 * sVar21) >> 8) -
((ushort)(uVar20 * sVar21) >> 8)),
CONCAT22(sVar13 - (((ushort)(sVar13 * sVar21) >> 8) -
((ushort)(uVar19 * sVar21) >> 8)),
uVar12 - (((ushort)(uVar12 * sVar21) >> 8) -
((ushort)(uVar17 * sVar21) >> 8)))));
}
sVar13 = (short)uVar18;
sVar15 = (short)(uVar18 >> 0x10);
sVar16 = (short)(uVar18 >> 0x20);
sVar21 = (short)(uVar18 >> 0x30);
*puVar9 = CONCAT13((0 < sVar21) * (sVar21 < 0x100) * (char)(uVar18 >> 0x30) -
(0xff < sVar21),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)(uVar18 >> 0x20) -
(0xff < sVar16),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)(uVar18 >> 0x10) - (0xff < sVar15),
(0 < sVar13) * (sVar13 < 0x100) * (char)uVar18 -
(0xff < sVar13))));
}
local_1c = local_1c + -1;
} while (local_1c != 0);
}
local_24 = local_24 + iVar3;
iVar10 = iVar10 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00664040 at 0x00664040 (size: 371) ---
void FUN_00664040(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
int iVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar16;
undefined6 uVar15;
ushort uVar17;
ushort uVar18;
ushort uVar19;
short sVar20;
uint local_20;
int local_18;
iVar10 = *(int *)(param_1 + 0x14);
iVar11 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar13 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pbVar8 = (byte *)(iVar2 * 3 + 2 + iVar10);
iVar12 = iVar2;
do {
iVar1 = iVar12 * 4;
iVar12 = iVar12 + -1;
iVar7 = 0x100;
pbVar9 = pbVar8 + -3;
local_20 = *(uint *)(iVar11 + -4 + iVar1) & 0xffffff;
if ((iVar13 == 0x100) || (iVar7 = iVar13 * 0x100 >> 8, iVar7 != 0)) {
uVar17 = *(ushort *)(pbVar8 + -5);
uVar6 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar14 = uVar17 & 0xff;
uVar19 = (ushort)(byte)(local_20 >> 0x10);
uVar18 = (ushort)(byte)(local_20 >> 8);
sVar16 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar17 >> 8),uVar17)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar17 = (ushort)(((ushort)(byte)local_20 + (ushort)((byte)local_20 != 0)) * uVar14)
>> 8;
uVar18 = (ushort)((uVar18 + (uVar18 != 0)) * sVar16) >> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * uVar6) >> 8;
uVar15 = CONCAT24(uVar19,CONCAT22(uVar18,uVar17));
if (iVar7 != 0x100) {
sVar20 = (short)iVar7;
uVar15 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar20) >> 8) -
((ushort)(uVar19 * sVar20) >> 8)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar20) >> 8) -
((ushort)(uVar18 * sVar20) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar20) >> 8) -
((ushort)(uVar17 * sVar20) >> 8))));
}
sVar16 = (short)uVar15;
sVar20 = (short)((uint6)uVar15 >> 0x10);
sVar5 = (short)((uint6)uVar15 >> 0x20);
pbVar8[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar15 - (0xff < sVar16);
pbVar8[-4] = (0 < sVar20) * (sVar20 < 0x100) * (char)((uint6)uVar15 >> 0x10) -
(0xff < sVar20);
*pbVar9 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar15 >> 0x20) -
(0xff < sVar5);
}
pbVar8 = pbVar9;
} while (iVar12 != 0);
}
iVar11 = iVar11 + iVar3;
iVar10 = iVar10 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_006641c0 at 0x006641C0 (size: 336) ---
void FUN_006641c0(int param_1)
{
ushort *puVar1;
int iVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
ulonglong uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
byte *pbVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar17;
uint5 uVar16;
short sVar18;
ushort uVar19;
ushort uVar21;
ushort uVar22;
ulonglong uVar20;
short sVar23;
ushort local_20;
int local_18;
iVar10 = *(int *)(param_1 + 8);
iVar11 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar13 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pbVar12 = (byte *)(iVar2 * 3 + 2 + iVar10);
iVar9 = iVar2;
do {
puVar1 = (ushort *)(pbVar12 + -5);
uVar19 = *puVar1;
pbVar12 = pbVar12 + -3;
local_20 = (ushort)(byte)*puVar1;
iVar8 = 0x100;
iVar9 = iVar9 + -1;
if ((iVar13 == 0x100) || (iVar8 = iVar13 * 0x100 >> 8, iVar8 != 0)) {
uVar5 = *(undefined4 *)(iVar11 + iVar9 * 4);
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar16 = (uint5)uVar6 & 0xffffffff00;
uVar20 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar5 & 0xff;
uVar21 = uVar19 >> 8;
uVar7 = uVar20 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar20 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
uVar19 = (ushort)((local_20 + ((char)uVar19 != '\0')) * uVar14) >> 8;
uVar21 = (ushort)((uVar21 + (uVar21 != 0)) * sVar15) >> 8;
uVar22 = (ushort)(((ushort)*pbVar12 + (ushort)(*pbVar12 != 0)) * sVar17) >> 8;
uVar20 = (ulonglong)CONCAT24(uVar22,CONCAT22(uVar21,uVar19)) | uVar7 << 0x10;
if (iVar8 != 0x100) {
sVar23 = (short)iVar8;
uVar20 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar23) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar23) >> 8)),
CONCAT24(sVar17 - (((ushort)(sVar17 * sVar23) >> 8) -
((ushort)(uVar22 * sVar23) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar23) >> 8) -
((ushort)(uVar21 * sVar23) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar23) >> 8) -
((ushort)(uVar19 * sVar23) >> 8)))));
}
sVar15 = (short)uVar20;
sVar17 = (short)(uVar20 >> 0x10);
sVar18 = (short)(uVar20 >> 0x20);
sVar23 = (short)(uVar20 >> 0x30);
*(uint *)(iVar11 + iVar9 * 4) =
CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)(uVar20 >> 0x30) -
(0xff < sVar23),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar20 >> 0x20) -
(0xff < sVar18),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)(uVar20 >> 0x10) - (0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar20 -
(0xff < sVar15))));
}
} while (iVar9 != 0);
}
iVar10 = iVar10 + iVar3;
iVar11 = iVar11 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00664320 at 0x00664320 (size: 414) ---
void FUN_00664320(int param_1)
{
byte *pbVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
int iVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
int iVar12;
ushort uVar13;
short sVar15;
undefined6 uVar14;
ushort uVar16;
ushort uVar17;
ushort uVar18;
short sVar19;
int local_24;
int local_20;
int local_18;
local_24 = *(int *)(param_1 + 0x14);
iVar11 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar10 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
iVar12 = iVar2 * 3 + iVar11;
pbVar8 = (byte *)(iVar2 * 3 + 2 + local_24);
local_20 = iVar2;
do {
pbVar1 = (byte *)(iVar12 + -3);
pbVar9 = pbVar8 + -3;
iVar12 = iVar12 + -3;
iVar7 = 0x100;
if ((iVar10 == 0x100) || (iVar7 = iVar10 * 0x100 >> 8, iVar7 != 0)) {
uVar16 = *(ushort *)(pbVar8 + -5);
uVar6 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar13 = uVar16 & 0xff;
sVar15 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar16 >> 8),uVar16)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar16 = (ushort)(((ushort)*pbVar1 + (ushort)(*pbVar1 != 0)) * uVar13) >> 8;
uVar17 = (ushort)(((ushort)pbVar8[(iVar11 - local_24) + -4] +
(ushort)(pbVar8[(iVar11 - local_24) + -4] != 0)) * sVar15) >> 8;
uVar18 = (ushort)(((ushort)pbVar9[iVar11 - local_24] +
(ushort)(pbVar9[iVar11 - local_24] != 0)) * uVar6) >> 8;
uVar14 = CONCAT24(uVar18,CONCAT22(uVar17,uVar16));
if (iVar7 != 0x100) {
sVar19 = (short)iVar7;
uVar14 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar19) >> 8) -
((ushort)(uVar18 * sVar19) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar19) >> 8) -
((ushort)(uVar17 * sVar19) >> 8)),
uVar13 - (((ushort)(uVar13 * sVar19) >> 8) -
((ushort)(uVar16 * sVar19) >> 8))));
}
sVar15 = (short)uVar14;
sVar19 = (short)((uint6)uVar14 >> 0x10);
sVar5 = (short)((uint6)uVar14 >> 0x20);
pbVar8[-5] = (0 < sVar15) * (sVar15 < 0x100) * (char)uVar14 - (0xff < sVar15);
pbVar8[-4] = (0 < sVar19) * (sVar19 < 0x100) * (char)((uint6)uVar14 >> 0x10) -
(0xff < sVar19);
*pbVar9 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar14 >> 0x20) -
(0xff < sVar5);
}
local_20 = local_20 + -1;
pbVar8 = pbVar9;
} while (local_20 != 0);
}
local_24 = local_24 + iVar4;
iVar11 = iVar11 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_006644c0 at 0x006644C0 (size: 348) ---
void FUN_006644c0(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
undefined4 uVar5;
uint uVar6;
ushort uVar7;
ulonglong uVar8;
ushort uVar9;
uint uVar10;
undefined4 *puVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar17;
uint5 uVar16;
short sVar18;
byte bVar19;
ulonglong uVar20;
short sVar21;
ulonglong uVar22;
int local_28;
int local_24;
int local_1c;
local_28 = *(int *)(param_1 + 8);
iVar12 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar13 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar11 = (undefined4 *)(iVar12 + iVar1 * 4);
local_24 = iVar1;
do {
uVar4 = *(uint *)((local_28 - iVar12) + -4 + (int)puVar11);
puVar11 = puVar11 + -1;
uVar10 = uVar4 >> 0x18;
if (iVar13 != 0x100) {
uVar10 = (int)(uVar10 * iVar13) >> 8;
}
if (uVar10 != 0) {
uVar5 = *puVar11;
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar16 = (uint5)uVar6 & 0xffffffff00;
uVar20 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar5 & 0xff;
uVar9 = (ushort)(byte)(uVar4 >> 0x10);
uVar7 = (ushort)(byte)(uVar4 >> 8);
bVar19 = (byte)uVar4;
uVar8 = uVar20 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar20 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
uVar22 = (ulonglong)
CONCAT24((sVar17 + uVar9) - ((ushort)((uVar9 + (uVar9 != 0)) * sVar17) >> 8),
CONCAT22((sVar15 + uVar7) -
((ushort)((uVar7 + (uVar7 != 0)) * sVar15) >> 8),
(uVar14 + bVar19) -
((ushort)(((ushort)bVar19 + (ushort)(bVar19 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
uVar20 = uVar22 | uVar8 << 0x10;
if (uVar10 + 1 != 0x100) {
sVar21 = (short)(uVar10 + 1);
uVar20 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar21) >> 8) -
((ushort)((short)(uVar8 >> 0x20) * sVar21) >> 8)),
CONCAT24(sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8
)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) *
sVar21) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8)
))));
}
sVar15 = (short)uVar20;
sVar17 = (short)(uVar20 >> 0x10);
sVar18 = (short)(uVar20 >> 0x20);
sVar21 = (short)(uVar20 >> 0x30);
*puVar11 = CONCAT13((0 < sVar21) * (sVar21 < 0x100) * (char)(uVar20 >> 0x30) -
(0xff < sVar21),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar20 >> 0x20)
- (0xff < sVar18),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)(uVar20 >> 0x10) - (0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar20 -
(0xff < sVar15))));
}
local_24 = local_24 + -1;
} while (local_24 != 0);
}
local_28 = local_28 + iVar2;
iVar12 = iVar12 + iVar3;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_00664620 at 0x00664620 (size: 394) ---
void FUN_00664620(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
short sVar5;
ushort uVar6;
ushort uVar7;
ushort uVar8;
ushort uVar9;
uint uVar10;
byte *pbVar11;
byte *pbVar12;
int iVar13;
int iVar14;
int iVar15;
ushort uVar16;
short sVar17;
byte bVar18;
short sVar19;
ulonglong uVar20;
int local_24;
int local_1c;
local_24 = *(int *)(param_1 + 8);
iVar13 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_1c = *(int *)(param_1 + 0x20);
iVar14 = *(byte *)(param_1 + 0x24) + 1;
if (local_1c != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pbVar11 = (byte *)(iVar1 * 3 + 2 + iVar13);
iVar15 = iVar1;
do {
uVar4 = *(uint *)(local_24 + -4 + iVar15 * 4);
iVar15 = iVar15 + -1;
pbVar12 = pbVar11 + -3;
uVar10 = uVar4 >> 0x18;
if (iVar14 != 0x100) {
uVar10 = (int)(uVar10 * iVar14) >> 8;
}
if (uVar10 != 0) {
uVar9 = *(ushort *)(pbVar11 + -5);
uVar8 = (ushort)(((uint5)*pbVar12 << 0x20) >> 0x18);
uVar16 = uVar9 & 0xff;
uVar7 = (ushort)(byte)(uVar4 >> 0x10);
uVar6 = (ushort)(byte)(uVar4 >> 8);
bVar18 = (byte)uVar4;
sVar17 = (short)(CONCAT23(uVar8,CONCAT12((char)(uVar9 >> 8),uVar9)) >> 0x10);
uVar8 = uVar8 >> 8;
uVar20 = (ulonglong)
CONCAT24((uVar8 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * uVar8) >> 8),
CONCAT22((sVar17 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar17) >> 8),
(uVar16 + bVar18) -
((ushort)(((ushort)bVar18 + (ushort)(bVar18 != 0)) * uVar16
) >> 8))) & 0xff00ff00ff;
if (uVar10 + 1 != 0x100) {
sVar19 = (short)(uVar10 + 1);
uVar20 = (ulonglong)
CONCAT24(uVar8 - (((ushort)(uVar8 * sVar19) >> 8) -
((ushort)((short)(uVar20 >> 0x20) * sVar19) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar19) >> 8) -
((ushort)((short)(uVar20 >> 0x10) * sVar19) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar19) >> 8) -
((ushort)((short)uVar20 * sVar19) >> 8))));
}
sVar17 = (short)uVar20;
sVar19 = (short)(uVar20 >> 0x10);
sVar5 = (short)(uVar20 >> 0x20);
pbVar11[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar20 - (0xff < sVar17);
pbVar11[-4] = (0 < sVar19) * (sVar19 < 0x100) * (char)(uVar20 >> 0x10) -
(0xff < sVar19);
*pbVar12 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar20 >> 0x20) - (0xff < sVar5);
}
pbVar11 = pbVar12;
} while (iVar15 != 0);
}
local_24 = local_24 + iVar2;
iVar13 = iVar13 + iVar3;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_006647b0 at 0x006647B0 (size: 354) ---
void FUN_006647b0(int param_1)
{
uint *puVar1;
int iVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
ushort uVar7;
ulonglong uVar8;
ushort uVar9;
int iVar10;
undefined4 *puVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar17;
uint5 uVar16;
short sVar18;
byte bVar19;
ulonglong uVar20;
short sVar21;
ulonglong uVar22;
int local_24;
uint local_20;
int local_1c;
int local_18;
local_24 = *(int *)(param_1 + 8);
iVar12 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar13 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
puVar11 = (undefined4 *)(iVar12 + iVar2 * 4);
local_1c = iVar2;
do {
puVar1 = (uint *)((local_24 - iVar12) + -4 + (int)puVar11);
puVar11 = puVar11 + -1;
local_20 = *puVar1 & 0xffffff;
iVar10 = 0xff;
if ((iVar13 == 0x100) || (iVar10 = iVar13 * 0xff >> 8, iVar10 != 0)) {
uVar5 = *puVar11;
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar16 = (uint5)uVar6 & 0xffffffff00;
uVar20 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar5 & 0xff;
uVar9 = (ushort)(byte)(local_20 >> 0x10);
uVar7 = (ushort)(byte)(local_20 >> 8);
bVar19 = (byte)local_20;
uVar8 = uVar20 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar20 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
uVar22 = (ulonglong)
CONCAT24((sVar17 + uVar9) - ((ushort)((uVar9 + (uVar9 != 0)) * sVar17) >> 8),
CONCAT22((sVar15 + uVar7) -
((ushort)((uVar7 + (uVar7 != 0)) * sVar15) >> 8),
(uVar14 + bVar19) -
((ushort)(((ushort)bVar19 + (ushort)(bVar19 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
uVar20 = uVar22 | uVar8 << 0x10;
if (iVar10 + 1 != 0x100) {
sVar21 = (short)(iVar10 + 1);
uVar20 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar21) >> 8) -
((ushort)((short)(uVar8 >> 0x20) * sVar21) >> 8)),
CONCAT24(sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8
)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) *
sVar21) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8)
))));
}
sVar15 = (short)uVar20;
sVar17 = (short)(uVar20 >> 0x10);
sVar18 = (short)(uVar20 >> 0x20);
sVar21 = (short)(uVar20 >> 0x30);
*puVar11 = CONCAT13((0 < sVar21) * (sVar21 < 0x100) * (char)(uVar20 >> 0x30) -
(0xff < sVar21),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar20 >> 0x20)
- (0xff < sVar18),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)(uVar20 >> 0x10) - (0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar20 -
(0xff < sVar15))));
}
local_1c = local_1c + -1;
} while (local_1c != 0);
}
local_24 = local_24 + iVar3;
iVar12 = iVar12 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00664920 at 0x00664920 (size: 394) ---
void FUN_00664920(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
short sVar4;
ushort uVar5;
ushort uVar6;
ushort uVar7;
ushort uVar8;
int iVar9;
byte *pbVar10;
byte *pbVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
ushort uVar16;
short sVar17;
byte bVar18;
short sVar19;
ulonglong uVar20;
uint local_20;
int local_18;
iVar12 = *(int *)(param_1 + 0x14);
iVar13 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar15 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pbVar10 = (byte *)(iVar1 * 3 + 2 + iVar12);
iVar14 = iVar1;
do {
iVar9 = iVar14 * 4;
iVar14 = iVar14 + -1;
pbVar11 = pbVar10 + -3;
local_20 = *(uint *)(iVar13 + -4 + iVar9) & 0xffffff;
iVar9 = 0xff;
if ((iVar15 == 0x100) || (iVar9 = iVar15 * 0xff >> 8, iVar9 != 0)) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar7 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar16 = uVar8 & 0xff;
uVar6 = (ushort)(byte)(local_20 >> 0x10);
uVar5 = (ushort)(byte)(local_20 >> 8);
bVar18 = (byte)local_20;
sVar17 = (short)(CONCAT23(uVar7,CONCAT12((char)(uVar8 >> 8),uVar8)) >> 0x10);
uVar7 = uVar7 >> 8;
uVar20 = (ulonglong)
CONCAT24((uVar7 + uVar6) - ((ushort)((uVar6 + (uVar6 != 0)) * uVar7) >> 8),
CONCAT22((sVar17 + uVar5) -
((ushort)((uVar5 + (uVar5 != 0)) * sVar17) >> 8),
(uVar16 + bVar18) -
((ushort)(((ushort)bVar18 + (ushort)(bVar18 != 0)) * uVar16
) >> 8))) & 0xff00ff00ff;
if (iVar9 + 1 != 0x100) {
sVar19 = (short)(iVar9 + 1);
uVar20 = (ulonglong)
CONCAT24(uVar7 - (((ushort)(uVar7 * sVar19) >> 8) -
((ushort)((short)(uVar20 >> 0x20) * sVar19) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar19) >> 8) -
((ushort)((short)(uVar20 >> 0x10) * sVar19) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar19) >> 8) -
((ushort)((short)uVar20 * sVar19) >> 8))));
}
sVar17 = (short)uVar20;
sVar19 = (short)(uVar20 >> 0x10);
sVar4 = (short)(uVar20 >> 0x20);
pbVar10[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar20 - (0xff < sVar17);
pbVar10[-4] = (0 < sVar19) * (sVar19 < 0x100) * (char)(uVar20 >> 0x10) -
(0xff < sVar19);
*pbVar11 = (0 < sVar4) * (sVar4 < 0x100) * (char)(uVar20 >> 0x20) - (0xff < sVar4);
}
pbVar10 = pbVar11;
} while (iVar14 != 0);
}
iVar13 = iVar13 + iVar2;
iVar12 = iVar12 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00664ab0 at 0x00664AB0 (size: 363) ---
void FUN_00664ab0(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
uint uVar5;
ulonglong uVar6;
ushort uVar7;
ushort uVar8;
ushort uVar9;
int iVar10;
byte *pbVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
ushort uVar16;
short sVar17;
short sVar19;
uint5 uVar18;
short sVar20;
ulonglong uVar21;
short sVar22;
ulonglong uVar23;
int local_18;
iVar12 = *(int *)(param_1 + 8);
iVar13 = *(int *)(param_1 + 0x14);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar15 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
pbVar11 = (byte *)(iVar1 * 3 + 2 + iVar12);
iVar14 = iVar1;
do {
uVar8 = *(ushort *)(pbVar11 + -5);
pbVar11 = pbVar11 + -3;
iVar14 = iVar14 + -1;
iVar10 = 0xff;
if ((iVar15 == 0x100) || (iVar10 = iVar15 * 0xff >> 8, iVar10 != 0)) {
uVar4 = *(undefined4 *)(iVar13 + iVar14 * 4);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar21 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar16 = (ushort)uVar4 & 0xff;
uVar7 = (ushort)*pbVar11;
uVar9 = uVar8 >> 8;
uVar6 = uVar21 >> 0x10 & 0xffffff00ff00;
sVar17 = (short)(uVar21 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
uVar23 = (ulonglong)
CONCAT24((sVar19 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * sVar19) >> 8),
CONCAT22((sVar17 + uVar9) -
((ushort)((uVar9 + (uVar9 != 0)) * sVar17) >> 8),
(uVar16 + (uVar8 & 0xff)) -
((ushort)(((uVar8 & 0xff) + (ushort)((char)uVar8 != '\0'))
* uVar16) >> 8))) & 0xff00ff00ff;
uVar21 = uVar23 | uVar6 << 0x10;
if (iVar10 + 1 != 0x100) {
sVar22 = (short)(iVar10 + 1);
uVar21 = CONCAT26(sVar20 - (((ushort)(sVar20 * sVar22) >> 8) -
((ushort)((short)(uVar6 >> 0x20) * sVar22) >> 8)),
CONCAT24(sVar19 - (((ushort)(sVar19 * sVar22) >> 8) -
((ushort)((short)(uVar23 >> 0x20) * sVar22) >> 8
)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar22) >> 8) -
((ushort)((short)(uVar23 >> 0x10) *
sVar22) >> 8)),
uVar16 - (((ushort)(uVar16 * sVar22) >> 8) -
((ushort)((short)uVar23 * sVar22) >> 8)
))));
}
sVar17 = (short)uVar21;
sVar19 = (short)(uVar21 >> 0x10);
sVar20 = (short)(uVar21 >> 0x20);
sVar22 = (short)(uVar21 >> 0x30);
*(uint *)(iVar13 + iVar14 * 4) =
CONCAT13((0 < sVar22) * (sVar22 < 0x100) * (char)(uVar21 >> 0x30) -
(0xff < sVar22),
CONCAT12((0 < sVar20) * (sVar20 < 0x100) * (char)(uVar21 >> 0x20) -
(0xff < sVar20),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)(uVar21 >> 0x10) - (0xff < sVar19),
(0 < sVar17) * (sVar17 < 0x100) * (char)uVar21 -
(0xff < sVar17))));
}
} while (iVar14 != 0);
}
iVar12 = iVar12 + iVar2;
iVar13 = iVar13 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00664c30 at 0x00664C30 (size: 437) ---
void FUN_00664c30(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
ushort uVar7;
ushort uVar8;
ushort uVar9;
int iVar10;
byte *pbVar11;
byte *pbVar12;
int iVar13;
int iVar14;
int iVar15;
ushort uVar16;
short sVar17;
short sVar18;
ulonglong uVar19;
int local_24;
int local_20;
int local_18;
local_24 = *(int *)(param_1 + 0x14);
iVar14 = *(int *)(param_1 + 8);
if (*(byte *)(param_1 + 0x24) != 0) {
local_18 = *(int *)(param_1 + 0x20);
iVar13 = *(byte *)(param_1 + 0x24) + 1;
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
iVar15 = iVar2 * 3 + iVar14;
pbVar11 = (byte *)(iVar2 * 3 + 2 + local_24);
local_20 = iVar2;
do {
bVar1 = *(byte *)(iVar15 + -3);
iVar15 = iVar15 + -3;
pbVar12 = pbVar11 + -3;
iVar10 = 0xff;
if ((iVar13 == 0x100) || (iVar10 = iVar13 * 0xff >> 8, iVar10 != 0)) {
uVar9 = *(ushort *)(pbVar11 + -5);
uVar8 = (ushort)(((uint5)*pbVar12 << 0x20) >> 0x18);
uVar16 = uVar9 & 0xff;
uVar7 = (ushort)pbVar12[iVar14 - local_24];
uVar6 = (ushort)pbVar11[(iVar14 - local_24) + -4];
sVar17 = (short)(CONCAT23(uVar8,CONCAT12((char)(uVar9 >> 8),uVar9)) >> 0x10);
uVar8 = uVar8 >> 8;
uVar19 = (ulonglong)
CONCAT24((uVar8 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * uVar8) >> 8),
CONCAT22((sVar17 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar17) >> 8),
(uVar16 + bVar1) -
((ushort)(((ushort)bVar1 + (ushort)(bVar1 != 0)) * uVar16)
>> 8))) & 0xff00ff00ff;
if (iVar10 + 1 != 0x100) {
sVar18 = (short)(iVar10 + 1);
uVar19 = (ulonglong)
CONCAT24(uVar8 - (((ushort)(uVar8 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8))));
}
sVar17 = (short)uVar19;
sVar18 = (short)(uVar19 >> 0x10);
sVar5 = (short)(uVar19 >> 0x20);
pbVar11[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar19 - (0xff < sVar17);
pbVar11[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar19 >> 0x10) -
(0xff < sVar18);
*pbVar12 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar19 >> 0x20) - (0xff < sVar5);
}
local_20 = local_20 + -1;
pbVar11 = pbVar12;
} while (local_20 != 0);
}
local_24 = local_24 + iVar4;
iVar14 = iVar14 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00664e70 at 0x00664E70 (size: 173) ---
void FUN_00664e70(int param_1)
{
int iVar1;
int iVar2;
undefined1 uVar3;
undefined1 *puVar4;
undefined1 uVar5;
undefined1 uVar6;
int iVar7;
int iVar8;
int iVar9;
uVar5 = (undefined1)DAT_008f86b0;
uVar6 = (undefined1)((uint)DAT_008f86b0 >> 8);
uVar3 = DAT_008f86b0._2_1_;
if (*(int *)(param_1 + 8) == 0) {
iVar8 = *(int *)(param_1 + 0x20);
iVar7 = *(int *)(param_1 + 0x14);
if (iVar8 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar4 = (undefined1 *)(iVar1 * 3 + 2 + iVar7);
iVar9 = iVar1;
do {
iVar9 = iVar9 + -1;
puVar4[-5] = uVar5;
puVar4[-4] = uVar6;
puVar4[-3] = uVar3;
puVar4 = puVar4 + -3;
} while (iVar9 != 0);
}
iVar7 = iVar7 - iVar2;
iVar8 = iVar8 + -1;
} while (iVar8 != 0);
}
}
else {
iVar8 = *(int *)(param_1 + 0x20);
iVar7 = *(int *)(param_1 + 0x14);
if (iVar8 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
puVar4 = (undefined1 *)(iVar1 * 3 + 2 + iVar7);
iVar9 = iVar1;
do {
iVar9 = iVar9 + -1;
puVar4[-5] = uVar5;
puVar4[-4] = uVar6;
puVar4[-3] = uVar3;
puVar4 = puVar4 + -3;
} while (iVar9 != 0);
}
iVar7 = iVar7 + iVar2;
iVar8 = iVar8 + -1;
} while (iVar8 != 0);
}
}
return;
}
// --- FUN_00664f20 at 0x00664F20 (size: 246) ---
void FUN_00664f20(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uint *puVar7;
uint uVar8;
int iVar9;
uint uVar10;
int iVar11;
int local_c;
uVar5 = DAT_008f86b0;
local_c = *(int *)(param_1 + 0x20);
iVar9 = *(int *)(param_1 + 0x14);
iVar11 = *(int *)(param_1 + 8);
if (local_c != 0) {
iVar2 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
uVar8 = *(uint *)(param_1 + 0x1c) >> 2;
uVar6 = *(uint *)(param_1 + 0x1c) & 3;
do {
if (uVar8 != 0) {
puVar7 = (uint *)(uVar8 * 0x10 + iVar9);
uVar10 = uVar8;
do {
uVar4 = *(uint *)(iVar11 + -4 + uVar10 * 4);
uVar10 = uVar10 - 1;
puVar7[-1] = uVar4 & 0xff000000 | uVar5;
puVar7[-2] = (uVar4 & 0xff0000) << 8 | uVar5;
puVar7[-3] = (uVar4 & 0xff00) << 0x10 | uVar5;
puVar7[-4] = uVar4 << 0x18 | uVar5;
puVar7 = puVar7 + -4;
} while (uVar10 != 0);
}
if (uVar6 != 0) {
uVar10 = uVar6;
while (uVar10 != 0) {
iVar1 = uVar10 - 1;
uVar10 = uVar10 - 1;
*(uint *)(uVar8 * 0x10 + iVar9 + uVar10 * 4) =
(uint)*(byte *)(iVar1 + iVar11 + uVar8 * 4) << 0x18 | uVar5;
}
}
iVar11 = iVar11 + iVar2;
iVar9 = iVar9 + iVar3;
local_c = local_c + -1;
} while (local_c != 0);
}
return;
}
// --- FUN_00665020 at 0x00665020 (size: 331) ---
void FUN_00665020(int param_1)
{
int iVar1;
undefined4 uVar2;
undefined1 *puVar3;
uint uVar4;
undefined1 uVar5;
undefined1 uVar7;
uint uVar8;
uint uVar9;
int local_14;
int local_c;
undefined1 uVar6;
uVar2 = DAT_008f86b0;
local_c = *(int *)(param_1 + 0x20);
local_14 = *(int *)(param_1 + 0x14);
if (local_c != 0) {
iVar1 = *(int *)(param_1 + 0x18);
uVar8 = *(uint *)(param_1 + 0x1c) >> 2;
uVar4 = *(uint *)(param_1 + 0x1c) & 3;
do {
uVar5 = (undefined1)uVar2;
uVar7 = (undefined1)((uint)uVar2 >> 8);
uVar6 = (undefined1)((uint)uVar2 >> 0x10);
if (uVar8 != 0) {
puVar3 = (undefined1 *)(local_14 + 0xb + uVar8 * 0xc);
uVar9 = uVar8;
do {
uVar9 = uVar9 - 1;
puVar3[-0xe] = uVar5;
puVar3[-0xd] = uVar7;
puVar3[-0xc] = uVar6;
puVar3[-0x11] = uVar5;
puVar3[-0x10] = uVar7;
puVar3[-0xf] = uVar6;
puVar3[-0x14] = uVar5;
puVar3[-0x13] = uVar7;
puVar3[-0x17] = uVar5;
puVar3[-0x16] = uVar7;
puVar3[-0x12] = uVar6;
puVar3[-0x15] = uVar6;
puVar3 = puVar3 + -0xc;
} while (uVar9 != 0);
}
if (uVar4 != 0) {
puVar3 = (undefined1 *)(uVar4 * 3 + 2 + local_14 + uVar8 * 0xc);
uVar9 = uVar4;
do {
uVar9 = uVar9 - 1;
puVar3[-5] = uVar5;
puVar3[-4] = uVar7;
puVar3[-3] = uVar6;
puVar3 = puVar3 + -3;
} while (uVar9 != 0);
}
local_14 = local_14 + iVar1;
local_c = local_c + -1;
} while (local_c != 0);
}
return;
}
// --- FUN_00665320 at 0x00665320 (size: 540) ---
void FUN_00665320(int param_1)
{
byte bVar1;
int iVar2;
uint uVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uint uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar13;
short sVar15;
short sVar17;
uint5 uVar16;
short sVar18;
short sVar19;
undefined2 uVar20;
undefined1 uVar23;
ulonglong uVar21;
undefined4 local_18;
undefined4 local_10;
ulonglong uVar14;
undefined1 uVar22;
uVar4 = DAT_008f86b0;
iVar11 = *(int *)(param_1 + 0x14);
uVar22 = (undefined1)(DAT_008f86b0 >> 8);
uVar23 = (undefined1)(DAT_008f86b0 >> 0x10);
uVar20 = (undefined2)DAT_008f86b0;
if (*(int *)(param_1 + 8) == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
local_10 = *(int *)(param_1 + 0x20);
local_18 = CONCAT13(bVar1,(int3)DAT_008f86b0);
if (local_10 != 0) {
iVar10 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar10 != 0) {
iVar8 = iVar10;
do {
iVar8 = iVar8 + -1;
if (bVar1 != 0) {
uVar4 = *(uint *)(iVar11 + iVar8 * 4);
sVar13 = bVar1 + 1;
if (sVar13 == 0x100) {
*(uint *)(iVar11 + iVar8 * 4) = (uVar4 ^ local_18) & 0xffffff ^ uVar4;
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar4 >> 0x10),uVar4)) >>
0x20),uVar4) >> 0x18);
uVar16 = (uint5)uVar6 & 0xffffffff00;
uVar14 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)(uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar4 & 0xff;
uVar21 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar23,local_18) >> 0x18),
CONCAT12(uVar22,uVar20)) >> 0x10,uVar20) & 0xff00ff00ff;
sVar17 = (short)(uVar14 >> 0x10);
sVar18 = (short)(uVar16 >> 8);
sVar19 = (short)(uVar16 >> 0x18);
sVar15 = uVar12 - (((ushort)(uVar12 * sVar13) >> 8) -
((ushort)((short)uVar21 * sVar13) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar13) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar13) >> 8));
sVar18 = sVar18 - (((ushort)(sVar18 * sVar13) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar13) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar13) >> 8) -
((ushort)((short)(uVar14 >> 0x30) * sVar13) >> 8));
*(uint *)(iVar11 + iVar8 * 4) =
CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 - (0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 -
(0xff < sVar18),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15))));
}
}
} while (iVar8 != 0);
}
iVar11 = iVar11 - iVar2;
local_10 = local_10 + -1;
} while (local_10 != 0);
}
}
else {
iVar10 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar8 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
uVar6 = DAT_008f86b0 >> 0x18;
iVar9 = iVar2;
do {
iVar9 = iVar9 + -1;
uVar7 = uVar6;
if (iVar10 != 0x100) {
uVar7 = (int)(uVar6 * iVar10) >> 8;
}
if (uVar7 != 0) {
uVar3 = *(uint *)(iVar11 + iVar9 * 4);
if (uVar7 + 1 == 0x100) {
*(uint *)(iVar11 + iVar9 * 4) = (uVar4 ^ uVar3) & 0xffffff ^ uVar3;
}
else {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar3 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar3 >> 0x10),uVar3)) >>
0x20),uVar3) >> 0x18);
uVar16 = (uint5)uVar5 & 0xffffffff00;
uVar14 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)(uVar3 >> 8),(ushort)uVar3)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar3 & 0xff;
uVar21 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar23,uVar4) >> 0x18),
CONCAT12(uVar22,uVar20)) >> 0x10,uVar20) & 0xff00ff00ff;
sVar19 = (short)(uVar7 + 1);
sVar15 = (short)(uVar14 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
sVar13 = uVar12 - (((ushort)(uVar12 * sVar19) >> 8) -
((ushort)((short)uVar21 * sVar19) >> 8));
sVar15 = sVar15 - (((ushort)(sVar15 * sVar19) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar19) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar19) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar19) >> 8));
sVar18 = sVar18 - (((ushort)(sVar18 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x30) * sVar19) >> 8));
*(uint *)(iVar11 + iVar9 * 4) =
CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 - (0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15),
(0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13))));
}
}
} while (iVar9 != 0);
}
iVar11 = iVar11 + iVar8;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00665550 at 0x00665550 (size: 712) ---
void FUN_00665550(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
uint uVar4;
ushort uVar5;
ushort uVar6;
uint uVar7;
uint uVar8;
char *pcVar9;
char *pcVar10;
int iVar11;
short sVar12;
short sVar13;
short sVar14;
undefined2 uVar15;
undefined1 uVar18;
ulonglong uVar16;
uint local_24;
undefined4 local_20;
int local_18;
int local_14;
int local_10;
undefined1 uVar17;
uVar7 = DAT_008f86b0;
uVar17 = (undefined1)(DAT_008f86b0 >> 8);
uVar18 = (undefined1)(DAT_008f86b0 >> 0x10);
uVar15 = (undefined2)DAT_008f86b0;
if (*(int *)(param_1 + 8) == 0) {
iVar11 = *(int *)(param_1 + 0x14);
bVar1 = *(byte *)(param_1 + 0x24);
local_20 = CONCAT13(bVar1,(int3)DAT_008f86b0);
local_10 = *(int *)(param_1 + 0x20);
if (local_10 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pcVar9 = (char *)(iVar2 * 3 + 2 + iVar11);
local_14 = iVar2;
do {
pcVar10 = pcVar9 + -3;
if (bVar1 != 0) {
uVar6 = (ushort)*(uint3 *)(pcVar9 + -5);
sVar12 = bVar1 + 1;
local_24 = (uint)*(uint3 *)(pcVar9 + -5);
if (sVar12 == 0x100) {
local_24 = (local_24 ^ local_20) & 0xffffff ^ local_24;
pcVar9[-5] = (char)local_24;
pcVar9[-4] = (char)(local_24 >> 8);
*pcVar10 = (char)(local_24 >> 0x10);
}
else {
uVar5 = (ushort)(CONCAT14(*pcVar10,local_24) >> 0x18);
uVar16 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar18,local_20) >> 0x18),
CONCAT12(uVar17,uVar15)) >> 0x10,uVar15) & 0xff00ff00ff;
sVar14 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar13 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar12) >> 8) -
((ushort)((short)uVar16 * sVar12) >> 8));
sVar14 = sVar14 - (((ushort)(sVar14 * sVar12) >> 8) -
((ushort)((short)(uVar16 >> 0x10) * sVar12) >> 8));
sVar12 = uVar5 - (((ushort)(uVar5 * sVar12) >> 8) -
((ushort)((short)(uVar16 >> 0x20) * sVar12) >> 8));
pcVar9[-5] = (0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 - (0xff < sVar13);
pcVar9[-4] = (0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14);
*pcVar10 = (0 < sVar12) * (sVar12 < 0x100) * (char)sVar12 - (0xff < sVar12);
}
}
local_14 = local_14 + -1;
pcVar9 = pcVar10;
} while (local_14 != 0);
}
iVar11 = iVar11 - iVar3;
local_10 = local_10 + -1;
} while (local_10 != 0);
}
}
else {
local_20 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
iVar11 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
if (local_14 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
uVar4 = DAT_008f86b0 >> 0x18;
pcVar9 = (char *)(iVar2 * 3 + 2 + local_20);
local_18 = iVar2;
do {
pcVar10 = pcVar9 + -3;
uVar8 = uVar4;
if (iVar11 != 0x100) {
uVar8 = (int)(uVar4 * iVar11) >> 8;
}
if (uVar8 != 0) {
uVar6 = (ushort)*(uint3 *)(pcVar9 + -5);
local_24 = (uint)*(uint3 *)(pcVar9 + -5);
if (uVar8 + 1 == 0x100) {
local_24 = (uVar7 ^ local_24) & 0xffffff ^ local_24;
pcVar9[-5] = (char)local_24;
pcVar9[-4] = (char)(local_24 >> 8);
*pcVar10 = (char)(local_24 >> 0x10);
}
else {
uVar5 = (ushort)(CONCAT14(*pcVar10,local_24) >> 0x18);
uVar16 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar18,uVar7) >> 0x18),
CONCAT12(uVar17,uVar15)) >> 0x10,uVar15) & 0xff00ff00ff;
sVar14 = (short)(uVar8 + 1);
sVar13 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar12 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar14) >> 8) -
((ushort)((short)uVar16 * sVar14) >> 8));
sVar13 = sVar13 - (((ushort)(sVar13 * sVar14) >> 8) -
((ushort)((short)(uVar16 >> 0x10) * sVar14) >> 8));
sVar14 = uVar5 - (((ushort)(uVar5 * sVar14) >> 8) -
((ushort)((short)(uVar16 >> 0x20) * sVar14) >> 8));
pcVar9[-5] = (0 < sVar12) * (sVar12 < 0x100) * (char)sVar12 - (0xff < sVar12);
pcVar9[-4] = (0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 - (0xff < sVar13);
*pcVar10 = (0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14);
}
}
local_18 = local_18 + -1;
pcVar9 = pcVar10;
} while (local_18 != 0);
}
local_20 = local_20 + iVar3;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_00665820 at 0x00665820 (size: 653) ---
void FUN_00665820(int param_1)
{
int iVar1;
int iVar2;
uint uVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uint uVar7;
uint uVar8;
uint uVar9;
int iVar10;
int iVar11;
uint uVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar17;
short sVar19;
uint5 uVar18;
short sVar20;
short sVar21;
ulonglong uVar22;
int local_34;
int local_30;
int local_18;
ulonglong uVar16;
local_34 = *(int *)(param_1 + 8);
local_30 = *(int *)(param_1 + 0x14);
local_18 = *(int *)(param_1 + 0x20);
iVar10 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
if (local_18 != 0) {
iVar1 = *(int *)(param_1 + 0xc);
iVar2 = *(int *)(param_1 + 0x18);
uVar12 = *(uint *)(param_1 + 0x1c) >> 2;
uVar7 = *(uint *)(param_1 + 0x1c) & 3;
do {
if (uVar12 != 0) {
iVar13 = uVar12 * 0x10 + local_30;
uVar5 = uVar12;
do {
uVar9 = *(uint *)(local_34 + -4 + uVar5 * 4);
uVar5 = uVar5 - 1;
iVar13 = iVar13 + -0x10;
iVar11 = 3;
do {
uVar8 = uVar9 & 0xff000000 | DAT_008f86b0;
uVar6 = uVar8 >> 0x18;
if (iVar10 != 0x100) {
uVar6 = (int)(uVar6 * iVar10) >> 8;
}
if (uVar6 != 0) {
uVar3 = *(uint *)(iVar13 + iVar11 * 4);
if (uVar6 + 1 == 0x100) {
*(uint *)(iVar13 + iVar11 * 4) = (uVar3 ^ uVar8) & 0xffffff ^ uVar3;
}
else {
uVar4 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar3 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar3 >> 0x10),uVar3)) >>
0x20),uVar3) >> 0x18);
uVar18 = (uint5)uVar4 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar4,CONCAT12((char)(uVar3 >> 8),(ushort)uVar3)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar3 & 0xff;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar8) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar21 = (short)(uVar6 + 1);
sVar17 = (short)(uVar16 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar15 = uVar14 - (((ushort)(uVar14 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar21) >> 8));
*(uint *)(iVar13 + iVar11 * 4) =
CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 - (0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15))));
}
}
uVar9 = uVar9 << 8;
iVar11 = iVar11 + -1;
} while (-1 < iVar11);
} while (uVar5 != 0);
}
if (uVar7 != 0) {
iVar13 = uVar12 * 0x10 + local_30;
uVar5 = uVar7;
while (uVar5 != 0) {
iVar11 = uVar5 - 1;
uVar5 = uVar5 - 1;
uVar6 = (uint)*(byte *)(iVar11 + local_34 + uVar12 * 4) << 0x18 | DAT_008f86b0;
uVar9 = uVar6 >> 0x18;
if (iVar10 != 0x100) {
uVar9 = (int)(uVar9 * iVar10) >> 8;
}
if (uVar9 != 0) {
uVar8 = *(uint *)(iVar13 + uVar5 * 4);
if (uVar9 + 1 == 0x100) {
*(uint *)(iVar13 + uVar5 * 4) = (uVar8 ^ uVar6) & 0xffffff ^ uVar8;
}
else {
uVar3 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar8 >> 0x18) << 0x30)
>> 0x28),
CONCAT14((char)(uVar8 >> 0x10),uVar8)) >> 0x20
),uVar8) >> 0x18);
uVar18 = (uint5)uVar3 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar3,CONCAT12((char)(uVar8 >> 8),(ushort)uVar8)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar8 & 0xff;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar6) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0)) >>
0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar21 = (short)(uVar9 + 1);
sVar17 = (short)(uVar16 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar15 = uVar14 - (((ushort)(uVar14 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar21) >> 8));
*(uint *)(iVar13 + uVar5 * 4) =
CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 - (0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15))));
}
}
}
}
local_34 = local_34 + iVar1;
local_30 = local_30 + iVar2;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
return;
}
// --- FUN_00665ab0 at 0x00665AB0 (size: 790) ---
void FUN_00665ab0(int param_1)
{
int iVar1;
int iVar2;
ushort uVar3;
ushort uVar4;
uint uVar5;
uint uVar6;
int iVar7;
uint uVar8;
char *pcVar9;
char *pcVar10;
int iVar11;
uint uVar12;
uint uVar13;
uint uVar14;
int iVar15;
short sVar16;
short sVar17;
short sVar18;
ulonglong uVar19;
undefined4 local_3c;
uint local_38;
int local_34;
int local_18;
local_34 = *(int *)(param_1 + 8);
iVar15 = *(int *)(param_1 + 0x14);
iVar7 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar1 = *(int *)(param_1 + 0xc);
iVar2 = *(int *)(param_1 + 0x18);
uVar12 = *(uint *)(param_1 + 0x1c) >> 2;
uVar8 = *(uint *)(param_1 + 0x1c) & 3;
do {
if (uVar12 != 0) {
pcVar9 = (char *)(iVar15 + 0xb + uVar12 * 0xc);
uVar5 = uVar12;
do {
uVar14 = *(uint *)(local_34 + -4 + uVar5 * 4);
uVar5 = uVar5 - 1;
pcVar9 = pcVar9 + -0xc;
iVar11 = 4;
pcVar10 = pcVar9;
do {
uVar13 = uVar14 & 0xff000000 | DAT_008f86b0;
uVar6 = uVar13 >> 0x18;
if (iVar7 != 0x100) {
uVar6 = (int)(uVar6 * iVar7) >> 8;
}
if (uVar6 != 0) {
uVar4 = *(ushort *)(pcVar10 + -2);
local_3c = (uint)CONCAT12(*pcVar10,uVar4);
if (uVar6 + 1 == 0x100) {
local_3c = (local_3c ^ uVar13) & 0xffffff ^ local_3c;
pcVar10[-2] = (char)local_3c;
pcVar10[-1] = (char)(local_3c >> 8);
*pcVar10 = (char)(local_3c >> 0x10);
}
else {
uVar3 = (ushort)(CONCAT14(*pcVar10,local_3c) >> 0x18);
uVar19 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar13) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar18 = (short)(uVar6 + 1);
sVar17 = (short)(CONCAT23(uVar3,CONCAT12((char)(uVar4 >> 8),uVar4)) >> 0x10);
uVar3 = uVar3 >> 8;
sVar16 = (uVar4 & 0xff) -
(((ushort)((uVar4 & 0xff) * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8));
sVar18 = uVar3 - (((ushort)(uVar3 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8));
pcVar10[-2] = (0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16);
pcVar10[-1] = (0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17);
*pcVar10 = (0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 - (0xff < sVar18);
}
}
uVar14 = uVar14 << 8;
pcVar10 = pcVar10 + -3;
iVar11 = iVar11 + -1;
} while (iVar11 != 0);
} while (uVar5 != 0);
}
if (uVar8 != 0) {
pcVar9 = (char *)(uVar8 * 3 + 2 + iVar15 + uVar12 * 0xc);
uVar5 = uVar8;
do {
iVar11 = uVar5 - 1;
uVar5 = uVar5 - 1;
uVar6 = (uint)*(byte *)(iVar11 + local_34 + uVar12 * 4) << 0x18 | DAT_008f86b0;
pcVar10 = pcVar9 + -3;
uVar14 = uVar6 >> 0x18;
if (iVar7 != 0x100) {
uVar14 = (int)(uVar14 * iVar7) >> 8;
}
if (uVar14 != 0) {
uVar4 = (ushort)*(uint3 *)(pcVar9 + -5);
local_38 = (uint)*(uint3 *)(pcVar9 + -5);
if (uVar14 + 1 == 0x100) {
local_38 = (local_38 ^ uVar6) & 0xffffff ^ local_38;
pcVar9[-5] = (char)local_38;
pcVar9[-4] = (char)(local_38 >> 8);
*pcVar10 = (char)(local_38 >> 0x10);
}
else {
uVar3 = (ushort)(CONCAT14(*pcVar10,local_38) >> 0x18);
uVar19 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar6) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0)) >>
0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar18 = (short)(uVar14 + 1);
sVar17 = (short)(CONCAT23(uVar3,CONCAT12((char)(uVar4 >> 8),uVar4)) >> 0x10);
uVar3 = uVar3 >> 8;
sVar16 = (uVar4 & 0xff) -
(((ushort)((uVar4 & 0xff) * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8));
sVar18 = uVar3 - (((ushort)(uVar3 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8));
pcVar9[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16);
pcVar9[-4] = (0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17);
*pcVar10 = (0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 - (0xff < sVar18);
}
}
pcVar9 = pcVar10;
} while (uVar5 != 0);
}
local_34 = local_34 + iVar1;
iVar15 = iVar15 + iVar2;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
return;
}
// --- FUN_00665dd0 at 0x00665DD0 (size: 616) ---
void FUN_00665dd0(int param_1)
{
uint *puVar1;
byte bVar2;
int iVar3;
int iVar4;
uint uVar5;
uint uVar6;
uint uVar7;
int iVar8;
uint uVar9;
int iVar10;
int iVar11;
uint *puVar12;
ushort uVar13;
short sVar14;
short sVar16;
short sVar18;
uint5 uVar17;
short sVar19;
short sVar20;
ulonglong uVar21;
undefined4 local_2c;
int local_24;
int local_18;
ulonglong uVar15;
uVar7 = DAT_008f86b0;
local_2c = *(int *)(param_1 + 8);
if (local_2c == 0) {
bVar2 = *(byte *)(param_1 + 0x24);
iVar10 = *(int *)(param_1 + 0x14);
local_18 = *(int *)(param_1 + 0x20);
local_2c = CONCAT13(bVar2,(int3)DAT_008f86b0);
if (local_18 != 0) {
iVar11 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar11 != 0) {
iVar8 = iVar11;
do {
iVar8 = iVar8 + -1;
if (bVar2 != 0) {
uVar9 = *(uint *)(iVar10 + iVar8 * 4);
sVar14 = bVar2 + 1;
if (sVar14 == 0x100) {
*(uint *)(iVar10 + iVar8 * 4) = (uVar9 ^ local_2c) & 0xffffff ^ uVar9;
}
else {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar9 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar9 >> 0x10),uVar9)) >>
0x20),uVar9) >> 0x18);
uVar17 = (uint5)uVar5 & 0xffffffff00;
uVar15 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)(uVar9 >> 8),(ushort)uVar9)) &
0xffffffff00ffffff;
uVar13 = (ushort)uVar9 & 0xff;
uVar21 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar7 >> 0x10),local_2c) >> 0x18)
,CONCAT12((char)(uVar7 >> 8),(short)uVar7)) >> 0x10,
(short)uVar7) & 0xff00ff00ff;
sVar18 = (short)(uVar15 >> 0x10);
sVar19 = (short)(uVar17 >> 8);
sVar20 = (short)(uVar17 >> 0x18);
sVar16 = uVar13 - (((ushort)(uVar13 * sVar14) >> 8) -
((ushort)((short)uVar21 * sVar14) >> 8));
sVar18 = sVar18 - (((ushort)(sVar18 * sVar14) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar14) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar14) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar14) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x30) * sVar14) >> 8));
*(uint *)(iVar10 + iVar8 * 4) =
CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 - (0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 -
(0xff < sVar18),
(0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16))));
}
}
} while (iVar8 != 0);
}
iVar10 = iVar10 - iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
else {
iVar10 = *(int *)(param_1 + 0x14);
iVar11 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar3 = *(int *)(param_1 + 0x1c);
iVar8 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar3 != 0) {
puVar12 = (uint *)(iVar10 + iVar3 * 4);
local_24 = iVar3;
do {
puVar1 = (uint *)((local_2c - iVar10) + -4 + (int)puVar12);
puVar12 = puVar12 + -1;
uVar9 = *puVar1 & 0xff000000 | DAT_008f86b0;
uVar7 = uVar9 >> 0x18;
if (iVar11 != 0x100) {
uVar7 = (int)(uVar7 * iVar11) >> 8;
}
if (uVar7 != 0) {
uVar5 = *puVar12;
if (uVar7 + 1 == 0x100) {
*puVar12 = (uVar5 ^ uVar9) & 0xffffff ^ uVar5;
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)(uVar5 >> 0x10),uVar5)) >>
0x20),uVar5) >> 0x18);
uVar17 = (uint5)uVar6 & 0xffffffff00;
uVar15 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)(uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar13 = (ushort)uVar5 & 0xff;
uVar21 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar9) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar20 = (short)(uVar7 + 1);
sVar16 = (short)(uVar15 >> 0x10);
sVar18 = (short)(uVar17 >> 8);
sVar19 = (short)(uVar17 >> 0x18);
sVar14 = uVar13 - (((ushort)(uVar13 * sVar20) >> 8) -
((ushort)((short)uVar21 * sVar20) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar20) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar20) >> 8));
sVar18 = sVar18 - (((ushort)(sVar18 * sVar20) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar20) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar20) >> 8) -
((ushort)((short)(uVar15 >> 0x30) * sVar20) >> 8));
*puVar12 = CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 - (0xff < sVar19)
,CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 -
(0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)sVar16 - (0xff < sVar16),
(0 < sVar14) * (sVar14 < 0x100) *
(char)sVar14 - (0xff < sVar14))));
}
}
local_24 = local_24 + -1;
} while (local_24 != 0);
}
local_2c = local_2c + iVar8;
iVar10 = iVar10 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00666050 at 0x00666050 (size: 734) ---
void FUN_00666050(int param_1)
{
int iVar1;
byte bVar2;
int iVar3;
int iVar4;
int iVar5;
ushort uVar6;
ushort uVar7;
uint uVar8;
char *pcVar9;
char *pcVar10;
int iVar11;
uint uVar12;
int iVar13;
int iVar14;
short sVar15;
short sVar16;
short sVar17;
ulonglong uVar18;
uint local_28;
undefined4 local_24;
int local_18;
int local_14;
uVar8 = DAT_008f86b0;
local_24 = *(int *)(param_1 + 8);
if (local_24 == 0) {
iVar13 = *(int *)(param_1 + 0x14);
bVar2 = *(byte *)(param_1 + 0x24);
local_24 = CONCAT13(bVar2,(int3)DAT_008f86b0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar11 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar11 != 0) {
pcVar9 = (char *)(iVar11 * 3 + 2 + iVar13);
local_18 = iVar11;
do {
pcVar10 = pcVar9 + -3;
if (bVar2 != 0) {
uVar7 = (ushort)*(uint3 *)(pcVar9 + -5);
sVar15 = bVar2 + 1;
local_28 = (uint)*(uint3 *)(pcVar9 + -5);
if (sVar15 == 0x100) {
local_28 = (local_28 ^ local_24) & 0xffffff ^ local_28;
pcVar9[-5] = (char)local_28;
pcVar9[-4] = (char)(local_28 >> 8);
*pcVar10 = (char)(local_28 >> 0x10);
}
else {
uVar6 = (ushort)(CONCAT14(*pcVar10,local_28) >> 0x18);
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar8 >> 0x10),local_24) >> 0x18)
,CONCAT12((char)(uVar8 >> 8),(short)uVar8)) >> 0x10,
(short)uVar8) & 0xff00ff00ff;
sVar17 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar7 >> 8),uVar7)) >> 0x10);
uVar6 = uVar6 >> 8;
sVar16 = (uVar7 & 0xff) -
(((ushort)((uVar7 & 0xff) * sVar15) >> 8) -
((ushort)((short)uVar18 * sVar15) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar15) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar15) >> 8));
sVar15 = uVar6 - (((ushort)(uVar6 * sVar15) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar15) >> 8));
pcVar9[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16);
pcVar9[-4] = (0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17);
*pcVar10 = (0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 - (0xff < sVar15);
}
}
local_18 = local_18 + -1;
pcVar9 = pcVar10;
} while (local_18 != 0);
}
iVar13 = iVar13 - iVar3;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar13 = *(int *)(param_1 + 0x14);
iVar11 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar3 = *(int *)(param_1 + 0x1c);
iVar4 = *(int *)(param_1 + 0xc);
iVar5 = *(int *)(param_1 + 0x18);
do {
if (iVar3 != 0) {
pcVar9 = (char *)(iVar3 * 3 + 2 + iVar13);
iVar14 = iVar3;
do {
iVar1 = iVar14 * 4;
iVar14 = iVar14 + -1;
uVar12 = *(uint *)(local_24 + -4 + iVar1) & 0xff000000 | DAT_008f86b0;
pcVar10 = pcVar9 + -3;
uVar8 = uVar12 >> 0x18;
if (iVar11 != 0x100) {
uVar8 = (int)(uVar8 * iVar11) >> 8;
}
if (uVar8 != 0) {
uVar7 = (ushort)*(uint3 *)(pcVar9 + -5);
local_28 = (uint)*(uint3 *)(pcVar9 + -5);
if (uVar8 + 1 == 0x100) {
local_28 = (local_28 ^ uVar12) & 0xffffff ^ local_28;
pcVar9[-5] = (char)local_28;
pcVar9[-4] = (char)(local_28 >> 8);
*pcVar10 = (char)(local_28 >> 0x10);
}
else {
uVar6 = (ushort)(CONCAT14(*pcVar10,local_28) >> 0x18);
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar12) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar17 = (short)(uVar8 + 1);
sVar16 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar7 >> 8),uVar7)) >> 0x10);
uVar6 = uVar6 >> 8;
sVar15 = (uVar7 & 0xff) -
(((ushort)((uVar7 & 0xff) * sVar17) >> 8) -
((ushort)((short)uVar18 * sVar17) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
sVar17 = uVar6 - (((ushort)(uVar6 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
pcVar9[-5] = (0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 - (0xff < sVar15);
pcVar9[-4] = (0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16);
*pcVar10 = (0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17);
}
}
pcVar9 = pcVar10;
} while (iVar14 != 0);
}
local_24 = local_24 + iVar4;
iVar13 = iVar13 + iVar5;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_00669ba0 at 0x00669BA0 (size: 538) ---
void FUN_00669ba0(int param_1)
{
byte bVar1;
int iVar2;
undefined4 uVar3;
uint uVar4;
ulonglong uVar5;
uint uVar6;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar13;
short sVar14;
short sVar16;
uint5 uVar15;
short sVar17;
ushort uVar18;
ushort uVar20;
ushort uVar21;
ulonglong uVar19;
undefined4 local_14;
undefined4 local_c;
uVar6 = DAT_008f86b0;
if (*(int *)(param_1 + 8) == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
iVar11 = *(int *)(param_1 + 0x14);
local_c = *(int *)(param_1 + 0x20);
if (local_c != 0) {
iVar10 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar10 != 0) {
iVar9 = iVar10;
do {
iVar9 = iVar9 + -1;
sVar13 = (ushort)bVar1 + (ushort)(bVar1 != 0);
if (sVar13 != 0) {
uVar3 = *(undefined4 *)(iVar11 + iVar9 * 4);
uVar4 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar3 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar3 >> 0x10),uVar3))
>> 0x20),uVar3) >> 0x18);
uVar15 = (uint5)uVar4 & 0xffffffff00;
uVar19 = (ulonglong)CONCAT43(uVar4,CONCAT12((char)((uint)uVar3 >> 8),(ushort)uVar3)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar3 & 0xff;
uVar21 = (ushort)(byte)(uVar6 >> 0x10);
uVar20 = (ushort)(byte)(uVar6 >> 8);
uVar5 = uVar19 >> 0x10 & 0xffffff00ff00;
sVar14 = (short)(uVar19 >> 0x10);
sVar16 = (short)(uVar15 >> 8);
sVar17 = (short)(uVar15 >> 0x18);
uVar18 = (ushort)(((ushort)(byte)uVar6 + (ushort)((byte)uVar6 != 0)) * uVar12) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * sVar14) >> 8;
uVar21 = (ushort)((uVar21 + (uVar21 != 0)) * sVar16) >> 8;
uVar19 = (ulonglong)CONCAT24(uVar21,CONCAT22(uVar20,uVar18)) | uVar5 << 0x10;
if (sVar13 != 0x100) {
uVar19 = CONCAT26(sVar17 - (((ushort)(sVar17 * sVar13) >> 8) -
((ushort)((short)(uVar5 >> 0x20) * sVar13) >> 8)),
CONCAT24(sVar16 - (((ushort)(sVar16 * sVar13) >> 8) -
((ushort)(uVar21 * sVar13) >> 8)),
CONCAT22(sVar14 - (((ushort)(sVar14 * sVar13) >> 8) -
((ushort)(uVar20 * sVar13) >> 8)),
uVar12 - (((ushort)(uVar12 * sVar13) >> 8) -
((ushort)(uVar18 * sVar13) >> 8)))));
}
sVar13 = (short)uVar19;
sVar14 = (short)(uVar19 >> 0x10);
sVar16 = (short)(uVar19 >> 0x20);
sVar17 = (short)(uVar19 >> 0x30);
*(uint *)(iVar11 + iVar9 * 4) =
CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)(uVar19 >> 0x30) -
(0xff < sVar17),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)(uVar19 >> 0x20) -
(0xff < sVar16),
CONCAT11((0 < sVar14) * (sVar14 < 0x100) *
(char)(uVar19 >> 0x10) - (0xff < sVar14),
(0 < sVar13) * (sVar13 < 0x100) * (char)uVar19 -
(0xff < sVar13))));
}
} while (iVar9 != 0);
}
iVar11 = iVar11 - iVar2;
local_c = local_c + -1;
} while (local_c != 0);
}
}
else {
iVar11 = *(int *)(param_1 + 0x14);
iVar10 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar9 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
uVar6 = DAT_008f86b0 >> 0x18;
iVar8 = iVar2;
do {
iVar8 = iVar8 + -1;
iVar7 = uVar6 + (uVar6 != 0);
if (iVar10 != 0x100) {
iVar7 = iVar7 * iVar10 >> 8;
}
if (iVar7 != 0) {
uVar3 = *(undefined4 *)(iVar11 + iVar8 * 4);
uVar4 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar3 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar3 >> 0x10),uVar3))
>> 0x20),uVar3) >> 0x18);
uVar15 = (uint5)uVar4 & 0xffffffff00;
uVar19 = (ulonglong)CONCAT43(uVar4,CONCAT12((char)((uint)uVar3 >> 8),(ushort)uVar3)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar3 & 0xff;
uVar21 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar20 = (ushort)(byte)(DAT_008f86b0 >> 8);
uVar5 = uVar19 >> 0x10 & 0xffffff00ff00;
sVar13 = (short)(uVar19 >> 0x10);
sVar14 = (short)(uVar15 >> 8);
sVar16 = (short)(uVar15 >> 0x18);
uVar18 = (ushort)(((ushort)(byte)DAT_008f86b0 + (ushort)((byte)DAT_008f86b0 != 0)) *
uVar12) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * sVar13) >> 8;
uVar21 = (ushort)((uVar21 + (uVar21 != 0)) * sVar14) >> 8;
uVar19 = (ulonglong)CONCAT24(uVar21,CONCAT22(uVar20,uVar18)) | uVar5 << 0x10;
if (iVar7 != 0x100) {
sVar17 = (short)iVar7;
uVar19 = CONCAT26(sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)((short)(uVar5 >> 0x20) * sVar17) >> 8)),
CONCAT24(sVar14 - (((ushort)(sVar14 * sVar17) >> 8) -
((ushort)(uVar21 * sVar17) >> 8)),
CONCAT22(sVar13 - (((ushort)(sVar13 * sVar17) >> 8) -
((ushort)(uVar20 * sVar17) >> 8)),
uVar12 - (((ushort)(uVar12 * sVar17) >> 8) -
((ushort)(uVar18 * sVar17) >> 8)))));
}
sVar13 = (short)uVar19;
sVar14 = (short)(uVar19 >> 0x10);
sVar16 = (short)(uVar19 >> 0x20);
sVar17 = (short)(uVar19 >> 0x30);
*(uint *)(iVar11 + iVar8 * 4) =
CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)(uVar19 >> 0x30) -
(0xff < sVar17),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)(uVar19 >> 0x20) -
(0xff < sVar16),
CONCAT11((0 < sVar14) * (sVar14 < 0x100) *
(char)(uVar19 >> 0x10) - (0xff < sVar14),
(0 < sVar13) * (sVar13 < 0x100) * (char)uVar19 -
(0xff < sVar13))));
}
} while (iVar8 != 0);
}
iVar11 = iVar11 + iVar9;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_00669dd0 at 0x00669DD0 (size: 682) ---
void FUN_00669dd0(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
short sVar4;
uint uVar5;
ushort uVar6;
int iVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar14;
short sVar15;
undefined6 uVar13;
ushort uVar16;
ushort uVar17;
ushort uVar18;
int local_1c;
int local_10;
int local_c;
uVar5 = DAT_008f86b0;
if (*(int *)(param_1 + 8) == 0) {
iVar10 = *(int *)(param_1 + 0x14);
bVar1 = *(byte *)(param_1 + 0x24);
local_c = *(int *)(param_1 + 0x20);
if (local_c != 0) {
iVar11 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar11 != 0) {
pbVar8 = (byte *)(iVar11 * 3 + 2 + iVar10);
local_10 = iVar11;
do {
pbVar9 = pbVar8 + -3;
sVar14 = (ushort)bVar1 + (ushort)(bVar1 != 0);
if (sVar14 != 0) {
uVar16 = *(ushort *)(pbVar8 + -5);
uVar6 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar12 = uVar16 & 0xff;
uVar18 = (ushort)(byte)(uVar5 >> 0x10);
uVar17 = (ushort)(byte)(uVar5 >> 8);
sVar15 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar16 >> 8),uVar16)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar16 = (ushort)(((ushort)(byte)uVar5 + (ushort)((byte)uVar5 != 0)) * uVar12) >> 8;
uVar17 = (ushort)((uVar17 + (uVar17 != 0)) * sVar15) >> 8;
uVar18 = (ushort)((uVar18 + (uVar18 != 0)) * uVar6) >> 8;
uVar13 = CONCAT24(uVar18,CONCAT22(uVar17,uVar16));
if (sVar14 != 0x100) {
uVar13 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar14) >> 8) -
((ushort)(uVar18 * sVar14) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar14) >> 8) -
((ushort)(uVar17 * sVar14) >> 8)),
uVar12 - (((ushort)(uVar12 * sVar14) >> 8) -
((ushort)(uVar16 * sVar14) >> 8))));
}
sVar14 = (short)uVar13;
sVar15 = (short)((uint6)uVar13 >> 0x10);
sVar4 = (short)((uint6)uVar13 >> 0x20);
pbVar8[-5] = (0 < sVar14) * (sVar14 < 0x100) * (char)uVar13 - (0xff < sVar14);
pbVar8[-4] = (0 < sVar15) * (sVar15 < 0x100) * (char)((uint6)uVar13 >> 0x10) -
(0xff < sVar15);
*pbVar9 = (0 < sVar4) * (sVar4 < 0x100) * (char)((uint6)uVar13 >> 0x20) -
(0xff < sVar4);
}
local_10 = local_10 + -1;
pbVar8 = pbVar9;
} while (local_10 != 0);
}
iVar10 = iVar10 - iVar2;
local_c = local_c + -1;
} while (local_c != 0);
}
}
else {
iVar10 = *(int *)(param_1 + 0x14);
iVar11 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_10 = *(int *)(param_1 + 0x20);
if (local_10 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
uVar5 = DAT_008f86b0 >> 0x18;
pbVar8 = (byte *)(iVar2 * 3 + 2 + iVar10);
local_1c = iVar2;
do {
pbVar9 = pbVar8 + -3;
iVar7 = uVar5 + (uVar5 != 0);
if (iVar11 != 0x100) {
iVar7 = iVar7 * iVar11 >> 8;
}
if (iVar7 != 0) {
uVar16 = *(ushort *)(pbVar8 + -5);
uVar6 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar12 = uVar16 & 0xff;
uVar18 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar17 = (ushort)(byte)(DAT_008f86b0 >> 8);
sVar14 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar16 >> 8),uVar16)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar16 = (ushort)(((ushort)(byte)DAT_008f86b0 + (ushort)((byte)DAT_008f86b0 != 0)) *
uVar12) >> 8;
uVar17 = (ushort)((uVar17 + (uVar17 != 0)) * sVar14) >> 8;
uVar18 = (ushort)((uVar18 + (uVar18 != 0)) * uVar6) >> 8;
uVar13 = CONCAT24(uVar18,CONCAT22(uVar17,uVar16));
if (iVar7 != 0x100) {
sVar15 = (short)iVar7;
uVar13 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar15) >> 8) -
((ushort)(uVar18 * sVar15) >> 8)),
CONCAT22(sVar14 - (((ushort)(sVar14 * sVar15) >> 8) -
((ushort)(uVar17 * sVar15) >> 8)),
uVar12 - (((ushort)(uVar12 * sVar15) >> 8) -
((ushort)(uVar16 * sVar15) >> 8))));
}
sVar14 = (short)uVar13;
sVar15 = (short)((uint6)uVar13 >> 0x10);
sVar4 = (short)((uint6)uVar13 >> 0x20);
pbVar8[-5] = (0 < sVar14) * (sVar14 < 0x100) * (char)uVar13 - (0xff < sVar14);
pbVar8[-4] = (0 < sVar15) * (sVar15 < 0x100) * (char)((uint6)uVar13 >> 0x10) -
(0xff < sVar15);
*pbVar9 = (0 < sVar4) * (sVar4 < 0x100) * (char)((uint6)uVar13 >> 0x20) -
(0xff < sVar4);
}
local_1c = local_1c + -1;
pbVar8 = pbVar9;
} while (local_1c != 0);
}
iVar10 = iVar10 + iVar3;
local_10 = local_10 + -1;
} while (local_10 != 0);
}
}
return;
}
// --- FUN_0066a080 at 0x0066A080 (size: 591) ---
void FUN_0066a080(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
uint uVar5;
ulonglong uVar6;
uint uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
ushort uVar13;
short sVar14;
short sVar15;
short sVar17;
uint5 uVar16;
short sVar18;
ushort uVar19;
ushort uVar21;
ushort uVar22;
ulonglong uVar20;
undefined4 local_20;
undefined4 local_14;
uVar7 = DAT_008f86b0;
iVar10 = *(int *)(param_1 + 8);
if (iVar10 == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
iVar10 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar12 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar12 != 0) {
iVar9 = iVar12;
do {
iVar9 = iVar9 + -1;
sVar14 = (ushort)bVar1 + (ushort)(bVar1 != 0);
if (sVar14 != 0) {
uVar4 = *(undefined4 *)(iVar10 + iVar9 * 4);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar16 = (uint5)uVar5 & 0xffffffff00;
uVar20 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar13 = (ushort)uVar4 & 0xff;
uVar22 = (ushort)(byte)(uVar7 >> 0x10);
uVar21 = (ushort)(byte)(uVar7 >> 8);
uVar6 = uVar20 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar20 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
uVar19 = (ushort)(((ushort)(byte)uVar7 + (ushort)((byte)uVar7 != 0)) * uVar13) >> 8;
uVar21 = (ushort)((uVar21 + (uVar21 != 0)) * sVar15) >> 8;
uVar22 = (ushort)((uVar22 + (uVar22 != 0)) * sVar17) >> 8;
uVar20 = (ulonglong)CONCAT24(uVar22,CONCAT22(uVar21,uVar19)) | uVar6 << 0x10;
if (sVar14 != 0x100) {
uVar20 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar14) >> 8) -
((ushort)((short)(uVar6 >> 0x20) * sVar14) >> 8)),
CONCAT24(sVar17 - (((ushort)(sVar17 * sVar14) >> 8) -
((ushort)(uVar22 * sVar14) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar14) >> 8) -
((ushort)(uVar21 * sVar14) >> 8)),
uVar13 - (((ushort)(uVar13 * sVar14) >> 8) -
((ushort)(uVar19 * sVar14) >> 8)))));
}
sVar14 = (short)uVar20;
sVar15 = (short)(uVar20 >> 0x10);
sVar17 = (short)(uVar20 >> 0x20);
sVar18 = (short)(uVar20 >> 0x30);
*(uint *)(iVar10 + iVar9 * 4) =
CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar20 >> 0x30) -
(0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)(uVar20 >> 0x20) -
(0xff < sVar17),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)(uVar20 >> 0x10) - (0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)uVar20 -
(0xff < sVar14))));
}
} while (iVar9 != 0);
}
iVar10 = iVar10 - iVar2;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
local_20 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
if (local_14 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar9 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
iVar11 = iVar2;
do {
while (iVar11 != 0) {
iVar8 = iVar11 + -1;
iVar11 = iVar11 + -1;
uVar7 = ((uint)*(byte *)(iVar8 + iVar10) << 0x18 | DAT_008f86b0) >> 0x18;
iVar8 = uVar7 + (uVar7 != 0);
if (iVar12 != 0x100) {
iVar8 = iVar8 * iVar12 >> 8;
}
if (iVar8 != 0) {
uVar4 = *(undefined4 *)(local_20 + iVar11 * 4);
uVar7 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4)) >>
0x20),uVar4) >> 0x18);
uVar16 = (uint5)uVar7 & 0xffffffff00;
uVar20 = (ulonglong)CONCAT43(uVar7,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar13 = (ushort)uVar4 & 0xff;
uVar22 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar21 = (ushort)(byte)(DAT_008f86b0 >> 8);
uVar6 = uVar20 >> 0x10 & 0xffffff00ff00;
sVar14 = (short)(uVar20 >> 0x10);
sVar15 = (short)(uVar16 >> 8);
sVar17 = (short)(uVar16 >> 0x18);
uVar19 = (ushort)(((ushort)(byte)DAT_008f86b0 + (ushort)((byte)DAT_008f86b0 != 0)) *
uVar13) >> 8;
uVar21 = (ushort)((uVar21 + (uVar21 != 0)) * sVar14) >> 8;
uVar22 = (ushort)((uVar22 + (uVar22 != 0)) * sVar15) >> 8;
uVar20 = (ulonglong)CONCAT24(uVar22,CONCAT22(uVar21,uVar19)) | uVar6 << 0x10;
if (iVar8 != 0x100) {
sVar18 = (short)iVar8;
uVar20 = CONCAT26(sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar6 >> 0x20) * sVar18) >> 8)),
CONCAT24(sVar15 - (((ushort)(sVar15 * sVar18) >> 8) -
((ushort)(uVar22 * sVar18) >> 8)),
CONCAT22(sVar14 - (((ushort)(sVar14 * sVar18) >> 8) -
((ushort)(uVar21 * sVar18) >> 8)),
uVar13 - (((ushort)(uVar13 * sVar18) >> 8) -
((ushort)(uVar19 * sVar18) >> 8)))));
}
sVar14 = (short)uVar20;
sVar15 = (short)(uVar20 >> 0x10);
sVar17 = (short)(uVar20 >> 0x20);
sVar18 = (short)(uVar20 >> 0x30);
*(uint *)(local_20 + iVar11 * 4) =
CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar20 >> 0x30) - (0xff < sVar18)
,CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)(uVar20 >> 0x20) -
(0xff < sVar17),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)(uVar20 >> 0x10) - (0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)uVar20 -
(0xff < sVar14))));
}
}
iVar10 = iVar10 + iVar9;
local_20 = local_20 + iVar3;
local_14 = local_14 + -1;
iVar11 = iVar2;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_0066a2e0 at 0x0066A2E0 (size: 713) ---
void FUN_0066a2e0(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
uint uVar7;
int iVar8;
byte *pbVar9;
int iVar10;
byte *pbVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar16;
short sVar17;
undefined6 uVar15;
ushort uVar18;
ushort uVar19;
ushort uVar20;
int local_24;
int local_18;
int local_14;
uVar7 = DAT_008f86b0;
local_24 = *(int *)(param_1 + 8);
if (local_24 == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
iVar12 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar10 = *(int *)(param_1 + 0x18);
iVar2 = *(int *)(param_1 + 0x1c);
do {
if (iVar2 != 0) {
pbVar9 = (byte *)(iVar2 * 3 + 2 + iVar12);
local_18 = iVar2;
do {
pbVar11 = pbVar9 + -3;
sVar16 = (ushort)bVar1 + (ushort)(bVar1 != 0);
if (sVar16 != 0) {
uVar18 = *(ushort *)(pbVar9 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar14 = uVar18 & 0xff;
uVar20 = (ushort)(byte)(uVar7 >> 0x10);
uVar19 = (ushort)(byte)(uVar7 >> 8);
sVar17 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar18 >> 8),uVar18)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar18 = (ushort)(((ushort)(byte)uVar7 + (ushort)((byte)uVar7 != 0)) * uVar14) >> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * sVar17) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * uVar6) >> 8;
uVar15 = CONCAT24(uVar20,CONCAT22(uVar19,uVar18));
if (sVar16 != 0x100) {
uVar15 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar16) >> 8) -
((ushort)(uVar20 * sVar16) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar16) >> 8) -
((ushort)(uVar19 * sVar16) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar16) >> 8) -
((ushort)(uVar18 * sVar16) >> 8))));
}
sVar16 = (short)uVar15;
sVar17 = (short)((uint6)uVar15 >> 0x10);
sVar5 = (short)((uint6)uVar15 >> 0x20);
pbVar9[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar15 - (0xff < sVar16);
pbVar9[-4] = (0 < sVar17) * (sVar17 < 0x100) * (char)((uint6)uVar15 >> 0x10) -
(0xff < sVar17);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar15 >> 0x20) -
(0xff < sVar5);
}
local_18 = local_18 + -1;
pbVar9 = pbVar11;
} while (local_18 != 0);
}
iVar12 = iVar12 - iVar10;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar12 = *(int *)(param_1 + 0x14);
iVar10 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pbVar9 = (byte *)(iVar2 * 3 + 2 + iVar12);
iVar13 = iVar2;
do {
iVar8 = iVar13 + -1;
iVar13 = iVar13 + -1;
uVar7 = ((uint)*(byte *)(iVar8 + local_24) << 0x18 | DAT_008f86b0) >> 0x18;
pbVar11 = pbVar9 + -3;
iVar8 = uVar7 + (uVar7 != 0);
if (iVar10 != 0x100) {
iVar8 = iVar8 * iVar10 >> 8;
}
if (iVar8 != 0) {
uVar18 = *(ushort *)(pbVar9 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar14 = uVar18 & 0xff;
uVar20 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar19 = (ushort)(byte)(DAT_008f86b0 >> 8);
sVar16 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar18 >> 8),uVar18)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar18 = (ushort)(((ushort)(byte)DAT_008f86b0 + (ushort)((byte)DAT_008f86b0 != 0)) *
uVar14) >> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * sVar16) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * uVar6) >> 8;
uVar15 = CONCAT24(uVar20,CONCAT22(uVar19,uVar18));
if (iVar8 != 0x100) {
sVar17 = (short)iVar8;
uVar15 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar17) >> 8) -
((ushort)(uVar20 * sVar17) >> 8)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)(uVar19 * sVar17) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar17) >> 8) -
((ushort)(uVar18 * sVar17) >> 8))));
}
sVar16 = (short)uVar15;
sVar17 = (short)((uint6)uVar15 >> 0x10);
sVar5 = (short)((uint6)uVar15 >> 0x20);
pbVar9[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar15 - (0xff < sVar16);
pbVar9[-4] = (0 < sVar17) * (sVar17 < 0x100) * (char)((uint6)uVar15 >> 0x10) -
(0xff < sVar17);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar15 >> 0x20) -
(0xff < sVar5);
}
pbVar9 = pbVar11;
} while (iVar13 != 0);
}
local_24 = local_24 + iVar3;
iVar12 = iVar12 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066a5c0 at 0x0066A5C0 (size: 606) ---
void FUN_0066a5c0(int param_1)
{
uint *puVar1;
byte bVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
ulonglong uVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
undefined4 *puVar13;
ushort uVar14;
short sVar15;
short sVar16;
short sVar18;
uint5 uVar17;
short sVar19;
ushort uVar20;
ushort uVar22;
ushort uVar23;
ulonglong uVar21;
int local_28;
int local_20;
int local_18;
uVar8 = DAT_008f86b0;
local_28 = *(int *)(param_1 + 8);
if (local_28 == 0) {
bVar2 = *(byte *)(param_1 + 0x24);
iVar10 = *(int *)(param_1 + 0x14);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar12 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar12 != 0) {
iVar11 = iVar12;
do {
iVar11 = iVar11 + -1;
sVar15 = (ushort)bVar2 + (ushort)(bVar2 != 0);
if (sVar15 != 0) {
uVar5 = *(undefined4 *)(iVar10 + iVar11 * 4);
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar17 = (uint5)uVar6 & 0xffffffff00;
uVar21 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar5 & 0xff;
uVar23 = (ushort)(byte)(uVar8 >> 0x10);
uVar22 = (ushort)(byte)(uVar8 >> 8);
uVar7 = uVar21 >> 0x10 & 0xffffff00ff00;
sVar16 = (short)(uVar21 >> 0x10);
sVar18 = (short)(uVar17 >> 8);
sVar19 = (short)(uVar17 >> 0x18);
uVar20 = (ushort)(((ushort)(byte)uVar8 + (ushort)((byte)uVar8 != 0)) * uVar14) >> 8;
uVar22 = (ushort)((uVar22 + (uVar22 != 0)) * sVar16) >> 8;
uVar23 = (ushort)((uVar23 + (uVar23 != 0)) * sVar18) >> 8;
uVar21 = (ulonglong)CONCAT24(uVar23,CONCAT22(uVar22,uVar20)) | uVar7 << 0x10;
if (sVar15 != 0x100) {
uVar21 = CONCAT26(sVar19 - (((ushort)(sVar19 * sVar15) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar15) >> 8)),
CONCAT24(sVar18 - (((ushort)(sVar18 * sVar15) >> 8) -
((ushort)(uVar23 * sVar15) >> 8)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar15) >> 8) -
((ushort)(uVar22 * sVar15) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar15) >> 8) -
((ushort)(uVar20 * sVar15) >> 8)))));
}
sVar15 = (short)uVar21;
sVar16 = (short)(uVar21 >> 0x10);
sVar18 = (short)(uVar21 >> 0x20);
sVar19 = (short)(uVar21 >> 0x30);
*(uint *)(iVar10 + iVar11 * 4) =
CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)(uVar21 >> 0x30) -
(0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x20) -
(0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)(uVar21 >> 0x10) - (0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar21 -
(0xff < sVar15))));
}
} while (iVar11 != 0);
}
iVar10 = iVar10 - iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
else {
local_18 = *(int *)(param_1 + 0x20);
iVar10 = *(int *)(param_1 + 0x14);
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
if (local_18 != 0) {
iVar3 = *(int *)(param_1 + 0x1c);
iVar11 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar3 != 0) {
puVar13 = (undefined4 *)(iVar10 + iVar3 * 4);
local_20 = iVar3;
do {
puVar1 = (uint *)((local_28 - iVar10) + -4 + (int)puVar13);
puVar13 = puVar13 + -1;
uVar8 = (*puVar1 & 0xff000000 | DAT_008f86b0) >> 0x18;
iVar9 = uVar8 + (uVar8 != 0);
if (iVar12 != 0x100) {
iVar9 = iVar9 * iVar12 >> 8;
}
if (iVar9 != 0) {
uVar5 = *puVar13;
uVar8 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar17 = (uint5)uVar8 & 0xffffffff00;
uVar21 = (ulonglong)CONCAT43(uVar8,CONCAT12((char)((uint)uVar5 >> 8),(ushort)uVar5)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar5 & 0xff;
uVar23 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar22 = (ushort)(byte)(DAT_008f86b0 >> 8);
uVar7 = uVar21 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar21 >> 0x10);
sVar16 = (short)(uVar17 >> 8);
sVar18 = (short)(uVar17 >> 0x18);
uVar20 = (ushort)(((ushort)(byte)DAT_008f86b0 + (ushort)((byte)DAT_008f86b0 != 0)) *
uVar14) >> 8;
uVar22 = (ushort)((uVar22 + (uVar22 != 0)) * sVar15) >> 8;
uVar23 = (ushort)((uVar23 + (uVar23 != 0)) * sVar16) >> 8;
uVar21 = (ulonglong)CONCAT24(uVar23,CONCAT22(uVar22,uVar20)) | uVar7 << 0x10;
if (iVar9 != 0x100) {
sVar19 = (short)iVar9;
uVar21 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar19) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar16 - (((ushort)(sVar16 * sVar19) >> 8) -
((ushort)(uVar23 * sVar19) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar19) >> 8) -
((ushort)(uVar22 * sVar19) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar19) >> 8) -
((ushort)(uVar20 * sVar19) >> 8)))));
}
sVar15 = (short)uVar21;
sVar16 = (short)(uVar21 >> 0x10);
sVar18 = (short)(uVar21 >> 0x20);
sVar19 = (short)(uVar21 >> 0x30);
*puVar13 = CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)(uVar21 >> 0x30) -
(0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x20)
- (0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)(uVar21 >> 0x10) - (0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar21 -
(0xff < sVar15))));
}
local_20 = local_20 + -1;
} while (local_20 != 0);
}
local_28 = local_28 + iVar11;
iVar10 = iVar10 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066a830 at 0x0066A830 (size: 722) ---
void FUN_0066a830(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
uint uVar7;
int iVar8;
byte *pbVar9;
int iVar10;
byte *pbVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar16;
short sVar17;
undefined6 uVar15;
ushort uVar18;
ushort uVar19;
ushort uVar20;
int local_24;
int local_18;
int local_14;
uVar7 = DAT_008f86b0;
local_24 = *(int *)(param_1 + 8);
if (local_24 == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
iVar12 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar10 = *(int *)(param_1 + 0x18);
iVar2 = *(int *)(param_1 + 0x1c);
do {
if (iVar2 != 0) {
pbVar9 = (byte *)(iVar2 * 3 + 2 + iVar12);
local_18 = iVar2;
do {
pbVar11 = pbVar9 + -3;
sVar16 = (ushort)bVar1 + (ushort)(bVar1 != 0);
if (sVar16 != 0) {
uVar18 = *(ushort *)(pbVar9 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar14 = uVar18 & 0xff;
uVar20 = (ushort)(byte)(uVar7 >> 0x10);
uVar19 = (ushort)(byte)(uVar7 >> 8);
sVar17 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar18 >> 8),uVar18)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar18 = (ushort)(((ushort)(byte)uVar7 + (ushort)((byte)uVar7 != 0)) * uVar14) >> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * sVar17) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * uVar6) >> 8;
uVar15 = CONCAT24(uVar20,CONCAT22(uVar19,uVar18));
if (sVar16 != 0x100) {
uVar15 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar16) >> 8) -
((ushort)(uVar20 * sVar16) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar16) >> 8) -
((ushort)(uVar19 * sVar16) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar16) >> 8) -
((ushort)(uVar18 * sVar16) >> 8))));
}
sVar16 = (short)uVar15;
sVar17 = (short)((uint6)uVar15 >> 0x10);
sVar5 = (short)((uint6)uVar15 >> 0x20);
pbVar9[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar15 - (0xff < sVar16);
pbVar9[-4] = (0 < sVar17) * (sVar17 < 0x100) * (char)((uint6)uVar15 >> 0x10) -
(0xff < sVar17);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar15 >> 0x20) -
(0xff < sVar5);
}
local_18 = local_18 + -1;
pbVar9 = pbVar11;
} while (local_18 != 0);
}
iVar12 = iVar12 - iVar10;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar12 = *(int *)(param_1 + 0x14);
iVar10 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pbVar9 = (byte *)(iVar2 * 3 + 2 + iVar12);
iVar13 = iVar2;
do {
iVar8 = iVar13 * 4;
iVar13 = iVar13 + -1;
uVar7 = (*(uint *)(local_24 + -4 + iVar8) & 0xff000000 | DAT_008f86b0) >> 0x18;
pbVar11 = pbVar9 + -3;
iVar8 = uVar7 + (uVar7 != 0);
if (iVar10 != 0x100) {
iVar8 = iVar8 * iVar10 >> 8;
}
if (iVar8 != 0) {
uVar18 = *(ushort *)(pbVar9 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar14 = uVar18 & 0xff;
uVar20 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar19 = (ushort)(byte)(DAT_008f86b0 >> 8);
sVar16 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar18 >> 8),uVar18)) >> 0x10);
uVar6 = uVar6 >> 8;
uVar18 = (ushort)(((ushort)(byte)DAT_008f86b0 + (ushort)((byte)DAT_008f86b0 != 0)) *
uVar14) >> 8;
uVar19 = (ushort)((uVar19 + (uVar19 != 0)) * sVar16) >> 8;
uVar20 = (ushort)((uVar20 + (uVar20 != 0)) * uVar6) >> 8;
uVar15 = CONCAT24(uVar20,CONCAT22(uVar19,uVar18));
if (iVar8 != 0x100) {
sVar17 = (short)iVar8;
uVar15 = CONCAT24(uVar6 - (((ushort)(uVar6 * sVar17) >> 8) -
((ushort)(uVar20 * sVar17) >> 8)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)(uVar19 * sVar17) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar17) >> 8) -
((ushort)(uVar18 * sVar17) >> 8))));
}
sVar16 = (short)uVar15;
sVar17 = (short)((uint6)uVar15 >> 0x10);
sVar5 = (short)((uint6)uVar15 >> 0x20);
pbVar9[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar15 - (0xff < sVar16);
pbVar9[-4] = (0 < sVar17) * (sVar17 < 0x100) * (char)((uint6)uVar15 >> 0x10) -
(0xff < sVar17);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)((uint6)uVar15 >> 0x20) -
(0xff < sVar5);
}
pbVar9 = pbVar11;
} while (iVar13 != 0);
}
local_24 = local_24 + iVar3;
iVar12 = iVar12 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066ab10 at 0x0066AB10 (size: 567) ---
void FUN_0066ab10(int param_1)
{
int iVar1;
undefined4 uVar2;
uint uVar3;
ushort uVar4;
ulonglong uVar5;
ushort uVar6;
uint uVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
ushort uVar13;
short sVar14;
short sVar15;
short sVar17;
uint5 uVar16;
short sVar18;
byte bVar19;
byte bVar20;
ulonglong uVar21;
ulonglong uVar22;
undefined4 local_14;
undefined4 local_c;
uVar7 = DAT_008f86b0;
if (*(int *)(param_1 + 8) == 0) {
iVar12 = *(int *)(param_1 + 0x14);
bVar19 = *(byte *)(param_1 + 0x24);
local_c = *(int *)(param_1 + 0x20);
if (local_c != 0) {
iVar11 = *(int *)(param_1 + 0x1c);
iVar1 = *(int *)(param_1 + 0x18);
do {
if (iVar11 != 0) {
iVar10 = iVar11;
do {
iVar10 = iVar10 + -1;
if (bVar19 != 0) {
uVar2 = *(undefined4 *)(iVar12 + iVar10 * 4);
uVar8 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar2 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar2 >> 0x10),uVar2))
>> 0x20),uVar2) >> 0x18);
uVar16 = (uint5)uVar8 & 0xffffffff00;
uVar21 = (ulonglong)CONCAT43(uVar8,CONCAT12((char)((uint)uVar2 >> 8),(ushort)uVar2)) &
0xffffffff00ffffff;
uVar13 = (ushort)uVar2 & 0xff;
uVar6 = (ushort)(byte)(uVar7 >> 0x10);
uVar4 = (ushort)(byte)(uVar7 >> 8);
bVar20 = (byte)uVar7;
uVar5 = uVar21 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar21 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
sVar14 = bVar19 + 1;
uVar22 = (ulonglong)
CONCAT24((sVar17 + uVar6) - ((ushort)((uVar6 + (uVar6 != 0)) * sVar17) >> 8),
CONCAT22((sVar15 + uVar4) -
((ushort)((uVar4 + (uVar4 != 0)) * sVar15) >> 8),
(uVar13 + bVar20) -
((ushort)(((ushort)bVar20 + (ushort)(bVar20 != 0)) * uVar13
) >> 8))) & 0xff00ff00ff;
uVar21 = uVar22 | uVar5 << 0x10;
if (sVar14 != 0x100) {
uVar21 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar14) >> 8) -
((ushort)((short)(uVar5 >> 0x20) * sVar14) >> 8)),
CONCAT24(sVar17 - (((ushort)(sVar17 * sVar14) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar14) >> 8
)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar14) >> 8) -
((ushort)((short)(uVar22 >> 0x10) *
sVar14) >> 8)),
uVar13 - (((ushort)(uVar13 * sVar14) >> 8) -
((ushort)((short)uVar22 * sVar14) >> 8)
))));
}
sVar14 = (short)uVar21;
sVar15 = (short)(uVar21 >> 0x10);
sVar17 = (short)(uVar21 >> 0x20);
sVar18 = (short)(uVar21 >> 0x30);
*(uint *)(iVar12 + iVar10 * 4) =
CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x30) -
(0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)(uVar21 >> 0x20) -
(0xff < sVar17),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)(uVar21 >> 0x10) - (0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)uVar21 -
(0xff < sVar14))));
}
} while (iVar10 != 0);
}
iVar12 = iVar12 - iVar1;
local_c = local_c + -1;
} while (local_c != 0);
}
}
else {
iVar12 = *(int *)(param_1 + 0x14);
iVar11 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar10 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
uVar7 = DAT_008f86b0 >> 0x18;
iVar9 = iVar1;
do {
iVar9 = iVar9 + -1;
uVar8 = uVar7;
if (iVar11 != 0x100) {
uVar8 = (int)(uVar7 * iVar11) >> 8;
}
if (uVar8 != 0) {
uVar2 = *(undefined4 *)(iVar12 + iVar9 * 4);
uVar3 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar2 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar2 >> 0x10),uVar2))
>> 0x20),uVar2) >> 0x18);
uVar16 = (uint5)uVar3 & 0xffffffff00;
uVar21 = (ulonglong)CONCAT43(uVar3,CONCAT12((char)((uint)uVar2 >> 8),(ushort)uVar2)) &
0xffffffff00ffffff;
uVar13 = (ushort)uVar2 & 0xff;
uVar6 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar4 = (ushort)(byte)(DAT_008f86b0 >> 8);
bVar19 = (byte)DAT_008f86b0;
uVar5 = uVar21 >> 0x10 & 0xffffff00ff00;
sVar14 = (short)(uVar21 >> 0x10);
sVar15 = (short)(uVar16 >> 8);
sVar17 = (short)(uVar16 >> 0x18);
uVar22 = (ulonglong)
CONCAT24((sVar15 + uVar6) - ((ushort)((uVar6 + (uVar6 != 0)) * sVar15) >> 8),
CONCAT22((sVar14 + uVar4) -
((ushort)((uVar4 + (uVar4 != 0)) * sVar14) >> 8),
(uVar13 + bVar19) -
((ushort)(((ushort)bVar19 + (ushort)(bVar19 != 0)) * uVar13
) >> 8))) & 0xff00ff00ff;
uVar21 = uVar22 | uVar5 << 0x10;
if (uVar8 + 1 != 0x100) {
sVar18 = (short)(uVar8 + 1);
uVar21 = CONCAT26(sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar5 >> 0x20) * sVar18) >> 8)),
CONCAT24(sVar15 - (((ushort)(sVar15 * sVar18) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar18) >> 8
)),
CONCAT22(sVar14 - (((ushort)(sVar14 * sVar18) >> 8) -
((ushort)((short)(uVar22 >> 0x10) *
sVar18) >> 8)),
uVar13 - (((ushort)(uVar13 * sVar18) >> 8) -
((ushort)((short)uVar22 * sVar18) >> 8)
))));
}
sVar14 = (short)uVar21;
sVar15 = (short)(uVar21 >> 0x10);
sVar17 = (short)(uVar21 >> 0x20);
sVar18 = (short)(uVar21 >> 0x30);
*(uint *)(iVar12 + iVar9 * 4) =
CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x30) -
(0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)(uVar21 >> 0x20) -
(0xff < sVar17),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)(uVar21 >> 0x10) - (0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)uVar21 -
(0xff < sVar14))));
}
} while (iVar9 != 0);
}
iVar12 = iVar12 + iVar10;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_0066ad50 at 0x0066AD50 (size: 688) ---
void FUN_0066ad50(int param_1)
{
int iVar1;
int iVar2;
short sVar3;
ushort uVar4;
ushort uVar5;
uint uVar6;
ushort uVar7;
ushort uVar8;
uint uVar9;
byte *pbVar10;
byte *pbVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar16;
byte bVar17;
byte bVar18;
ulonglong uVar19;
int local_1c;
int local_10;
int local_c;
uVar6 = DAT_008f86b0;
if (*(int *)(param_1 + 8) == 0) {
iVar12 = *(int *)(param_1 + 0x14);
bVar17 = *(byte *)(param_1 + 0x24);
local_c = *(int *)(param_1 + 0x20);
if (local_c != 0) {
iVar13 = *(int *)(param_1 + 0x1c);
iVar1 = *(int *)(param_1 + 0x18);
do {
if (iVar13 != 0) {
pbVar10 = (byte *)(iVar13 * 3 + 2 + iVar12);
local_10 = iVar13;
do {
pbVar11 = pbVar10 + -3;
if (bVar17 != 0) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar7 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar14 = uVar8 & 0xff;
uVar5 = (ushort)(byte)(uVar6 >> 0x10);
uVar4 = (ushort)(byte)(uVar6 >> 8);
bVar18 = (byte)uVar6;
sVar16 = (short)(CONCAT23(uVar7,CONCAT12((char)(uVar8 >> 8),uVar8)) >> 0x10);
uVar7 = uVar7 >> 8;
sVar15 = bVar17 + 1;
uVar19 = (ulonglong)
CONCAT24((uVar7 + uVar5) - ((ushort)((uVar5 + (uVar5 != 0)) * uVar7) >> 8),
CONCAT22((sVar16 + uVar4) -
((ushort)((uVar4 + (uVar4 != 0)) * sVar16) >> 8),
(uVar14 + bVar18) -
((ushort)(((ushort)bVar18 + (ushort)(bVar18 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
if (sVar15 != 0x100) {
uVar19 = (ulonglong)
CONCAT24(uVar7 - (((ushort)(uVar7 * sVar15) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar15) >> 8)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar15) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar15) >> 8
)),
uVar14 - (((ushort)(uVar14 * sVar15) >> 8) -
((ushort)((short)uVar19 * sVar15) >> 8))));
}
sVar15 = (short)uVar19;
sVar16 = (short)(uVar19 >> 0x10);
sVar3 = (short)(uVar19 >> 0x20);
pbVar10[-5] = (0 < sVar15) * (sVar15 < 0x100) * (char)uVar19 - (0xff < sVar15);
pbVar10[-4] = (0 < sVar16) * (sVar16 < 0x100) * (char)(uVar19 >> 0x10) -
(0xff < sVar16);
*pbVar11 = (0 < sVar3) * (sVar3 < 0x100) * (char)(uVar19 >> 0x20) - (0xff < sVar3);
}
local_10 = local_10 + -1;
pbVar10 = pbVar11;
} while (local_10 != 0);
}
iVar12 = iVar12 - iVar1;
local_c = local_c + -1;
} while (local_c != 0);
}
}
else {
iVar12 = *(int *)(param_1 + 0x14);
iVar13 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_10 = *(int *)(param_1 + 0x20);
if (local_10 != 0) {
iVar1 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar1 != 0) {
uVar6 = DAT_008f86b0 >> 0x18;
pbVar10 = (byte *)(iVar1 * 3 + 2 + iVar12);
local_1c = iVar1;
do {
pbVar11 = pbVar10 + -3;
uVar9 = uVar6;
if (iVar13 != 0x100) {
uVar9 = (int)(uVar6 * iVar13) >> 8;
}
if (uVar9 != 0) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar7 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar14 = uVar8 & 0xff;
uVar5 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar4 = (ushort)(byte)(DAT_008f86b0 >> 8);
bVar17 = (byte)DAT_008f86b0;
sVar15 = (short)(CONCAT23(uVar7,CONCAT12((char)(uVar8 >> 8),uVar8)) >> 0x10);
uVar7 = uVar7 >> 8;
uVar19 = (ulonglong)
CONCAT24((uVar7 + uVar5) - ((ushort)((uVar5 + (uVar5 != 0)) * uVar7) >> 8),
CONCAT22((sVar15 + uVar4) -
((ushort)((uVar4 + (uVar4 != 0)) * sVar15) >> 8),
(uVar14 + bVar17) -
((ushort)(((ushort)bVar17 + (ushort)(bVar17 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
if (uVar9 + 1 != 0x100) {
sVar16 = (short)(uVar9 + 1);
uVar19 = (ulonglong)
CONCAT24(uVar7 - (((ushort)(uVar7 * sVar16) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar16) >> 8)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar16) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar16) >> 8
)),
uVar14 - (((ushort)(uVar14 * sVar16) >> 8) -
((ushort)((short)uVar19 * sVar16) >> 8))));
}
sVar15 = (short)uVar19;
sVar16 = (short)(uVar19 >> 0x10);
sVar3 = (short)(uVar19 >> 0x20);
pbVar10[-5] = (0 < sVar15) * (sVar15 < 0x100) * (char)uVar19 - (0xff < sVar15);
pbVar10[-4] = (0 < sVar16) * (sVar16 < 0x100) * (char)(uVar19 >> 0x10) -
(0xff < sVar16);
*pbVar11 = (0 < sVar3) * (sVar3 < 0x100) * (char)(uVar19 >> 0x20) - (0xff < sVar3);
}
local_1c = local_1c + -1;
pbVar10 = pbVar11;
} while (local_1c != 0);
}
iVar12 = iVar12 + iVar2;
local_10 = local_10 + -1;
} while (local_10 != 0);
}
}
return;
}
// --- FUN_0066b010 at 0x0066B010 (size: 606) ---
void FUN_0066b010(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
uint uVar5;
ushort uVar6;
ulonglong uVar7;
ushort uVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar16;
short sVar18;
uint5 uVar17;
short sVar19;
byte bVar20;
byte bVar21;
ulonglong uVar22;
ulonglong uVar23;
undefined4 local_20;
int local_14;
uVar9 = DAT_008f86b0;
local_20 = *(int *)(param_1 + 8);
if (local_20 == 0) {
iVar11 = *(int *)(param_1 + 0x14);
bVar20 = *(byte *)(param_1 + 0x24);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar13 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar13 != 0) {
iVar10 = iVar13;
do {
iVar10 = iVar10 + -1;
if (bVar20 != 0) {
uVar4 = *(undefined4 *)(iVar11 + iVar10 * 4);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar17 = (uint5)uVar5 & 0xffffffff00;
uVar22 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar4 & 0xff;
uVar8 = (ushort)(byte)(uVar9 >> 0x10);
uVar6 = (ushort)(byte)(uVar9 >> 8);
bVar21 = (byte)uVar9;
uVar7 = uVar22 >> 0x10 & 0xffffff00ff00;
sVar16 = (short)(uVar22 >> 0x10);
sVar18 = (short)(uVar17 >> 8);
sVar19 = (short)(uVar17 >> 0x18);
sVar15 = bVar20 + 1;
uVar23 = (ulonglong)
CONCAT24((sVar18 + uVar8) - ((ushort)((uVar8 + (uVar8 != 0)) * sVar18) >> 8),
CONCAT22((sVar16 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar16) >> 8),
(uVar14 + bVar21) -
((ushort)(((ushort)bVar21 + (ushort)(bVar21 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
uVar22 = uVar23 | uVar7 << 0x10;
if (sVar15 != 0x100) {
uVar22 = CONCAT26(sVar19 - (((ushort)(sVar19 * sVar15) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar15) >> 8)),
CONCAT24(sVar18 - (((ushort)(sVar18 * sVar15) >> 8) -
((ushort)((short)(uVar23 >> 0x20) * sVar15) >> 8
)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar15) >> 8) -
((ushort)((short)(uVar23 >> 0x10) *
sVar15) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar15) >> 8) -
((ushort)((short)uVar23 * sVar15) >> 8)
))));
}
sVar15 = (short)uVar22;
sVar16 = (short)(uVar22 >> 0x10);
sVar18 = (short)(uVar22 >> 0x20);
sVar19 = (short)(uVar22 >> 0x30);
*(uint *)(iVar11 + iVar10 * 4) =
CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)(uVar22 >> 0x30) -
(0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar22 >> 0x20) -
(0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)(uVar22 >> 0x10) - (0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar22 -
(0xff < sVar15))));
}
} while (iVar10 != 0);
}
iVar11 = iVar11 - iVar2;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar11 = *(int *)(param_1 + 0x14);
iVar13 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar10 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
iVar12 = iVar2;
do {
while (iVar12 != 0) {
iVar1 = iVar12 + -1;
iVar12 = iVar12 + -1;
uVar9 = ((uint)*(byte *)(iVar1 + local_20) << 0x18 | DAT_008f86b0) >> 0x18;
if (iVar13 != 0x100) {
uVar9 = (int)(uVar9 * iVar13) >> 8;
}
if (uVar9 != 0) {
uVar4 = *(undefined4 *)(iVar11 + iVar12 * 4);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4)) >>
0x20),uVar4) >> 0x18);
uVar17 = (uint5)uVar5 & 0xffffffff00;
uVar22 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar4 & 0xff;
uVar8 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar6 = (ushort)(byte)(DAT_008f86b0 >> 8);
bVar20 = (byte)DAT_008f86b0;
uVar7 = uVar22 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar22 >> 0x10);
sVar16 = (short)(uVar17 >> 8);
sVar18 = (short)(uVar17 >> 0x18);
uVar23 = (ulonglong)
CONCAT24((sVar16 + uVar8) - ((ushort)((uVar8 + (uVar8 != 0)) * sVar16) >> 8),
CONCAT22((sVar15 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar15) >> 8),
(uVar14 + bVar20) -
((ushort)(((ushort)bVar20 + (ushort)(bVar20 != 0)) * uVar14)
>> 8))) & 0xff00ff00ff;
uVar22 = uVar23 | uVar7 << 0x10;
if (uVar9 + 1 != 0x100) {
sVar19 = (short)(uVar9 + 1);
uVar22 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar19) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar16 - (((ushort)(sVar16 * sVar19) >> 8) -
((ushort)((short)(uVar23 >> 0x20) * sVar19) >> 8))
,CONCAT22(sVar15 - (((ushort)(sVar15 * sVar19) >> 8) -
((ushort)((short)(uVar23 >> 0x10) *
sVar19) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar19) >> 8) -
((ushort)((short)uVar23 * sVar19) >> 8))
)));
}
sVar15 = (short)uVar22;
sVar16 = (short)(uVar22 >> 0x10);
sVar18 = (short)(uVar22 >> 0x20);
sVar19 = (short)(uVar22 >> 0x30);
*(uint *)(iVar11 + iVar12 * 4) =
CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)(uVar22 >> 0x30) - (0xff < sVar19)
,CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar22 >> 0x20) -
(0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)(uVar22 >> 0x10) - (0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar22 -
(0xff < sVar15))));
}
}
local_20 = local_20 + iVar10;
iVar11 = iVar11 + iVar3;
local_14 = local_14 + -1;
iVar12 = iVar2;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_0066b270 at 0x0066B270 (size: 736) ---
void FUN_0066b270(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
ushort uVar7;
ushort uVar8;
ushort uVar9;
uint uVar10;
byte *pbVar11;
int iVar12;
byte *pbVar13;
int iVar14;
int iVar15;
ushort uVar16;
short sVar17;
short sVar18;
byte bVar19;
byte bVar20;
ulonglong uVar21;
int local_24;
int local_18;
int local_14;
uVar10 = DAT_008f86b0;
local_24 = *(int *)(param_1 + 8);
if (local_24 == 0) {
bVar19 = *(byte *)(param_1 + 0x24);
iVar14 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar12 = *(int *)(param_1 + 0x18);
iVar2 = *(int *)(param_1 + 0x1c);
do {
if (iVar2 != 0) {
pbVar11 = (byte *)(iVar2 * 3 + 2 + iVar14);
local_18 = iVar2;
do {
pbVar13 = pbVar11 + -3;
if (bVar19 != 0) {
uVar9 = *(ushort *)(pbVar11 + -5);
uVar8 = (ushort)(((uint5)*pbVar13 << 0x20) >> 0x18);
uVar16 = uVar9 & 0xff;
uVar7 = (ushort)(byte)(uVar10 >> 0x10);
uVar6 = (ushort)(byte)(uVar10 >> 8);
bVar20 = (byte)uVar10;
sVar18 = (short)(CONCAT23(uVar8,CONCAT12((char)(uVar9 >> 8),uVar9)) >> 0x10);
uVar8 = uVar8 >> 8;
sVar17 = bVar19 + 1;
uVar21 = (ulonglong)
CONCAT24((uVar8 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * uVar8) >> 8),
CONCAT22((sVar18 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar18) >> 8),
(uVar16 + bVar20) -
((ushort)(((ushort)bVar20 + (ushort)(bVar20 != 0)) * uVar16
) >> 8))) & 0xff00ff00ff;
if (sVar17 != 0x100) {
uVar21 = (ulonglong)
CONCAT24(uVar8 - (((ushort)(uVar8 * sVar17) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar17) >> 8)),
CONCAT22(sVar18 - (((ushort)(sVar18 * sVar17) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar17) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar17) >> 8) -
((ushort)((short)uVar21 * sVar17) >> 8))));
}
sVar17 = (short)uVar21;
sVar18 = (short)(uVar21 >> 0x10);
sVar5 = (short)(uVar21 >> 0x20);
pbVar11[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar21 - (0xff < sVar17);
pbVar11[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x10) -
(0xff < sVar18);
*pbVar13 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar21 >> 0x20) - (0xff < sVar5);
}
local_18 = local_18 + -1;
pbVar11 = pbVar13;
} while (local_18 != 0);
}
iVar14 = iVar14 - iVar12;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar14 = *(int *)(param_1 + 0x14);
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pbVar11 = (byte *)(iVar2 * 3 + 2 + iVar14);
iVar15 = iVar2;
do {
iVar1 = iVar15 + -1;
iVar15 = iVar15 + -1;
pbVar13 = pbVar11 + -3;
uVar10 = ((uint)*(byte *)(iVar1 + local_24) << 0x18 | DAT_008f86b0) >> 0x18;
if (iVar12 != 0x100) {
uVar10 = (int)(uVar10 * iVar12) >> 8;
}
if (uVar10 != 0) {
uVar9 = *(ushort *)(pbVar11 + -5);
uVar8 = (ushort)(((uint5)*pbVar13 << 0x20) >> 0x18);
uVar16 = uVar9 & 0xff;
uVar7 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar6 = (ushort)(byte)(DAT_008f86b0 >> 8);
bVar19 = (byte)DAT_008f86b0;
sVar17 = (short)(CONCAT23(uVar8,CONCAT12((char)(uVar9 >> 8),uVar9)) >> 0x10);
uVar8 = uVar8 >> 8;
uVar21 = (ulonglong)
CONCAT24((uVar8 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * uVar8) >> 8),
CONCAT22((sVar17 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar17) >> 8),
(uVar16 + bVar19) -
((ushort)(((ushort)bVar19 + (ushort)(bVar19 != 0)) * uVar16
) >> 8))) & 0xff00ff00ff;
if (uVar10 + 1 != 0x100) {
sVar18 = (short)(uVar10 + 1);
uVar21 = (ulonglong)
CONCAT24(uVar8 - (((ushort)(uVar8 * sVar18) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar18) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar18) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar18) >> 8) -
((ushort)((short)uVar21 * sVar18) >> 8))));
}
sVar17 = (short)uVar21;
sVar18 = (short)(uVar21 >> 0x10);
sVar5 = (short)(uVar21 >> 0x20);
pbVar11[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar21 - (0xff < sVar17);
pbVar11[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x10) -
(0xff < sVar18);
*pbVar13 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar21 >> 0x20) - (0xff < sVar5);
}
pbVar11 = pbVar13;
} while (iVar15 != 0);
}
local_24 = local_24 + iVar3;
iVar14 = iVar14 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066b570 at 0x0066B570 (size: 624) ---
void FUN_0066b570(int param_1)
{
uint *puVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
uint uVar5;
ushort uVar6;
ulonglong uVar7;
ushort uVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
undefined4 *puVar13;
ushort uVar14;
short sVar15;
short sVar16;
short sVar18;
uint5 uVar17;
short sVar19;
byte bVar20;
byte bVar21;
ulonglong uVar22;
ulonglong uVar23;
int local_28;
int local_20;
int local_14;
uVar9 = DAT_008f86b0;
local_28 = *(int *)(param_1 + 8);
iVar11 = *(int *)(param_1 + 0x14);
if (local_28 == 0) {
bVar20 = *(byte *)(param_1 + 0x24);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar12 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar12 != 0) {
iVar10 = iVar12;
do {
iVar10 = iVar10 + -1;
if (bVar20 != 0) {
uVar4 = *(undefined4 *)(iVar11 + iVar10 * 4);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar17 = (uint5)uVar5 & 0xffffffff00;
uVar22 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar4 & 0xff;
uVar8 = (ushort)(byte)(uVar9 >> 0x10);
uVar6 = (ushort)(byte)(uVar9 >> 8);
bVar21 = (byte)uVar9;
uVar7 = uVar22 >> 0x10 & 0xffffff00ff00;
sVar16 = (short)(uVar22 >> 0x10);
sVar18 = (short)(uVar17 >> 8);
sVar19 = (short)(uVar17 >> 0x18);
sVar15 = bVar20 + 1;
uVar23 = (ulonglong)
CONCAT24((sVar18 + uVar8) - ((ushort)((uVar8 + (uVar8 != 0)) * sVar18) >> 8),
CONCAT22((sVar16 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar16) >> 8),
(uVar14 + bVar21) -
((ushort)(((ushort)bVar21 + (ushort)(bVar21 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
uVar22 = uVar23 | uVar7 << 0x10;
if (sVar15 != 0x100) {
uVar22 = CONCAT26(sVar19 - (((ushort)(sVar19 * sVar15) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar15) >> 8)),
CONCAT24(sVar18 - (((ushort)(sVar18 * sVar15) >> 8) -
((ushort)((short)(uVar23 >> 0x20) * sVar15) >> 8
)),
CONCAT22(sVar16 - (((ushort)(sVar16 * sVar15) >> 8) -
((ushort)((short)(uVar23 >> 0x10) *
sVar15) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar15) >> 8) -
((ushort)((short)uVar23 * sVar15) >> 8)
))));
}
sVar15 = (short)uVar22;
sVar16 = (short)(uVar22 >> 0x10);
sVar18 = (short)(uVar22 >> 0x20);
sVar19 = (short)(uVar22 >> 0x30);
*(uint *)(iVar11 + iVar10 * 4) =
CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)(uVar22 >> 0x30) -
(0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar22 >> 0x20) -
(0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)(uVar22 >> 0x10) - (0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar22 -
(0xff < sVar15))));
}
} while (iVar10 != 0);
}
iVar11 = iVar11 - iVar2;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar10 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
puVar13 = (undefined4 *)(iVar11 + iVar2 * 4);
local_20 = iVar2;
do {
puVar1 = (uint *)((local_28 - iVar11) + -4 + (int)puVar13);
puVar13 = puVar13 + -1;
uVar9 = (*puVar1 & 0xff000000 | DAT_008f86b0) >> 0x18;
if (iVar12 != 0x100) {
uVar9 = (int)(uVar9 * iVar12) >> 8;
}
if (uVar9 != 0) {
uVar4 = *puVar13;
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar17 = (uint5)uVar5 & 0xffffffff00;
uVar22 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),(ushort)uVar4)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar4 & 0xff;
uVar8 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar6 = (ushort)(byte)(DAT_008f86b0 >> 8);
bVar20 = (byte)DAT_008f86b0;
uVar7 = uVar22 >> 0x10 & 0xffffff00ff00;
sVar15 = (short)(uVar22 >> 0x10);
sVar16 = (short)(uVar17 >> 8);
sVar18 = (short)(uVar17 >> 0x18);
uVar23 = (ulonglong)
CONCAT24((sVar16 + uVar8) - ((ushort)((uVar8 + (uVar8 != 0)) * sVar16) >> 8),
CONCAT22((sVar15 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar15) >> 8),
(uVar14 + bVar20) -
((ushort)(((ushort)bVar20 + (ushort)(bVar20 != 0)) * uVar14
) >> 8))) & 0xff00ff00ff;
uVar22 = uVar23 | uVar7 << 0x10;
if (uVar9 + 1 != 0x100) {
sVar19 = (short)(uVar9 + 1);
uVar22 = CONCAT26(sVar18 - (((ushort)(sVar18 * sVar19) >> 8) -
((ushort)((short)(uVar7 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar16 - (((ushort)(sVar16 * sVar19) >> 8) -
((ushort)((short)(uVar23 >> 0x20) * sVar19) >> 8
)),
CONCAT22(sVar15 - (((ushort)(sVar15 * sVar19) >> 8) -
((ushort)((short)(uVar23 >> 0x10) *
sVar19) >> 8)),
uVar14 - (((ushort)(uVar14 * sVar19) >> 8) -
((ushort)((short)uVar23 * sVar19) >> 8)
))));
}
sVar15 = (short)uVar22;
sVar16 = (short)(uVar22 >> 0x10);
sVar18 = (short)(uVar22 >> 0x20);
sVar19 = (short)(uVar22 >> 0x30);
*puVar13 = CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)(uVar22 >> 0x30) -
(0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)(uVar22 >> 0x20)
- (0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)(uVar22 >> 0x10) - (0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)uVar22 -
(0xff < sVar15))));
}
local_20 = local_20 + -1;
} while (local_20 != 0);
}
local_28 = local_28 + iVar10;
iVar11 = iVar11 + iVar3;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_0066b7e0 at 0x0066B7E0 (size: 731) ---
void FUN_0066b7e0(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
ushort uVar7;
ushort uVar8;
ushort uVar9;
uint uVar10;
byte *pbVar11;
int iVar12;
byte *pbVar13;
int iVar14;
int iVar15;
ushort uVar16;
short sVar17;
short sVar18;
byte bVar19;
byte bVar20;
ulonglong uVar21;
int local_24;
int local_18;
int local_14;
uVar10 = DAT_008f86b0;
local_24 = *(int *)(param_1 + 8);
if (local_24 == 0) {
bVar19 = *(byte *)(param_1 + 0x24);
iVar14 = *(int *)(param_1 + 0x14);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar12 = *(int *)(param_1 + 0x18);
iVar2 = *(int *)(param_1 + 0x1c);
do {
if (iVar2 != 0) {
pbVar11 = (byte *)(iVar2 * 3 + 2 + iVar14);
local_18 = iVar2;
do {
pbVar13 = pbVar11 + -3;
if (bVar19 != 0) {
uVar9 = *(ushort *)(pbVar11 + -5);
uVar8 = (ushort)(((uint5)*pbVar13 << 0x20) >> 0x18);
uVar16 = uVar9 & 0xff;
uVar7 = (ushort)(byte)(uVar10 >> 0x10);
uVar6 = (ushort)(byte)(uVar10 >> 8);
bVar20 = (byte)uVar10;
sVar18 = (short)(CONCAT23(uVar8,CONCAT12((char)(uVar9 >> 8),uVar9)) >> 0x10);
uVar8 = uVar8 >> 8;
sVar17 = bVar19 + 1;
uVar21 = (ulonglong)
CONCAT24((uVar8 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * uVar8) >> 8),
CONCAT22((sVar18 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar18) >> 8),
(uVar16 + bVar20) -
((ushort)(((ushort)bVar20 + (ushort)(bVar20 != 0)) * uVar16
) >> 8))) & 0xff00ff00ff;
if (sVar17 != 0x100) {
uVar21 = (ulonglong)
CONCAT24(uVar8 - (((ushort)(uVar8 * sVar17) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar17) >> 8)),
CONCAT22(sVar18 - (((ushort)(sVar18 * sVar17) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar17) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar17) >> 8) -
((ushort)((short)uVar21 * sVar17) >> 8))));
}
sVar17 = (short)uVar21;
sVar18 = (short)(uVar21 >> 0x10);
sVar5 = (short)(uVar21 >> 0x20);
pbVar11[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar21 - (0xff < sVar17);
pbVar11[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x10) -
(0xff < sVar18);
*pbVar13 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar21 >> 0x20) - (0xff < sVar5);
}
local_18 = local_18 + -1;
pbVar11 = pbVar13;
} while (local_18 != 0);
}
iVar14 = iVar14 - iVar12;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar14 = *(int *)(param_1 + 0x14);
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
pbVar11 = (byte *)(iVar2 * 3 + 2 + iVar14);
iVar15 = iVar2;
do {
iVar1 = iVar15 * 4;
iVar15 = iVar15 + -1;
pbVar13 = pbVar11 + -3;
uVar10 = (*(uint *)(local_24 + -4 + iVar1) & 0xff000000 | DAT_008f86b0) >> 0x18;
if (iVar12 != 0x100) {
uVar10 = (int)(uVar10 * iVar12) >> 8;
}
if (uVar10 != 0) {
uVar9 = *(ushort *)(pbVar11 + -5);
uVar8 = (ushort)(((uint5)*pbVar13 << 0x20) >> 0x18);
uVar16 = uVar9 & 0xff;
uVar7 = (ushort)(byte)(DAT_008f86b0 >> 0x10);
uVar6 = (ushort)(byte)(DAT_008f86b0 >> 8);
bVar19 = (byte)DAT_008f86b0;
sVar17 = (short)(CONCAT23(uVar8,CONCAT12((char)(uVar9 >> 8),uVar9)) >> 0x10);
uVar8 = uVar8 >> 8;
uVar21 = (ulonglong)
CONCAT24((uVar8 + uVar7) - ((ushort)((uVar7 + (uVar7 != 0)) * uVar8) >> 8),
CONCAT22((sVar17 + uVar6) -
((ushort)((uVar6 + (uVar6 != 0)) * sVar17) >> 8),
(uVar16 + bVar19) -
((ushort)(((ushort)bVar19 + (ushort)(bVar19 != 0)) * uVar16
) >> 8))) & 0xff00ff00ff;
if (uVar10 + 1 != 0x100) {
sVar18 = (short)(uVar10 + 1);
uVar21 = (ulonglong)
CONCAT24(uVar8 - (((ushort)(uVar8 * sVar18) >> 8) -
((ushort)((short)(uVar21 >> 0x20) * sVar18) >> 8)),
CONCAT22(sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar21 >> 0x10) * sVar18) >> 8
)),
uVar16 - (((ushort)(uVar16 * sVar18) >> 8) -
((ushort)((short)uVar21 * sVar18) >> 8))));
}
sVar17 = (short)uVar21;
sVar18 = (short)(uVar21 >> 0x10);
sVar5 = (short)(uVar21 >> 0x20);
pbVar11[-5] = (0 < sVar17) * (sVar17 < 0x100) * (char)uVar21 - (0xff < sVar17);
pbVar11[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar21 >> 0x10) -
(0xff < sVar18);
*pbVar13 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar21 >> 0x20) - (0xff < sVar5);
}
pbVar11 = pbVar13;
} while (iVar15 != 0);
}
local_24 = local_24 + iVar3;
iVar14 = iVar14 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066bad0 at 0x0066BAD0 (size: 597) ---
void FUN_0066bad0(int param_1)
{
byte bVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
uint uVar5;
uint uVar6;
int iVar7;
uint uVar8;
int iVar9;
int iVar10;
ulonglong uVar11;
ulonglong uVar12;
ushort uVar13;
uint6 uVar15;
short sVar17;
ushort uVar18;
short sVar19;
short sVar20;
short sVar21;
ushort uVar22;
uint6 uVar23;
ulonglong uVar24;
undefined4 local_c;
ulonglong uVar14;
uint5 uVar16;
if (*(int *)(param_1 + 8) == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
iVar10 = *(int *)(param_1 + 0x14);
iVar9 = *(int *)(param_1 + 0x20);
if (iVar9 != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
iVar7 = iVar2;
do {
iVar7 = iVar7 + -1;
if (bVar1 != 0) {
uVar4 = *(undefined4 *)(iVar10 + iVar7 * 4);
uVar8 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar16 = (uint5)uVar8 & 0xffffffff00;
uVar13 = (ushort)uVar4;
uVar14 = (ulonglong)CONCAT43(uVar8,CONCAT12((char)((uint)uVar4 >> 8),uVar13)) &
0xffffffff00ffffff;
uVar15 = (uint6)(uVar14 >> 0x10);
uVar11 = CONCAT62(uVar15,uVar13) & 0xff00ff00ff;
uVar18 = (ushort)(uVar11 >> 0x10);
uVar23 = CONCAT24(-(ushort)(uVar18 < (ushort)(uVar11 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar11 < uVar18),
-(ushort)((ushort)uVar11 != 0)));
uVar24 = ~(ulonglong)uVar23 & uVar11 << 0x10;
uVar11 = uVar11 & uVar23;
uVar12 = uVar11 | uVar24;
uVar18 = (ushort)(uVar12 >> 0x20);
uVar22 = (ushort)uVar11;
uVar24 = (ulonglong)
CONCAT24(-(ushort)(uVar22 < uVar18),
CONCAT22(-(ushort)((ushort)(uVar24 >> 0x30) <
(ushort)(uVar12 >> 0x10)),
-(ushort)(uVar18 < uVar22)));
uVar11 = (ulonglong)uVar15 & 0xffffff00ff00;
sVar17 = bVar1 + 1;
uVar12 = uVar12 & uVar24 | ~uVar24 & (uVar12 << 0x20 | uVar12 >> 0x20) & 0xff00ff00ff;
uVar24 = uVar12 | uVar11 << 0x10;
if (sVar17 != 0x100) {
sVar19 = (short)(uVar14 >> 0x10);
sVar20 = (short)(uVar16 >> 8);
sVar21 = (short)(uVar16 >> 0x18);
uVar24 = CONCAT26(sVar21 - (((ushort)(sVar21 * sVar17) >> 8) -
((ushort)((short)(uVar11 >> 0x20) * sVar17) >> 8)),
CONCAT24(sVar20 - (((ushort)(sVar20 * sVar17) >> 8) -
((ushort)((short)(uVar12 >> 0x20) * sVar17) >> 8
)),
CONCAT22(sVar19 - (((ushort)(sVar19 * sVar17) >> 8) -
((ushort)((short)(uVar12 >> 0x10) *
sVar17) >> 8)),
(uVar13 & 0xff) -
(((ushort)((uVar13 & 0xff) * sVar17) >> 8) -
((ushort)((short)uVar12 * sVar17) >> 8)))));
}
sVar17 = (short)uVar24;
sVar19 = (short)(uVar24 >> 0x10);
sVar20 = (short)(uVar24 >> 0x20);
sVar21 = (short)(uVar24 >> 0x30);
*(uint *)(iVar10 + iVar7 * 4) =
CONCAT13((0 < sVar21) * (sVar21 < 0x100) * (char)(uVar24 >> 0x30) -
(0xff < sVar21),
CONCAT12((0 < sVar20) * (sVar20 < 0x100) * (char)(uVar24 >> 0x20) -
(0xff < sVar20),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)(uVar24 >> 0x10) - (0xff < sVar19),
(0 < sVar17) * (sVar17 < 0x100) * (char)uVar24 -
(0xff < sVar17))));
}
} while (iVar7 != 0);
}
iVar10 = iVar10 - iVar3;
iVar9 = iVar9 + -1;
} while (iVar9 != 0);
}
}
else {
iVar10 = *(int *)(param_1 + 0x14);
iVar9 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_c = *(int *)(param_1 + 0x20);
if (local_c != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
uVar8 = (uint)DAT_008f86b0._3_1_;
iVar7 = iVar2;
do {
iVar7 = iVar7 + -1;
uVar6 = uVar8;
if (iVar9 != 0x100) {
uVar6 = (int)(uVar8 * iVar9) >> 8;
}
if (uVar6 != 0) {
uVar4 = *(undefined4 *)(iVar10 + iVar7 * 4);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar4 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar4 >> 0x10),uVar4))
>> 0x20),uVar4) >> 0x18);
uVar16 = (uint5)uVar5 & 0xffffffff00;
uVar13 = (ushort)uVar4;
uVar14 = (ulonglong)CONCAT43(uVar5,CONCAT12((char)((uint)uVar4 >> 8),uVar13)) &
0xffffffff00ffffff;
uVar15 = (uint6)(uVar14 >> 0x10);
uVar11 = CONCAT62(uVar15,uVar13) & 0xff00ff00ff;
uVar18 = (ushort)(uVar11 >> 0x10);
uVar23 = CONCAT24(-(ushort)(uVar18 < (ushort)(uVar11 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar11 < uVar18),
-(ushort)((ushort)uVar11 != 0)));
uVar24 = ~(ulonglong)uVar23 & uVar11 << 0x10;
uVar11 = uVar11 & uVar23;
uVar12 = uVar11 | uVar24;
uVar18 = (ushort)(uVar12 >> 0x20);
uVar22 = (ushort)uVar11;
uVar24 = (ulonglong)
CONCAT24(-(ushort)(uVar22 < uVar18),
CONCAT22(-(ushort)((ushort)(uVar24 >> 0x30) <
(ushort)(uVar12 >> 0x10)),
-(ushort)(uVar18 < uVar22)));
uVar11 = (ulonglong)uVar15 & 0xffffff00ff00;
uVar12 = uVar12 & uVar24 | ~uVar24 & (uVar12 << 0x20 | uVar12 >> 0x20) & 0xff00ff00ff;
uVar24 = uVar12 | uVar11 << 0x10;
if (uVar6 + 1 != 0x100) {
sVar17 = (short)(uVar6 + 1);
sVar19 = (short)(uVar14 >> 0x10);
sVar20 = (short)(uVar16 >> 8);
sVar21 = (short)(uVar16 >> 0x18);
uVar24 = CONCAT26(sVar21 - (((ushort)(sVar21 * sVar17) >> 8) -
((ushort)((short)(uVar11 >> 0x20) * sVar17) >> 8)),
CONCAT24(sVar20 - (((ushort)(sVar20 * sVar17) >> 8) -
((ushort)((short)(uVar12 >> 0x20) * sVar17) >> 8
)),
CONCAT22(sVar19 - (((ushort)(sVar19 * sVar17) >> 8) -
((ushort)((short)(uVar12 >> 0x10) *
sVar17) >> 8)),
(uVar13 & 0xff) -
(((ushort)((uVar13 & 0xff) * sVar17) >> 8) -
((ushort)((short)uVar12 * sVar17) >> 8)))));
}
sVar17 = (short)uVar24;
sVar19 = (short)(uVar24 >> 0x10);
sVar20 = (short)(uVar24 >> 0x20);
sVar21 = (short)(uVar24 >> 0x30);
*(uint *)(iVar10 + iVar7 * 4) =
CONCAT13((0 < sVar21) * (sVar21 < 0x100) * (char)(uVar24 >> 0x30) -
(0xff < sVar21),
CONCAT12((0 < sVar20) * (sVar20 < 0x100) * (char)(uVar24 >> 0x20) -
(0xff < sVar20),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)(uVar24 >> 0x10) - (0xff < sVar19),
(0 < sVar17) * (sVar17 < 0x100) * (char)uVar24 -
(0xff < sVar17))));
}
} while (iVar7 != 0);
}
iVar10 = iVar10 + iVar3;
local_c = local_c + -1;
} while (local_c != 0);
}
}
return;
}
// --- FUN_0066bd40 at 0x0066BD40 (size: 727) ---
void FUN_0066bd40(int param_1)
{
byte bVar1;
int iVar2;
short sVar3;
ushort uVar4;
uint5 uVar5;
ushort uVar6;
uint uVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
ulonglong uVar14;
ulonglong uVar15;
short sVar16;
ushort uVar17;
short sVar18;
ushort uVar19;
uint6 uVar20;
ulonglong uVar21;
int local_14;
int local_10;
int local_c;
iVar10 = *(int *)(param_1 + 0x14);
if (*(int *)(param_1 + 8) == 0) {
bVar1 = *(byte *)(param_1 + 0x24);
local_10 = *(int *)(param_1 + 0x20);
if (local_10 != 0) {
iVar12 = *(int *)(param_1 + 0x1c);
iVar2 = *(int *)(param_1 + 0x18);
do {
if (iVar12 != 0) {
pbVar8 = (byte *)(iVar12 * 3 + 2 + iVar10);
iVar11 = iVar12;
do {
pbVar9 = pbVar8 + -3;
if (bVar1 != 0) {
uVar6 = *(ushort *)(pbVar8 + -5);
uVar4 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar5 = CONCAT23(uVar4,CONCAT12((char)(uVar6 >> 8),uVar6));
uVar14 = (ulonglong)CONCAT52(uVar5 >> 0x10,uVar6) & 0xff00ff00ff;
uVar17 = (ushort)(uVar14 >> 0x10);
uVar20 = CONCAT24(-(ushort)(uVar17 < (ushort)(uVar14 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar14 < uVar17),
-(ushort)((ushort)uVar14 != 0)));
uVar21 = ~(ulonglong)uVar20 & uVar14 << 0x10;
uVar14 = uVar14 & uVar20;
uVar15 = uVar14 | uVar21;
uVar17 = (ushort)(uVar15 >> 0x20);
uVar19 = (ushort)uVar14;
uVar14 = (ulonglong)
CONCAT24(-(ushort)(uVar19 < uVar17),
CONCAT22(-(ushort)((ushort)(uVar21 >> 0x30) <
(ushort)(uVar15 >> 0x10)),
-(ushort)(uVar17 < uVar19)));
sVar16 = bVar1 + 1;
uVar14 = uVar15 & uVar14 | ~uVar14 & (uVar15 << 0x20 | uVar15 >> 0x20) & 0xff00ff00ff;
if (sVar16 != 0x100) {
sVar18 = (short)(uVar5 >> 0x10);
uVar4 = uVar4 >> 8;
uVar14 = (ulonglong)
CONCAT24(uVar4 - (((ushort)(uVar4 * sVar16) >> 8) -
((ushort)((short)(uVar14 >> 0x20) * sVar16) >> 8)),
CONCAT22(sVar18 - (((ushort)(sVar18 * sVar16) >> 8) -
((ushort)((short)(uVar14 >> 0x10) * sVar16) >> 8
)),
(uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar16) >> 8) -
((ushort)((short)uVar14 * sVar16) >> 8))));
}
sVar16 = (short)uVar14;
sVar18 = (short)(uVar14 >> 0x10);
sVar3 = (short)(uVar14 >> 0x20);
pbVar8[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar14 - (0xff < sVar16);
pbVar8[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar14 >> 0x10) -
(0xff < sVar18);
*pbVar9 = (0 < sVar3) * (sVar3 < 0x100) * (char)(uVar14 >> 0x20) - (0xff < sVar3);
}
iVar11 = iVar11 + -1;
pbVar8 = pbVar9;
} while (iVar11 != 0);
}
iVar10 = iVar10 - iVar2;
local_10 = local_10 + -1;
} while (local_10 != 0);
}
}
else {
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_c = *(int *)(param_1 + 0x20);
if (local_c != 0) {
iVar2 = *(int *)(param_1 + 0x1c);
iVar11 = *(int *)(param_1 + 0x18);
do {
if (iVar2 != 0) {
uVar13 = (uint)DAT_008f86b0._3_1_;
pbVar8 = (byte *)(iVar2 * 3 + 2 + iVar10);
local_14 = iVar2;
do {
pbVar9 = pbVar8 + -3;
uVar7 = uVar13;
if (iVar12 != 0x100) {
uVar7 = (int)(uVar13 * iVar12) >> 8;
}
if (uVar7 != 0) {
uVar6 = *(ushort *)(pbVar8 + -5);
uVar4 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar5 = CONCAT23(uVar4,CONCAT12((char)(uVar6 >> 8),uVar6));
uVar14 = (ulonglong)CONCAT52(uVar5 >> 0x10,uVar6) & 0xff00ff00ff;
uVar17 = (ushort)(uVar14 >> 0x10);
uVar20 = CONCAT24(-(ushort)(uVar17 < (ushort)(uVar14 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar14 < uVar17),
-(ushort)((ushort)uVar14 != 0)));
uVar21 = ~(ulonglong)uVar20 & uVar14 << 0x10;
uVar14 = uVar14 & uVar20;
uVar15 = uVar14 | uVar21;
uVar17 = (ushort)(uVar15 >> 0x20);
uVar19 = (ushort)uVar14;
uVar14 = (ulonglong)
CONCAT24(-(ushort)(uVar19 < uVar17),
CONCAT22(-(ushort)((ushort)(uVar21 >> 0x30) <
(ushort)(uVar15 >> 0x10)),
-(ushort)(uVar17 < uVar19)));
uVar14 = uVar15 & uVar14 | ~uVar14 & (uVar15 << 0x20 | uVar15 >> 0x20) & 0xff00ff00ff;
if (uVar7 + 1 != 0x100) {
sVar16 = (short)(uVar7 + 1);
sVar18 = (short)(uVar5 >> 0x10);
uVar4 = uVar4 >> 8;
uVar14 = (ulonglong)
CONCAT24(uVar4 - (((ushort)(uVar4 * sVar16) >> 8) -
((ushort)((short)(uVar14 >> 0x20) * sVar16) >> 8)),
CONCAT22(sVar18 - (((ushort)(sVar18 * sVar16) >> 8) -
((ushort)((short)(uVar14 >> 0x10) * sVar16) >> 8
)),
(uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar16) >> 8) -
((ushort)((short)uVar14 * sVar16) >> 8))));
}
sVar16 = (short)uVar14;
sVar18 = (short)(uVar14 >> 0x10);
sVar3 = (short)(uVar14 >> 0x20);
pbVar8[-5] = (0 < sVar16) * (sVar16 < 0x100) * (char)uVar14 - (0xff < sVar16);
pbVar8[-4] = (0 < sVar18) * (sVar18 < 0x100) * (char)(uVar14 >> 0x10) -
(0xff < sVar18);
*pbVar9 = (0 < sVar3) * (sVar3 < 0x100) * (char)(uVar14 >> 0x20) - (0xff < sVar3);
}
local_14 = local_14 + -1;
pbVar8 = pbVar9;
} while (local_14 != 0);
}
iVar10 = iVar10 + iVar11;
local_c = local_c + -1;
} while (local_c != 0);
}
}
return;
}
// --- FUN_0066c020 at 0x0066C020 (size: 627) ---
void FUN_0066c020(int param_1)
{
int iVar1;
byte bVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
uint uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
ulonglong uVar13;
ulonglong uVar14;
ushort uVar15;
uint6 uVar17;
short sVar19;
ushort uVar20;
short sVar21;
short sVar22;
short sVar23;
ushort uVar24;
uint6 uVar25;
ulonglong uVar26;
undefined4 local_14;
ulonglong uVar16;
uint5 uVar18;
iVar10 = *(int *)(param_1 + 8);
if (iVar10 == 0) {
bVar2 = *(byte *)(param_1 + 0x24);
iVar10 = *(int *)(param_1 + 0x14);
iVar12 = *(int *)(param_1 + 0x20);
if (iVar12 != 0) {
iVar11 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x18);
do {
if (iVar11 != 0) {
iVar9 = iVar11;
do {
iVar9 = iVar9 + -1;
if (bVar2 != 0) {
uVar5 = *(undefined4 *)(iVar10 + iVar9 * 4);
uVar7 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar18 = (uint5)uVar7 & 0xffffffff00;
uVar15 = (ushort)uVar5;
uVar16 = (ulonglong)CONCAT43(uVar7,CONCAT12((char)((uint)uVar5 >> 8),uVar15)) &
0xffffffff00ffffff;
uVar17 = (uint6)(uVar16 >> 0x10);
uVar13 = CONCAT62(uVar17,uVar15) & 0xff00ff00ff;
uVar20 = (ushort)(uVar13 >> 0x10);
uVar25 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar13 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar13 < uVar20),
-(ushort)((ushort)uVar13 != 0)));
uVar26 = ~(ulonglong)uVar25 & uVar13 << 0x10;
uVar13 = uVar13 & uVar25;
uVar14 = uVar13 | uVar26;
uVar20 = (ushort)(uVar14 >> 0x20);
uVar24 = (ushort)uVar13;
uVar26 = (ulonglong)
CONCAT24(-(ushort)(uVar24 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar26 >> 0x30) <
(ushort)(uVar14 >> 0x10)),
-(ushort)(uVar20 < uVar24)));
uVar13 = (ulonglong)uVar17 & 0xffffff00ff00;
sVar19 = bVar2 + 1;
uVar14 = uVar14 & uVar26 | ~uVar26 & (uVar14 << 0x20 | uVar14 >> 0x20) & 0xff00ff00ff;
uVar26 = uVar14 | uVar13 << 0x10;
if (sVar19 != 0x100) {
sVar21 = (short)(uVar16 >> 0x10);
sVar22 = (short)(uVar18 >> 8);
sVar23 = (short)(uVar18 >> 0x18);
uVar26 = CONCAT26(sVar23 - (((ushort)(sVar23 * sVar19) >> 8) -
((ushort)((short)(uVar13 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar22 - (((ushort)(sVar22 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x20) * sVar19) >> 8
)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x10) *
sVar19) >> 8)),
(uVar15 & 0xff) -
(((ushort)((uVar15 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar14 * sVar19) >> 8)))));
}
sVar19 = (short)uVar26;
sVar21 = (short)(uVar26 >> 0x10);
sVar22 = (short)(uVar26 >> 0x20);
sVar23 = (short)(uVar26 >> 0x30);
*(uint *)(iVar10 + iVar9 * 4) =
CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)(uVar26 >> 0x30) -
(0xff < sVar23),
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)(uVar26 >> 0x20) -
(0xff < sVar22),
CONCAT11((0 < sVar21) * (sVar21 < 0x100) *
(char)(uVar26 >> 0x10) - (0xff < sVar21),
(0 < sVar19) * (sVar19 < 0x100) * (char)uVar26 -
(0xff < sVar19))));
}
} while (iVar9 != 0);
}
iVar10 = iVar10 - iVar3;
iVar12 = iVar12 + -1;
} while (iVar12 != 0);
}
}
else {
iVar12 = *(int *)(param_1 + 0x14);
iVar11 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar3 = *(int *)(param_1 + 0x1c);
iVar9 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
iVar8 = iVar3;
do {
while (iVar8 != 0) {
iVar1 = iVar8 + -1;
iVar8 = iVar8 + -1;
uVar7 = ((uint)*(byte *)(iVar1 + iVar10) << 0x18 | DAT_008f86b0) >> 0x18;
if (iVar11 != 0x100) {
uVar7 = (int)(uVar7 * iVar11) >> 8;
}
if (uVar7 != 0) {
uVar5 = *(undefined4 *)(iVar12 + iVar8 * 4);
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5)) >>
0x20),uVar5) >> 0x18);
uVar18 = (uint5)uVar6 & 0xffffffff00;
uVar15 = (ushort)uVar5;
uVar16 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),uVar15)) &
0xffffffff00ffffff;
uVar17 = (uint6)(uVar16 >> 0x10);
uVar13 = CONCAT62(uVar17,uVar15) & 0xff00ff00ff;
uVar20 = (ushort)(uVar13 >> 0x10);
uVar25 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar13 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar13 < uVar20),
-(ushort)((ushort)uVar13 != 0)));
uVar26 = ~(ulonglong)uVar25 & uVar13 << 0x10;
uVar13 = uVar13 & uVar25;
uVar14 = uVar13 | uVar26;
uVar20 = (ushort)(uVar14 >> 0x20);
uVar24 = (ushort)uVar13;
uVar26 = (ulonglong)
CONCAT24(-(ushort)(uVar24 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar26 >> 0x30) < (ushort)(uVar14 >> 0x10)
),-(ushort)(uVar20 < uVar24)));
uVar13 = (ulonglong)uVar17 & 0xffffff00ff00;
uVar14 = uVar14 & uVar26 | ~uVar26 & (uVar14 << 0x20 | uVar14 >> 0x20) & 0xff00ff00ff;
uVar26 = uVar14 | uVar13 << 0x10;
if (uVar7 + 1 != 0x100) {
sVar19 = (short)(uVar7 + 1);
sVar21 = (short)(uVar16 >> 0x10);
sVar22 = (short)(uVar18 >> 8);
sVar23 = (short)(uVar18 >> 0x18);
uVar26 = CONCAT26(sVar23 - (((ushort)(sVar23 * sVar19) >> 8) -
((ushort)((short)(uVar13 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar22 - (((ushort)(sVar22 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x20) * sVar19) >> 8))
,CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x10) *
sVar19) >> 8)),
(uVar15 & 0xff) -
(((ushort)((uVar15 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar14 * sVar19) >> 8)))));
}
sVar19 = (short)uVar26;
sVar21 = (short)(uVar26 >> 0x10);
sVar22 = (short)(uVar26 >> 0x20);
sVar23 = (short)(uVar26 >> 0x30);
*(uint *)(iVar12 + iVar8 * 4) =
CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)(uVar26 >> 0x30) - (0xff < sVar23)
,CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)(uVar26 >> 0x20) -
(0xff < sVar22),
CONCAT11((0 < sVar21) * (sVar21 < 0x100) *
(char)(uVar26 >> 0x10) - (0xff < sVar21),
(0 < sVar19) * (sVar19 < 0x100) * (char)uVar26 -
(0xff < sVar19))));
}
}
iVar10 = iVar10 + iVar9;
iVar12 = iVar12 + iVar4;
local_14 = local_14 + -1;
iVar8 = iVar3;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_0066c2a0 at 0x0066C2A0 (size: 762) ---
void FUN_0066c2a0(int param_1)
{
int iVar1;
byte bVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
uint5 uVar7;
ushort uVar8;
uint uVar9;
byte *pbVar10;
byte *pbVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
int iVar16;
ulonglong uVar17;
ulonglong uVar18;
short sVar19;
ushort uVar20;
short sVar21;
ushort uVar22;
uint6 uVar23;
ulonglong uVar24;
int local_1c;
int local_18;
iVar14 = *(int *)(param_1 + 8);
iVar12 = *(int *)(param_1 + 0x14);
if (iVar14 == 0) {
bVar2 = *(byte *)(param_1 + 0x24);
local_1c = *(int *)(param_1 + 0x20);
if (local_1c != 0) {
iVar14 = *(int *)(param_1 + 0x1c);
iVar16 = *(int *)(param_1 + 0x18);
do {
if (iVar14 != 0) {
pbVar10 = (byte *)(iVar14 * 3 + 2 + iVar12);
iVar13 = iVar14;
do {
pbVar11 = pbVar10 + -3;
if (bVar2 != 0) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar7 = CONCAT23(uVar6,CONCAT12((char)(uVar8 >> 8),uVar8));
uVar17 = (ulonglong)CONCAT52(uVar7 >> 0x10,uVar8) & 0xff00ff00ff;
uVar20 = (ushort)(uVar17 >> 0x10);
uVar23 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar17 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar17 < uVar20),
-(ushort)((ushort)uVar17 != 0)));
uVar24 = ~(ulonglong)uVar23 & uVar17 << 0x10;
uVar17 = uVar17 & uVar23;
uVar18 = uVar17 | uVar24;
uVar20 = (ushort)(uVar18 >> 0x20);
uVar22 = (ushort)uVar17;
uVar17 = (ulonglong)
CONCAT24(-(ushort)(uVar22 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar24 >> 0x30) <
(ushort)(uVar18 >> 0x10)),
-(ushort)(uVar20 < uVar22)));
sVar19 = bVar2 + 1;
uVar17 = uVar18 & uVar17 | ~uVar17 & (uVar18 << 0x20 | uVar18 >> 0x20) & 0xff00ff00ff;
if (sVar19 != 0x100) {
sVar21 = (short)(uVar7 >> 0x10);
uVar6 = uVar6 >> 8;
uVar17 = (ulonglong)
CONCAT24(uVar6 - (((ushort)(uVar6 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar19) >> 8)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar19) >> 8
)),
(uVar8 & 0xff) -
(((ushort)((uVar8 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar17 * sVar19) >> 8))));
}
sVar19 = (short)uVar17;
sVar21 = (short)(uVar17 >> 0x10);
sVar5 = (short)(uVar17 >> 0x20);
pbVar10[-5] = (0 < sVar19) * (sVar19 < 0x100) * (char)uVar17 - (0xff < sVar19);
pbVar10[-4] = (0 < sVar21) * (sVar21 < 0x100) * (char)(uVar17 >> 0x10) -
(0xff < sVar21);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar17 >> 0x20) - (0xff < sVar5);
}
iVar13 = iVar13 + -1;
pbVar10 = pbVar11;
} while (iVar13 != 0);
}
iVar12 = iVar12 - iVar16;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
else {
iVar16 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar13 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar13 != 0) {
pbVar10 = (byte *)(iVar13 * 3 + 2 + iVar12);
iVar15 = iVar13;
do {
iVar1 = iVar15 + -1;
iVar15 = iVar15 + -1;
pbVar11 = pbVar10 + -3;
uVar9 = ((uint)*(byte *)(iVar1 + iVar14) << 0x18 | DAT_008f86b0) >> 0x18;
if (iVar16 != 0x100) {
uVar9 = (int)(uVar9 * iVar16) >> 8;
}
if (uVar9 != 0) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar7 = CONCAT23(uVar6,CONCAT12((char)(uVar8 >> 8),uVar8));
uVar17 = (ulonglong)CONCAT52(uVar7 >> 0x10,uVar8) & 0xff00ff00ff;
uVar20 = (ushort)(uVar17 >> 0x10);
uVar23 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar17 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar17 < uVar20),
-(ushort)((ushort)uVar17 != 0)));
uVar24 = ~(ulonglong)uVar23 & uVar17 << 0x10;
uVar17 = uVar17 & uVar23;
uVar18 = uVar17 | uVar24;
uVar20 = (ushort)(uVar18 >> 0x20);
uVar22 = (ushort)uVar17;
uVar17 = (ulonglong)
CONCAT24(-(ushort)(uVar22 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar24 >> 0x30) <
(ushort)(uVar18 >> 0x10)),
-(ushort)(uVar20 < uVar22)));
uVar17 = uVar18 & uVar17 | ~uVar17 & (uVar18 << 0x20 | uVar18 >> 0x20) & 0xff00ff00ff;
if (uVar9 + 1 != 0x100) {
sVar19 = (short)(uVar9 + 1);
sVar21 = (short)(uVar7 >> 0x10);
uVar6 = uVar6 >> 8;
uVar17 = (ulonglong)
CONCAT24(uVar6 - (((ushort)(uVar6 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar19) >> 8)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar19) >> 8
)),
(uVar8 & 0xff) -
(((ushort)((uVar8 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar17 * sVar19) >> 8))));
}
sVar19 = (short)uVar17;
sVar21 = (short)(uVar17 >> 0x10);
sVar5 = (short)(uVar17 >> 0x20);
pbVar10[-5] = (0 < sVar19) * (sVar19 < 0x100) * (char)uVar17 - (0xff < sVar19);
pbVar10[-4] = (0 < sVar21) * (sVar21 < 0x100) * (char)(uVar17 >> 0x10) -
(0xff < sVar21);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar17 >> 0x20) - (0xff < sVar5);
}
pbVar10 = pbVar11;
} while (iVar15 != 0);
}
iVar14 = iVar14 + iVar3;
iVar12 = iVar12 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066c5b0 at 0x0066C5B0 (size: 675) ---
void FUN_0066c5b0(int param_1)
{
uint *puVar1;
byte bVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
uint uVar7;
uint uVar8;
undefined4 *puVar9;
int iVar10;
int iVar11;
int iVar12;
ulonglong uVar13;
ulonglong uVar14;
ushort uVar15;
uint6 uVar17;
short sVar19;
ushort uVar20;
short sVar21;
short sVar22;
short sVar23;
ushort uVar24;
uint6 uVar25;
ulonglong uVar26;
int local_28;
int local_20;
int local_14;
ulonglong uVar16;
uint5 uVar18;
uVar7 = DAT_008f86b0;
local_28 = *(int *)(param_1 + 8);
iVar11 = *(int *)(param_1 + 0x14);
if (local_28 == 0) {
bVar2 = *(byte *)(param_1 + 0x24);
iVar12 = *(int *)(param_1 + 0x20);
if (iVar12 != 0) {
iVar3 = *(int *)(param_1 + 0x1c);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar3 != 0) {
iVar10 = iVar3;
do {
iVar10 = iVar10 + -1;
if (bVar2 != 0) {
uVar5 = *(undefined4 *)(iVar11 + iVar10 * 4);
uVar7 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar18 = (uint5)uVar7 & 0xffffffff00;
uVar15 = (ushort)uVar5;
uVar16 = (ulonglong)CONCAT43(uVar7,CONCAT12((char)((uint)uVar5 >> 8),uVar15)) &
0xffffffff00ffffff;
uVar17 = (uint6)(uVar16 >> 0x10);
uVar13 = CONCAT62(uVar17,uVar15) & 0xff00ff00ff;
uVar20 = (ushort)(uVar13 >> 0x10);
uVar25 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar13 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar13 < uVar20),
-(ushort)((ushort)uVar13 != 0)));
uVar26 = ~(ulonglong)uVar25 & uVar13 << 0x10;
uVar13 = uVar13 & uVar25;
uVar14 = uVar13 | uVar26;
uVar20 = (ushort)(uVar14 >> 0x20);
uVar24 = (ushort)uVar13;
uVar26 = (ulonglong)
CONCAT24(-(ushort)(uVar24 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar26 >> 0x30) <
(ushort)(uVar14 >> 0x10)),
-(ushort)(uVar20 < uVar24)));
uVar13 = (ulonglong)uVar17 & 0xffffff00ff00;
sVar19 = bVar2 + 1;
uVar14 = uVar14 & uVar26 | ~uVar26 & (uVar14 << 0x20 | uVar14 >> 0x20) & 0xff00ff00ff;
uVar26 = uVar14 | uVar13 << 0x10;
if (sVar19 != 0x100) {
sVar21 = (short)(uVar16 >> 0x10);
sVar22 = (short)(uVar18 >> 8);
sVar23 = (short)(uVar18 >> 0x18);
uVar26 = CONCAT26(sVar23 - (((ushort)(sVar23 * sVar19) >> 8) -
((ushort)((short)(uVar13 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar22 - (((ushort)(sVar22 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x20) * sVar19) >> 8
)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x10) *
sVar19) >> 8)),
(uVar15 & 0xff) -
(((ushort)((uVar15 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar14 * sVar19) >> 8)))));
}
sVar19 = (short)uVar26;
sVar21 = (short)(uVar26 >> 0x10);
sVar22 = (short)(uVar26 >> 0x20);
sVar23 = (short)(uVar26 >> 0x30);
*(uint *)(iVar11 + iVar10 * 4) =
CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)(uVar26 >> 0x30) -
(0xff < sVar23),
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)(uVar26 >> 0x20) -
(0xff < sVar22),
CONCAT11((0 < sVar21) * (sVar21 < 0x100) *
(char)(uVar26 >> 0x10) - (0xff < sVar21),
(0 < sVar19) * (sVar19 < 0x100) * (char)uVar26 -
(0xff < sVar19))));
}
} while (iVar10 != 0);
}
iVar11 = iVar11 - iVar4;
iVar12 = iVar12 + -1;
} while (iVar12 != 0);
}
}
else {
iVar12 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_14 = *(int *)(param_1 + 0x20);
if (local_14 != 0) {
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x1c);
iVar10 = *(int *)(param_1 + 0x18);
do {
if (iVar4 != 0) {
puVar9 = (undefined4 *)(iVar11 + iVar4 * 4);
local_20 = iVar4;
do {
puVar1 = (uint *)((local_28 - iVar11) + -4 + (int)puVar9);
puVar9 = puVar9 + -1;
uVar8 = (*puVar1 & 0xff000000 | uVar7) >> 0x18;
if (iVar12 != 0x100) {
uVar8 = (int)(uVar8 * iVar12) >> 8;
}
if (uVar8 != 0) {
uVar5 = *puVar9;
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)((uint)uVar5 >> 0x18) <<
0x30) >> 0x28),
CONCAT14((char)((uint)uVar5 >> 0x10),uVar5))
>> 0x20),uVar5) >> 0x18);
uVar18 = (uint5)uVar6 & 0xffffffff00;
uVar15 = (ushort)uVar5;
uVar16 = (ulonglong)CONCAT43(uVar6,CONCAT12((char)((uint)uVar5 >> 8),uVar15)) &
0xffffffff00ffffff;
uVar17 = (uint6)(uVar16 >> 0x10);
uVar13 = CONCAT62(uVar17,uVar15) & 0xff00ff00ff;
uVar20 = (ushort)(uVar13 >> 0x10);
uVar25 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar13 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar13 < uVar20),
-(ushort)((ushort)uVar13 != 0)));
uVar26 = ~(ulonglong)uVar25 & uVar13 << 0x10;
uVar13 = uVar13 & uVar25;
uVar14 = uVar13 | uVar26;
uVar20 = (ushort)(uVar14 >> 0x20);
uVar24 = (ushort)uVar13;
uVar26 = (ulonglong)
CONCAT24(-(ushort)(uVar24 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar26 >> 0x30) <
(ushort)(uVar14 >> 0x10)),
-(ushort)(uVar20 < uVar24)));
uVar13 = (ulonglong)uVar17 & 0xffffff00ff00;
uVar14 = uVar14 & uVar26 | ~uVar26 & (uVar14 << 0x20 | uVar14 >> 0x20) & 0xff00ff00ff;
uVar26 = uVar14 | uVar13 << 0x10;
if (uVar8 + 1 != 0x100) {
sVar19 = (short)(uVar8 + 1);
sVar21 = (short)(uVar16 >> 0x10);
sVar22 = (short)(uVar18 >> 8);
sVar23 = (short)(uVar18 >> 0x18);
uVar26 = CONCAT26(sVar23 - (((ushort)(sVar23 * sVar19) >> 8) -
((ushort)((short)(uVar13 >> 0x20) * sVar19) >> 8)),
CONCAT24(sVar22 - (((ushort)(sVar22 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x20) * sVar19) >> 8
)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar14 >> 0x10) *
sVar19) >> 8)),
(uVar15 & 0xff) -
(((ushort)((uVar15 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar14 * sVar19) >> 8)))));
}
sVar19 = (short)uVar26;
sVar21 = (short)(uVar26 >> 0x10);
sVar22 = (short)(uVar26 >> 0x20);
sVar23 = (short)(uVar26 >> 0x30);
*puVar9 = CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)(uVar26 >> 0x30) -
(0xff < sVar23),
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)(uVar26 >> 0x20) -
(0xff < sVar22),
CONCAT11((0 < sVar21) * (sVar21 < 0x100) *
(char)(uVar26 >> 0x10) - (0xff < sVar21),
(0 < sVar19) * (sVar19 < 0x100) * (char)uVar26 -
(0xff < sVar19))));
}
local_20 = local_20 + -1;
} while (local_20 != 0);
}
local_28 = local_28 + iVar3;
iVar11 = iVar11 + iVar10;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
return;
}
// --- FUN_0066c860 at 0x0066C860 (size: 759) ---
void FUN_0066c860(int param_1)
{
int iVar1;
byte bVar2;
int iVar3;
int iVar4;
short sVar5;
ushort uVar6;
uint5 uVar7;
ushort uVar8;
uint uVar9;
byte *pbVar10;
byte *pbVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
int iVar16;
ulonglong uVar17;
ulonglong uVar18;
short sVar19;
ushort uVar20;
short sVar21;
ushort uVar22;
uint6 uVar23;
ulonglong uVar24;
int local_1c;
int local_18;
iVar12 = *(int *)(param_1 + 0x14);
iVar14 = *(int *)(param_1 + 8);
if (iVar14 == 0) {
bVar2 = *(byte *)(param_1 + 0x24);
local_1c = *(int *)(param_1 + 0x20);
if (local_1c != 0) {
iVar14 = *(int *)(param_1 + 0x1c);
iVar16 = *(int *)(param_1 + 0x18);
do {
if (iVar14 != 0) {
pbVar10 = (byte *)(iVar14 * 3 + 2 + iVar12);
iVar13 = iVar14;
do {
pbVar11 = pbVar10 + -3;
if (bVar2 != 0) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar7 = CONCAT23(uVar6,CONCAT12((char)(uVar8 >> 8),uVar8));
uVar17 = (ulonglong)CONCAT52(uVar7 >> 0x10,uVar8) & 0xff00ff00ff;
uVar20 = (ushort)(uVar17 >> 0x10);
uVar23 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar17 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar17 < uVar20),
-(ushort)((ushort)uVar17 != 0)));
uVar24 = ~(ulonglong)uVar23 & uVar17 << 0x10;
uVar17 = uVar17 & uVar23;
uVar18 = uVar17 | uVar24;
uVar20 = (ushort)(uVar18 >> 0x20);
uVar22 = (ushort)uVar17;
uVar17 = (ulonglong)
CONCAT24(-(ushort)(uVar22 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar24 >> 0x30) <
(ushort)(uVar18 >> 0x10)),
-(ushort)(uVar20 < uVar22)));
sVar19 = bVar2 + 1;
uVar17 = uVar18 & uVar17 | ~uVar17 & (uVar18 << 0x20 | uVar18 >> 0x20) & 0xff00ff00ff;
if (sVar19 != 0x100) {
sVar21 = (short)(uVar7 >> 0x10);
uVar6 = uVar6 >> 8;
uVar17 = (ulonglong)
CONCAT24(uVar6 - (((ushort)(uVar6 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar19) >> 8)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar19) >> 8
)),
(uVar8 & 0xff) -
(((ushort)((uVar8 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar17 * sVar19) >> 8))));
}
sVar19 = (short)uVar17;
sVar21 = (short)(uVar17 >> 0x10);
sVar5 = (short)(uVar17 >> 0x20);
pbVar10[-5] = (0 < sVar19) * (sVar19 < 0x100) * (char)uVar17 - (0xff < sVar19);
pbVar10[-4] = (0 < sVar21) * (sVar21 < 0x100) * (char)(uVar17 >> 0x10) -
(0xff < sVar21);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar17 >> 0x20) - (0xff < sVar5);
}
iVar13 = iVar13 + -1;
pbVar10 = pbVar11;
} while (iVar13 != 0);
}
iVar12 = iVar12 - iVar16;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
else {
iVar16 = (uint)*(byte *)(param_1 + 0x24) + (uint)(*(byte *)(param_1 + 0x24) != 0);
local_18 = *(int *)(param_1 + 0x20);
if (local_18 != 0) {
iVar13 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0xc);
iVar4 = *(int *)(param_1 + 0x18);
do {
if (iVar13 != 0) {
pbVar10 = (byte *)(iVar13 * 3 + 2 + iVar12);
iVar15 = iVar13;
do {
iVar1 = iVar15 * 4;
iVar15 = iVar15 + -1;
pbVar11 = pbVar10 + -3;
uVar9 = (*(uint *)(iVar14 + -4 + iVar1) & 0xff000000 | DAT_008f86b0) >> 0x18;
if (iVar16 != 0x100) {
uVar9 = (int)(uVar9 * iVar16) >> 8;
}
if (uVar9 != 0) {
uVar8 = *(ushort *)(pbVar10 + -5);
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
uVar7 = CONCAT23(uVar6,CONCAT12((char)(uVar8 >> 8),uVar8));
uVar17 = (ulonglong)CONCAT52(uVar7 >> 0x10,uVar8) & 0xff00ff00ff;
uVar20 = (ushort)(uVar17 >> 0x10);
uVar23 = CONCAT24(-(ushort)(uVar20 < (ushort)(uVar17 >> 0x20)),
CONCAT22(-(ushort)((ushort)uVar17 < uVar20),
-(ushort)((ushort)uVar17 != 0)));
uVar24 = ~(ulonglong)uVar23 & uVar17 << 0x10;
uVar17 = uVar17 & uVar23;
uVar18 = uVar17 | uVar24;
uVar20 = (ushort)(uVar18 >> 0x20);
uVar22 = (ushort)uVar17;
uVar17 = (ulonglong)
CONCAT24(-(ushort)(uVar22 < uVar20),
CONCAT22(-(ushort)((ushort)(uVar24 >> 0x30) <
(ushort)(uVar18 >> 0x10)),
-(ushort)(uVar20 < uVar22)));
uVar17 = uVar18 & uVar17 | ~uVar17 & (uVar18 << 0x20 | uVar18 >> 0x20) & 0xff00ff00ff;
if (uVar9 + 1 != 0x100) {
sVar19 = (short)(uVar9 + 1);
sVar21 = (short)(uVar7 >> 0x10);
uVar6 = uVar6 >> 8;
uVar17 = (ulonglong)
CONCAT24(uVar6 - (((ushort)(uVar6 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar19) >> 8)),
CONCAT22(sVar21 - (((ushort)(sVar21 * sVar19) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar19) >> 8
)),
(uVar8 & 0xff) -
(((ushort)((uVar8 & 0xff) * sVar19) >> 8) -
((ushort)((short)uVar17 * sVar19) >> 8))));
}
sVar19 = (short)uVar17;
sVar21 = (short)(uVar17 >> 0x10);
sVar5 = (short)(uVar17 >> 0x20);
pbVar10[-5] = (0 < sVar19) * (sVar19 < 0x100) * (char)uVar17 - (0xff < sVar19);
pbVar10[-4] = (0 < sVar21) * (sVar21 < 0x100) * (char)(uVar17 >> 0x10) -
(0xff < sVar21);
*pbVar11 = (0 < sVar5) * (sVar5 < 0x100) * (char)(uVar17 >> 0x20) - (0xff < sVar5);
}
pbVar10 = pbVar11;
} while (iVar15 != 0);
}
iVar14 = iVar14 + iVar3;
iVar12 = iVar12 + iVar4;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066cd10 at 0x0066CD10 (size: 567) ---
void FUN_0066cd10(void)
{
int iVar1;
int iVar2;
int iVar3;
int in_EAX;
uint *puVar4;
int iVar5;
uint uVar6;
int iVar7;
int iVar8;
uint uVar9;
ushort uVar10;
short sVar11;
undefined1 uVar14;
short sVar15;
short sVar17;
ulonglong uVar12;
short sVar18;
undefined8 uVar19;
short sVar20;
undefined2 uVar21;
undefined1 uVar24;
ulonglong uVar22;
float fVar25;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
float fVar30;
undefined1 auVar31 [16];
undefined1 auVar32 [16];
undefined4 local_4c;
int local_48;
int local_40;
int local_38;
undefined1 uVar13;
uint5 uVar16;
undefined1 uVar23;
local_48 = *(int *)(in_EAX + 8);
iVar8 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_38 = *(int *)(in_EAX + 0x20);
iVar5 = *(byte *)(in_EAX + 0x24) + 1;
if (local_38 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
puVar4 = (uint *)(iVar8 + iVar1 * 4);
local_40 = iVar1;
do {
uVar9 = *(uint *)((local_48 - iVar8) + -4 + (int)puVar4);
puVar4 = puVar4 + -1;
uVar6 = uVar9 >> 0x18;
if (iVar5 != 0x100) {
uVar6 = (int)(uVar6 * iVar5) >> 8;
}
if (uVar6 != 0) {
iVar7 = uVar6 + 1;
if (iVar7 != 0x100) {
uVar6 = *puVar4;
local_4c._3_1_ = (byte)(uVar6 >> 0x18);
if (local_4c._3_1_ != 0) {
uVar14 = (undefined1)(uVar6 >> 0x10);
uVar24 = (undefined1)(uVar9 >> 0x10);
uVar13 = (undefined1)(uVar6 >> 8);
uVar10 = (ushort)uVar6;
uVar23 = (undefined1)(uVar9 >> 8);
uVar21 = (undefined2)uVar9;
if (local_4c._3_1_ == 0xff) {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar14,uVar6)) >> 0x20),
uVar6) >> 0x18);
uVar16 = (uint5)uVar6 & 0xffffffff00;
uVar12 = (ulonglong)CONCAT43(uVar6,CONCAT12(uVar13,uVar10)) & 0xffffffff00ffffff
;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar24,uVar9) >> 0x18),
CONCAT12(uVar23,uVar21)) >> 0x10,uVar21) &
0xff00ff00ff;
sVar20 = (short)iVar7;
sVar15 = (short)(uVar12 >> 0x10);
sVar17 = (short)(uVar16 >> 8);
sVar18 = (short)(uVar16 >> 0x18);
sVar11 = (uVar10 & 0xff) -
(((ushort)((uVar10 & 0xff) * sVar20) >> 8) -
((ushort)((short)uVar22 * sVar20) >> 8));
sVar15 = sVar15 - (((ushort)(sVar15 * sVar20) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar20) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar20) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar20) >> 8));
sVar18 = sVar18 - (((ushort)(sVar18 * sVar20) >> 8) -
((ushort)((short)(uVar12 >> 0x30) * sVar20) >> 8));
uVar9 = CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 -
(0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)sVar15 - (0xff < sVar15),
(0 < sVar11) * (sVar11 < 0x100) *
(char)sVar11 - (0xff < sVar11))));
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_4c._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar14,uVar6))
>> 0x20),uVar6) >> 0x18);
uVar16 = (uint5)uVar6 & 0xffffffff00;
uVar12 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar6,CONCAT12(uVar13,uVar10)) >> 0x10),uVar10
) & 0xffffffff00ff00ff;
fVar25 = (float)(ushort)(uVar16 >> 8);
fVar27 = (float)(ushort)(uVar16 >> 0x18);
fVar26 = (float)((uint)uVar12 & 0xffff);
fVar28 = (float)(ushort)(uVar12 >> 0x10);
uVar9 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar9 >> 0x18) <<
0x30) >> 0x28),
CONCAT14(uVar24,uVar9)) >> 0x20),uVar9)
>> 0x18);
uVar16 = (uint5)uVar9 & 0xffffffff00;
uVar12 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar9,CONCAT12(uVar23,uVar21)) >> 0x10),uVar21
) & 0xffffffff00ff00ff;
fVar29 = (float)iVar7;
iVar7 = local_4c._3_1_ + 1 +
(iVar7 - ((int)((local_4c._3_1_ + 1) * iVar7) >> 8));
fVar30 = (float)iVar7;
auVar32._4_4_ = fVar30;
auVar32._0_4_ = fVar30;
auVar31._0_4_ = (fVar26 - (float)((uint)uVar12 & 0xffff)) * fVar29;
auVar31._4_4_ = (fVar28 - (float)(ushort)(uVar12 >> 0x10)) * fVar29;
auVar31._8_4_ = (fVar25 - (float)(ushort)(uVar16 >> 8)) * fVar29;
auVar31._12_4_ = (fVar27 - (float)(ushort)(uVar16 >> 0x18)) * fVar29;
auVar32._8_4_ = fVar30;
auVar32._12_4_ = fVar30;
auVar32 = divps(auVar31,auVar32);
uVar19 = packssdw(CONCAT44(ROUND(fVar28 - auVar32._4_4_),
ROUND(fVar26 - auVar32._0_4_)),
CONCAT44(ROUND(fVar27 - auVar32._12_4_),
ROUND(fVar25 - auVar32._8_4_)));
sVar11 = (short)uVar19;
sVar15 = (short)((ulonglong)uVar19 >> 0x10);
sVar17 = (short)((ulonglong)uVar19 >> 0x20);
local_4c = CONCAT13((char)iVar7 + -1,
CONCAT12((0 < sVar17) * (sVar17 < 0x100) *
(char)((ulonglong)uVar19 >> 0x20) - (0xff < sVar17)
,CONCAT11((0 < sVar15) * (sVar15 < 0x100) *
(char)((ulonglong)uVar19 >> 0x10) -
(0xff < sVar15),
(0 < sVar11) * (sVar11 < 0x100) *
(char)uVar19 - (0xff < sVar11))));
uVar9 = local_4c;
}
}
}
*puVar4 = uVar9;
}
local_40 = local_40 + -1;
} while (local_40 != 0);
}
local_48 = local_48 + iVar2;
iVar8 = iVar8 + iVar3;
local_38 = local_38 + -1;
} while (local_38 != 0);
}
}
return;
}
// --- FUN_0066cf50 at 0x0066CF50 (size: 512) ---
void FUN_0066cf50(void)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
int in_EAX;
uint uVar5;
int iVar6;
int iVar7;
uint uVar8;
int iVar9;
int iVar10;
uint *puVar11;
byte bVar15;
ushort uVar12;
short sVar13;
byte bVar16;
short sVar17;
short sVar19;
uint5 uVar18;
short sVar20;
short sVar21;
byte bVar23;
byte bVar24;
ulonglong uVar22;
undefined4 local_44;
int local_3c;
int local_38;
int local_2c;
ulonglong uVar14;
local_3c = *(int *)(in_EAX + 8);
iVar10 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_2c = *(int *)(in_EAX + 0x20);
iVar7 = *(byte *)(in_EAX + 0x24) + 1;
if (local_2c != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
puVar11 = (uint *)(iVar10 + iVar1 * 4);
local_38 = iVar1;
do {
uVar5 = *(uint *)((local_3c - iVar10) + -4 + (int)puVar11);
puVar11 = puVar11 + -1;
uVar8 = uVar5 >> 0x18;
if (iVar7 != 0x100) {
uVar8 = (int)(uVar8 * iVar7) >> 8;
}
if (uVar8 != 0) {
iVar9 = uVar8 + 1;
if (iVar9 != 0x100) {
uVar8 = *puVar11;
local_44._3_1_ = (byte)(uVar8 >> 0x18);
if (local_44._3_1_ != 0) {
bVar15 = (byte)(uVar8 >> 8);
bVar16 = (byte)(uVar8 >> 0x10);
bVar23 = (byte)(uVar5 >> 8);
bVar24 = (byte)(uVar5 >> 0x10);
if (local_44._3_1_ == 0xff) {
uVar4 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar16,uVar8)) >> 0x20),
uVar8) >> 0x18);
uVar18 = (uint5)uVar4 & 0xffffffff00;
uVar14 = (ulonglong)CONCAT43(uVar4,CONCAT12(bVar15,(ushort)uVar8)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar8 & 0xff;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(bVar24,uVar5) >> 0x18),
CONCAT12(bVar23,(short)uVar5)) >> 0x10,(short)uVar5)
& 0xff00ff00ff;
sVar21 = (short)iVar9;
sVar17 = (short)(uVar14 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar13 = uVar12 - (((ushort)(uVar12 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar14 >> 0x30) * sVar21) >> 8));
uVar5 = CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 -
(0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)sVar17 - (0xff < sVar17),
(0 < sVar13) * (sVar13 < 0x100) *
(char)sVar13 - (0xff < sVar13))));
}
else {
iVar6 = local_44._3_1_ + 1 +
(iVar9 - ((int)((local_44._3_1_ + 1) * iVar9) >> 8));
local_44._0_1_ = (char)uVar8;
local_44 = CONCAT13((char)iVar6 + -1,
CONCAT21(CONCAT11(bVar16 - (char)((int)(((uint)bVar16 -
(uint)bVar24) *
iVar9) / iVar6),
bVar15 - (char)((int)(((uint)bVar15 -
(uint)bVar23) *
iVar9) / iVar6)),
(char)local_44 -
(char)((int)(((uVar8 & 0xff) - (uVar5 & 0xff)) *
iVar9) / iVar6)));
uVar5 = local_44;
}
}
}
*puVar11 = uVar5;
}
local_38 = local_38 + -1;
} while (local_38 != 0);
}
local_3c = local_3c + iVar2;
iVar10 = iVar10 + iVar3;
local_2c = local_2c + -1;
} while (local_2c != 0);
}
}
return;
}
// --- FUN_0066d150 at 0x0066D150 (size: 321) ---
void FUN_0066d150(void)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
int in_EAX;
uint uVar5;
uint *puVar6;
int iVar7;
int iVar8;
uint uVar9;
ushort uVar10;
short sVar11;
short sVar12;
short sVar13;
short sVar14;
ushort uVar16;
ulonglong uVar15;
int local_30;
int local_28;
int local_20;
local_30 = *(int *)(in_EAX + 8);
iVar7 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_20 = *(int *)(in_EAX + 0x20);
iVar8 = *(byte *)(in_EAX + 0x24) + 1;
if (local_20 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
puVar6 = (uint *)(iVar7 + iVar1 * 4);
local_28 = iVar1;
do {
uVar9 = *(uint *)((local_30 - iVar7) + -4 + (int)puVar6);
puVar6 = puVar6 + -1;
uVar5 = uVar9 >> 0x18;
if (iVar8 != 0x100) {
uVar5 = (int)(uVar5 * iVar8) >> 8;
}
if (uVar5 != 0) {
if (uVar5 + 1 != 0x100) {
uVar4 = *puVar6;
uVar10 = (ushort)uVar4 & 0xff;
uVar15 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar9 >> 0x10),uVar9) >> 0x18),
CONCAT12((char)(uVar9 >> 8),(short)uVar9)) >> 0x10,
(short)uVar9) & 0xff00ff00ff;
sVar14 = (short)(uVar5 + 1);
uVar16 = (ushort)(byte)(uVar4 >> 8);
sVar13 = (short)CONCAT21(0xff00,(char)(uVar4 >> 0x10));
sVar11 = uVar10 - (((ushort)(uVar10 * sVar14) >> 8) -
((ushort)((short)uVar15 * sVar14) >> 8));
sVar12 = uVar16 - (((ushort)(uVar16 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x10) * sVar14) >> 8));
sVar13 = sVar13 - (((ushort)(sVar13 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x20) * sVar14) >> 8));
sVar14 = 0xff - (((ushort)(sVar14 * 0xff) >> 8) - ((ushort)(sVar14 * 0xff) >> 8));
uVar9 = CONCAT13((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14),
CONCAT12((0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13),
CONCAT11((0 < sVar12) * (sVar12 < 0x100) * (char)sVar12 -
(0xff < sVar12),
(0 < sVar11) * (sVar11 < 0x100) * (char)sVar11 -
(0xff < sVar11))));
}
*puVar6 = uVar9;
}
local_28 = local_28 + -1;
} while (local_28 != 0);
}
local_30 = local_30 + iVar2;
iVar7 = iVar7 + iVar3;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
}
return;
}
// --- FUN_0066d2a0 at 0x0066D2A0 (size: 370) ---
void FUN_0066d2a0(void)
{
int iVar1;
int iVar2;
int iVar3;
ushort uVar4;
ushort uVar5;
int in_EAX;
uint uVar6;
byte *pbVar7;
byte *pbVar8;
int iVar9;
int iVar10;
int iVar11;
short sVar12;
short sVar13;
short sVar14;
ulonglong uVar15;
uint local_30;
int local_2c;
int local_24;
local_2c = *(int *)(in_EAX + 8);
iVar9 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_24 = *(int *)(in_EAX + 0x20);
iVar10 = *(byte *)(in_EAX + 0x24) + 1;
if (local_24 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
pbVar7 = (byte *)(iVar1 * 3 + 2 + iVar9);
iVar11 = iVar1;
do {
local_30 = *(uint *)(local_2c + -4 + iVar11 * 4);
iVar11 = iVar11 + -1;
pbVar8 = pbVar7 + -3;
uVar6 = local_30 >> 0x18;
if (iVar10 != 0x100) {
uVar6 = (int)(uVar6 * iVar10) >> 8;
}
if (uVar6 != 0) {
if (uVar6 + 1 != 0x100) {
uVar5 = *(ushort *)(pbVar7 + -5);
uVar4 = (ushort)(((uint5)*pbVar8 << 0x20) >> 0x18);
uVar15 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(local_30 >> 0x10),local_30) >>
0x18),
CONCAT12((char)(local_30 >> 8),(short)local_30)) >> 0x10,
(short)local_30) & 0xff00ff00ff;
sVar14 = (short)(uVar6 + 1);
sVar13 = (short)(CONCAT23(uVar4,CONCAT12((char)(uVar5 >> 8),uVar5)) >> 0x10);
uVar4 = uVar4 >> 8;
sVar12 = (uVar5 & 0xff) -
(((ushort)((uVar5 & 0xff) * sVar14) >> 8) -
((ushort)((short)uVar15 * sVar14) >> 8));
sVar13 = sVar13 - (((ushort)(sVar13 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x10) * sVar14) >> 8));
sVar14 = uVar4 - (((ushort)(uVar4 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x20) * sVar14) >> 8));
local_30 = (uint)CONCAT12((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14),
CONCAT11((0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13),
(0 < sVar12) * (sVar12 < 0x100) * (char)sVar12 -
(0xff < sVar12)));
}
pbVar7[-5] = (byte)local_30;
pbVar7[-4] = (byte)(local_30 >> 8);
*pbVar8 = (byte)(local_30 >> 0x10);
}
pbVar7 = pbVar8;
} while (iVar11 != 0);
}
local_2c = local_2c + iVar2;
iVar9 = iVar9 + iVar3;
local_24 = local_24 + -1;
} while (local_24 != 0);
}
}
return;
}
// --- FUN_0066d420 at 0x0066D420 (size: 573) ---
void FUN_0066d420(void)
{
int iVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
undefined4 uVar5;
uint uVar6;
int in_EAX;
undefined4 *puVar7;
int iVar8;
int iVar9;
int iVar10;
ushort uVar11;
short sVar12;
undefined1 uVar15;
short sVar16;
short sVar18;
ulonglong uVar13;
short sVar19;
undefined8 uVar20;
short sVar21;
undefined2 uVar22;
undefined1 uVar25;
ulonglong uVar23;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
float fVar30;
float fVar31;
undefined1 auVar32 [16];
undefined1 auVar33 [16];
undefined4 local_4c;
undefined4 local_48;
int local_44;
int local_40;
int local_34;
undefined1 uVar14;
uint5 uVar17;
undefined1 uVar24;
local_44 = *(int *)(in_EAX + 8);
iVar9 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_34 = *(int *)(in_EAX + 0x20);
iVar10 = *(byte *)(in_EAX + 0x24) + 1;
if (local_34 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
puVar7 = (undefined4 *)(iVar9 + iVar1 * 4);
local_40 = iVar1;
do {
uVar4 = *(undefined4 *)((local_44 - iVar9) + -4 + (int)puVar7);
puVar7 = puVar7 + -1;
local_4c = CONCAT13(0xff,(int3)uVar4);
iVar8 = 0xff;
if ((iVar10 == 0x100) || (iVar8 = iVar10 * 0xff >> 8, iVar8 != 0)) {
iVar8 = iVar8 + 1;
if (iVar8 != 0x100) {
uVar5 = *puVar7;
local_48._3_1_ = (byte)((uint)uVar5 >> 0x18);
if (local_48._3_1_ != 0) {
uVar15 = (undefined1)((uint)uVar5 >> 0x10);
uVar14 = (undefined1)((uint)uVar5 >> 8);
uVar11 = (ushort)uVar5;
uVar24 = (undefined1)((uint)uVar4 >> 8);
uVar25 = (undefined1)((uint)uVar4 >> 0x10);
uVar22 = (undefined2)uVar4;
if (local_48._3_1_ == 0xff) {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar15,uVar5)) >> 0x20),
uVar5) >> 0x18);
uVar17 = (uint5)uVar6 & 0xffffffff00;
uVar13 = (ulonglong)CONCAT43(uVar6,CONCAT12(uVar14,uVar11)) & 0xffffffff00ffffff
;
uVar23 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar25,local_4c) >> 0x18),
CONCAT12(uVar24,uVar22)) >> 0x10,uVar22) &
0xff00ff00ff;
sVar21 = (short)iVar8;
sVar16 = (short)(uVar13 >> 0x10);
sVar18 = (short)(uVar17 >> 8);
sVar19 = (short)(uVar17 >> 0x18);
sVar12 = (uVar11 & 0xff) -
(((ushort)((uVar11 & 0xff) * sVar21) >> 8) -
((ushort)((short)uVar23 * sVar21) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar21) >> 8) -
((ushort)((short)(uVar23 >> 0x10) * sVar21) >> 8));
sVar18 = sVar18 - (((ushort)(sVar18 * sVar21) >> 8) -
((ushort)((short)(uVar23 >> 0x20) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar13 >> 0x30) * sVar21) >> 8));
local_4c = CONCAT13((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT12((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 -
(0xff < sVar18),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)sVar16 - (0xff < sVar16),
(0 < sVar12) * (sVar12 < 0x100) *
(char)sVar12 - (0xff < sVar12))));
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_48._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar15,uVar5))
>> 0x20),uVar5) >> 0x18);
uVar17 = (uint5)uVar6 & 0xffffffff00;
uVar13 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar6,CONCAT12(uVar14,uVar11)) >> 0x10),uVar11
) & 0xffffffff00ff00ff;
fVar26 = (float)(ushort)(uVar17 >> 8);
fVar28 = (float)(ushort)(uVar17 >> 0x18);
fVar27 = (float)((uint)uVar13 & 0xffff);
fVar29 = (float)(ushort)(uVar13 >> 0x10);
uVar6 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar25,local_4c)) >>
0x20),local_4c) >> 0x18);
uVar17 = (uint5)uVar6 & 0xffffffff00;
uVar13 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar6,CONCAT12(uVar24,uVar22)) >> 0x10),uVar22
) & 0xffffffff00ff00ff;
fVar30 = (float)iVar8;
iVar8 = local_48._3_1_ + 1 +
(iVar8 - ((int)((local_48._3_1_ + 1) * iVar8) >> 8));
fVar31 = (float)iVar8;
auVar33._4_4_ = fVar31;
auVar33._0_4_ = fVar31;
auVar32._0_4_ = (fVar27 - (float)((uint)uVar13 & 0xffff)) * fVar30;
auVar32._4_4_ = (fVar29 - (float)(ushort)(uVar13 >> 0x10)) * fVar30;
auVar32._8_4_ = (fVar26 - (float)(ushort)(uVar17 >> 8)) * fVar30;
auVar32._12_4_ = (fVar28 - (float)(ushort)(uVar17 >> 0x18)) * fVar30;
auVar33._8_4_ = fVar31;
auVar33._12_4_ = fVar31;
auVar33 = divps(auVar32,auVar33);
uVar20 = packssdw(CONCAT44(ROUND(fVar29 - auVar33._4_4_),
ROUND(fVar27 - auVar33._0_4_)),
CONCAT44(ROUND(fVar28 - auVar33._12_4_),
ROUND(fVar26 - auVar33._8_4_)));
sVar12 = (short)uVar20;
sVar16 = (short)((ulonglong)uVar20 >> 0x10);
sVar18 = (short)((ulonglong)uVar20 >> 0x20);
local_48 = CONCAT13((char)iVar8 + -1,
CONCAT12((0 < sVar18) * (sVar18 < 0x100) *
(char)((ulonglong)uVar20 >> 0x20) - (0xff < sVar18)
,CONCAT11((0 < sVar16) * (sVar16 < 0x100) *
(char)((ulonglong)uVar20 >> 0x10) -
(0xff < sVar16),
(0 < sVar12) * (sVar12 < 0x100) *
(char)uVar20 - (0xff < sVar12))));
local_4c = local_48;
}
}
}
*puVar7 = local_4c;
}
local_40 = local_40 + -1;
} while (local_40 != 0);
}
local_44 = local_44 + iVar2;
iVar9 = iVar9 + iVar3;
local_34 = local_34 + -1;
} while (local_34 != 0);
}
}
return;
}
// --- FUN_0066d660 at 0x0066D660 (size: 522) ---
void FUN_0066d660(void)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
uint uVar5;
uint uVar6;
int in_EAX;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
uint *puVar11;
byte bVar15;
ushort uVar12;
short sVar13;
byte bVar16;
short sVar17;
short sVar19;
uint5 uVar18;
short sVar20;
short sVar21;
byte bVar23;
byte bVar24;
ulonglong uVar22;
undefined4 local_44;
undefined4 local_40;
int local_3c;
int local_38;
int local_28;
ulonglong uVar14;
local_3c = *(int *)(in_EAX + 8);
iVar10 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_28 = *(int *)(in_EAX + 0x20);
iVar8 = *(byte *)(in_EAX + 0x24) + 1;
if (local_28 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
puVar11 = (uint *)(iVar10 + iVar1 * 4);
local_38 = iVar1;
do {
uVar4 = *(uint *)((local_3c - iVar10) + -4 + (int)puVar11);
puVar11 = puVar11 + -1;
local_40 = CONCAT13(0xff,(int3)uVar4);
iVar9 = 0xff;
if ((iVar8 == 0x100) || (iVar9 = iVar8 * 0xff >> 8, iVar9 != 0)) {
iVar9 = iVar9 + 1;
if (iVar9 != 0x100) {
uVar5 = *puVar11;
local_44._3_1_ = (byte)(uVar5 >> 0x18);
if (local_44._3_1_ != 0) {
bVar15 = (byte)(uVar5 >> 8);
bVar16 = (byte)(uVar5 >> 0x10);
bVar23 = (byte)(uVar4 >> 8);
bVar24 = (byte)(uVar4 >> 0x10);
if (local_44._3_1_ == 0xff) {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar16,uVar5)) >> 0x20),
uVar5) >> 0x18);
uVar18 = (uint5)uVar6 & 0xffffffff00;
uVar14 = (ulonglong)CONCAT43(uVar6,CONCAT12(bVar15,(ushort)uVar5)) &
0xffffffff00ffffff;
uVar12 = (ushort)uVar5 & 0xff;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(bVar24,local_40) >> 0x18),
CONCAT12(bVar23,(short)uVar4)) >> 0x10,(short)uVar4)
& 0xff00ff00ff;
sVar21 = (short)iVar9;
sVar17 = (short)(uVar14 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar13 = uVar12 - (((ushort)(uVar12 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar14 >> 0x30) * sVar21) >> 8));
local_40 = CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 -
(0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)sVar17 - (0xff < sVar17),
(0 < sVar13) * (sVar13 < 0x100) *
(char)sVar13 - (0xff < sVar13))));
}
else {
iVar7 = local_44._3_1_ + 1 +
(iVar9 - ((int)((local_44._3_1_ + 1) * iVar9) >> 8));
local_44._0_1_ = (char)uVar5;
local_44 = CONCAT13((char)iVar7 + -1,
CONCAT21(CONCAT11(bVar16 - (char)((int)(((uint)bVar16 -
(uint)bVar24) *
iVar9) / iVar7),
bVar15 - (char)((int)(((uint)bVar15 -
(uint)bVar23) *
iVar9) / iVar7)),
(char)local_44 -
(char)((int)(((uVar5 & 0xff) - (uVar4 & 0xff)) *
iVar9) / iVar7)));
local_40 = local_44;
}
}
}
*puVar11 = local_40;
}
local_38 = local_38 + -1;
} while (local_38 != 0);
}
local_3c = local_3c + iVar2;
iVar10 = iVar10 + iVar3;
local_28 = local_28 + -1;
} while (local_28 != 0);
}
}
return;
}
// --- FUN_0066d870 at 0x0066D870 (size: 342) ---
void FUN_0066d870(void)
{
int iVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
undefined4 uVar5;
int in_EAX;
int iVar6;
undefined4 *puVar7;
int iVar8;
int iVar9;
ushort uVar10;
short sVar11;
short sVar12;
short sVar13;
short sVar14;
ushort uVar16;
ulonglong uVar15;
undefined4 local_34;
int local_30;
int local_28;
int local_1c;
local_30 = *(int *)(in_EAX + 8);
iVar8 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_1c = *(int *)(in_EAX + 0x20);
iVar9 = *(byte *)(in_EAX + 0x24) + 1;
if (local_1c != 0) {
iVar1 = *(int *)(in_EAX + 0xc);
iVar2 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
puVar7 = (undefined4 *)(iVar8 + iVar2 * 4);
local_28 = iVar2;
do {
uVar4 = *(undefined4 *)((local_30 - iVar8) + -4 + (int)puVar7);
puVar7 = puVar7 + -1;
local_34 = CONCAT13(0xff,(int3)uVar4);
iVar6 = 0xff;
if ((iVar9 == 0x100) || (iVar6 = iVar9 * 0xff >> 8, iVar6 != 0)) {
if (iVar6 + 1 != 0x100) {
uVar5 = *puVar7;
uVar10 = (ushort)uVar5 & 0xff;
uVar15 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)((uint)uVar4 >> 0x10),local_34) >>
0x18),
CONCAT12((char)((uint)uVar4 >> 8),(short)uVar4)) >> 0x10,
(short)uVar4) & 0xff00ff00ff;
sVar14 = (short)(iVar6 + 1);
uVar16 = (ushort)(byte)((uint)uVar5 >> 8);
sVar13 = (short)CONCAT21(0xff00,(char)((uint)uVar5 >> 0x10));
sVar11 = uVar10 - (((ushort)(uVar10 * sVar14) >> 8) -
((ushort)((short)uVar15 * sVar14) >> 8));
sVar12 = uVar16 - (((ushort)(uVar16 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x10) * sVar14) >> 8));
sVar13 = sVar13 - (((ushort)(sVar13 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x20) * sVar14) >> 8));
sVar14 = 0xff - (((ushort)(sVar14 * 0xff) >> 8) - ((ushort)(sVar14 * 0xff) >> 8));
local_34 = CONCAT13((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14)
,CONCAT12((0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13),
CONCAT11((0 < sVar12) * (sVar12 < 0x100) *
(char)sVar12 - (0xff < sVar12),
(0 < sVar11) * (sVar11 < 0x100) *
(char)sVar11 - (0xff < sVar11))));
}
*puVar7 = local_34;
}
local_28 = local_28 + -1;
} while (local_28 != 0);
}
local_30 = local_30 + iVar1;
iVar8 = iVar8 + iVar3;
local_1c = local_1c + -1;
} while (local_1c != 0);
}
}
return;
}
// --- FUN_0066d9d0 at 0x0066D9D0 (size: 360) ---
void FUN_0066d9d0(void)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
ushort uVar5;
ushort uVar6;
int in_EAX;
int iVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
short sVar14;
short sVar15;
short sVar16;
ulonglong uVar17;
uint local_28;
int local_20;
iVar10 = *(int *)(in_EAX + 0x14);
iVar11 = *(int *)(in_EAX + 8);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_20 = *(int *)(in_EAX + 0x20);
iVar13 = *(byte *)(in_EAX + 0x24) + 1;
if (local_20 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0xc);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
pbVar8 = (byte *)(iVar1 * 3 + 2 + iVar10);
iVar12 = iVar1;
do {
uVar4 = *(uint *)(iVar11 + -4 + iVar12 * 4);
iVar12 = iVar12 + -1;
pbVar9 = pbVar8 + -3;
local_28 = uVar4 & 0xffffff;
iVar7 = 0xff;
if ((iVar13 == 0x100) || (iVar7 = iVar13 * 0xff >> 8, iVar7 != 0)) {
if (iVar7 + 1 != 0x100) {
uVar6 = *(ushort *)(pbVar8 + -5);
uVar5 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar17 = (ulonglong)
(CONCAT52(CONCAT23((short)(CONCAT14((char)(local_28 >> 0x10),uVar4) >> 0x18
),CONCAT12((char)(local_28 >> 8),(short)local_28)
) >> 0x10,(short)local_28) & 0xff00ffffff) & 0xff00ff00ff
;
sVar16 = (short)(iVar7 + 1);
sVar15 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar14 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar16) >> 8) -
((ushort)((short)uVar17 * sVar16) >> 8));
sVar15 = sVar15 - (((ushort)(sVar15 * sVar16) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar16) >> 8));
sVar16 = uVar5 - (((ushort)(uVar5 * sVar16) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar16) >> 8));
local_28 = (uint)CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14)));
}
pbVar8[-5] = (byte)local_28;
pbVar8[-4] = (byte)(local_28 >> 8);
*pbVar9 = (byte)(local_28 >> 0x10);
}
pbVar8 = pbVar9;
} while (iVar12 != 0);
}
iVar11 = iVar11 + iVar2;
iVar10 = iVar10 + iVar3;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
}
return;
}
// --- FUN_0066db40 at 0x0066DB40 (size: 588) ---
void FUN_0066db40(void)
{
undefined3 *puVar1;
int iVar2;
int iVar3;
int iVar4;
undefined4 uVar5;
uint uVar6;
undefined3 uVar7;
int in_EAX;
undefined4 uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar15;
undefined1 uVar18;
short sVar19;
short sVar21;
ulonglong uVar16;
short sVar22;
undefined8 uVar23;
short sVar24;
undefined2 uVar25;
undefined1 uVar28;
ulonglong uVar26;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
float fVar34;
undefined1 auVar35 [16];
undefined1 auVar36 [16];
undefined4 local_48;
undefined4 local_44;
undefined4 local_40;
undefined4 local_38;
undefined1 uVar17;
uint5 uVar20;
undefined1 uVar27;
iVar10 = *(int *)(in_EAX + 8);
local_40 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_38 = *(int *)(in_EAX + 0x20);
iVar11 = *(byte *)(in_EAX + 0x24) + 1;
if (local_38 != 0) {
iVar2 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0xc);
iVar4 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
local_48 = 0xff000000;
iVar13 = iVar2 * 3 + 2 + iVar10;
iVar9 = iVar2;
do {
puVar1 = (undefined3 *)(iVar13 + -5);
iVar13 = iVar13 + -3;
iVar9 = iVar9 + -1;
uVar7 = *puVar1;
local_48 = CONCAT13(local_48._3_1_,uVar7);
iVar12 = 0xff;
if ((iVar11 == 0x100) || (iVar12 = iVar11 * 0xff >> 8, iVar12 != 0)) {
iVar12 = iVar12 + 1;
uVar8 = local_48;
if (iVar12 != 0x100) {
uVar5 = *(undefined4 *)(local_40 + iVar9 * 4);
local_44._3_1_ = (byte)((uint)uVar5 >> 0x18);
if (local_44._3_1_ != 0) {
uVar18 = (undefined1)((uint)uVar5 >> 0x10);
uVar17 = (undefined1)((uint)uVar5 >> 8);
uVar14 = (ushort)uVar5;
uVar27 = (undefined1)((uint3)uVar7 >> 8);
uVar28 = (undefined1)((uint3)uVar7 >> 0x10);
uVar25 = (undefined2)uVar7;
if (local_44._3_1_ == 0xff) {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar18,uVar5)) >> 0x20),
uVar5) >> 0x18);
uVar20 = (uint5)uVar6 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar6,CONCAT12(uVar17,uVar14)) & 0xffffffff00ffffff
;
uVar26 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar28,local_48) >> 0x18),
CONCAT12(uVar27,uVar25)) >> 0x10,uVar25) &
0xff00ff00ff;
sVar24 = (short)iVar12;
sVar19 = (short)(uVar16 >> 0x10);
sVar21 = (short)(uVar20 >> 8);
sVar22 = (short)(uVar20 >> 0x18);
sVar15 = (uVar14 & 0xff) -
(((ushort)((uVar14 & 0xff) * sVar24) >> 8) -
((ushort)((short)uVar26 * sVar24) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar24) >> 8) -
((ushort)((short)(uVar26 >> 0x10) * sVar24) >> 8));
sVar21 = sVar21 - (((ushort)(sVar21 * sVar24) >> 8) -
((ushort)((short)(uVar26 >> 0x20) * sVar24) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar24) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar24) >> 8));
uVar8 = CONCAT13((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
(0xff < sVar22),
CONCAT12((0 < sVar21) * (sVar21 < 0x100) * (char)sVar21 -
(0xff < sVar21),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)sVar19 - (0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)sVar15 - (0xff < sVar15))));
}
else {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_44._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar18,uVar5))
>> 0x20),uVar5) >> 0x18);
uVar20 = (uint5)uVar6 & 0xffffffff00;
uVar16 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar6,CONCAT12(uVar17,uVar14)) >> 0x10),uVar14
) & 0xffffffff00ff00ff;
fVar29 = (float)(ushort)(uVar20 >> 8);
fVar31 = (float)(ushort)(uVar20 >> 0x18);
fVar30 = (float)((uint)uVar16 & 0xffff);
fVar32 = (float)(ushort)(uVar16 >> 0x10);
uVar6 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_48._3_1_ << 0x30)
>> 0x28),
CONCAT14(uVar28,local_48)) >> 0x20),
local_48) >> 0x18);
uVar20 = (uint5)uVar6 & 0xffffffff00;
uVar16 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar6,CONCAT12(uVar27,uVar25)) >> 0x10),uVar25
) & 0xffffffff00ff00ff;
fVar33 = (float)iVar12;
iVar12 = local_44._3_1_ + 1 +
(iVar12 - ((int)((local_44._3_1_ + 1) * iVar12) >> 8));
fVar34 = (float)iVar12;
auVar36._4_4_ = fVar34;
auVar36._0_4_ = fVar34;
auVar35._0_4_ = (fVar30 - (float)((uint)uVar16 & 0xffff)) * fVar33;
auVar35._4_4_ = (fVar32 - (float)(ushort)(uVar16 >> 0x10)) * fVar33;
auVar35._8_4_ = (fVar29 - (float)(ushort)(uVar20 >> 8)) * fVar33;
auVar35._12_4_ = (fVar31 - (float)(ushort)(uVar20 >> 0x18)) * fVar33;
auVar36._8_4_ = fVar34;
auVar36._12_4_ = fVar34;
auVar36 = divps(auVar35,auVar36);
uVar23 = packssdw(CONCAT44(ROUND(fVar32 - auVar36._4_4_),
ROUND(fVar30 - auVar36._0_4_)),
CONCAT44(ROUND(fVar31 - auVar36._12_4_),
ROUND(fVar29 - auVar36._8_4_)));
sVar15 = (short)uVar23;
sVar19 = (short)((ulonglong)uVar23 >> 0x10);
sVar21 = (short)((ulonglong)uVar23 >> 0x20);
local_44 = CONCAT13((char)iVar12 + -1,
CONCAT12((0 < sVar21) * (sVar21 < 0x100) *
(char)((ulonglong)uVar23 >> 0x20) - (0xff < sVar21)
,CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)((ulonglong)uVar23 >> 0x10) -
(0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)uVar23 - (0xff < sVar15))));
uVar8 = local_44;
}
}
}
*(undefined4 *)(local_40 + iVar9 * 4) = uVar8;
}
} while (iVar9 != 0);
}
local_40 = local_40 + iVar4;
iVar10 = iVar10 + iVar3;
local_38 = local_38 + -1;
} while (local_38 != 0);
}
}
return;
}
// --- FUN_0066dd90 at 0x0066DD90 (size: 527) ---
void FUN_0066dd90(void)
{
uint3 *puVar1;
int iVar2;
int iVar3;
int iVar4;
uint uVar5;
uint uVar6;
uint3 uVar7;
int in_EAX;
undefined4 uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
byte bVar18;
ushort uVar15;
short sVar16;
byte bVar19;
short sVar20;
short sVar22;
uint5 uVar21;
short sVar23;
short sVar24;
byte bVar26;
byte bVar27;
ulonglong uVar25;
undefined4 local_40;
undefined4 local_3c;
undefined4 local_38;
undefined4 local_30;
ulonglong uVar17;
iVar11 = *(int *)(in_EAX + 8);
local_38 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_30 = *(int *)(in_EAX + 0x20);
iVar12 = *(byte *)(in_EAX + 0x24) + 1;
if (local_30 != 0) {
iVar2 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0xc);
iVar4 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
local_40 = 0xff000000;
iVar14 = iVar2 * 3 + 2 + iVar11;
iVar9 = iVar2;
do {
puVar1 = (uint3 *)(iVar14 + -5);
iVar14 = iVar14 + -3;
iVar9 = iVar9 + -1;
uVar7 = *puVar1;
local_40 = CONCAT13(local_40._3_1_,uVar7);
iVar13 = 0xff;
if ((iVar12 == 0x100) || (iVar13 = iVar12 * 0xff >> 8, iVar13 != 0)) {
iVar13 = iVar13 + 1;
uVar8 = local_40;
if (iVar13 != 0x100) {
uVar5 = *(uint *)(local_38 + iVar9 * 4);
local_3c._3_1_ = (byte)(uVar5 >> 0x18);
if (local_3c._3_1_ != 0) {
bVar18 = (byte)(uVar5 >> 8);
bVar19 = (byte)(uVar5 >> 0x10);
bVar26 = (byte)(uVar7 >> 8);
bVar27 = (byte)(uVar7 >> 0x10);
if (local_3c._3_1_ == 0xff) {
uVar6 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar19,uVar5)) >> 0x20),
uVar5) >> 0x18);
uVar21 = (uint5)uVar6 & 0xffffffff00;
uVar17 = (ulonglong)CONCAT43(uVar6,CONCAT12(bVar18,(ushort)uVar5)) &
0xffffffff00ffffff;
uVar15 = (ushort)uVar5 & 0xff;
uVar25 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(bVar27,local_40) >> 0x18),
CONCAT12(bVar26,(short)uVar7)) >> 0x10,(short)uVar7)
& 0xff00ff00ff;
sVar24 = (short)iVar13;
sVar20 = (short)(uVar17 >> 0x10);
sVar22 = (short)(uVar21 >> 8);
sVar23 = (short)(uVar21 >> 0x18);
sVar16 = uVar15 - (((ushort)(uVar15 * sVar24) >> 8) -
((ushort)((short)uVar25 * sVar24) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar24) >> 8) -
((ushort)((short)(uVar25 >> 0x10) * sVar24) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar24) >> 8) -
((ushort)((short)(uVar25 >> 0x20) * sVar24) >> 8));
sVar23 = sVar23 - (((ushort)(sVar23 * sVar24) >> 8) -
((ushort)((short)(uVar17 >> 0x30) * sVar24) >> 8));
uVar8 = CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)sVar23 -
(0xff < sVar23),
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
(0xff < sVar22),
CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
(char)sVar20 - (0xff < sVar20),
(0 < sVar16) * (sVar16 < 0x100) *
(char)sVar16 - (0xff < sVar16))));
}
else {
iVar10 = local_3c._3_1_ + 1 +
(iVar13 - ((int)((local_3c._3_1_ + 1) * iVar13) >> 8));
local_3c._0_1_ = (char)uVar5;
local_3c = CONCAT13((char)iVar10 + -1,
CONCAT21(CONCAT11(bVar19 - (char)((int)(((uint)bVar19 -
(uint)bVar27) *
iVar13) / iVar10),
bVar18 - (char)((int)(((uint)bVar18 -
(uint)bVar26) *
iVar13) / iVar10)),
(char)local_3c -
(char)((int)(((uVar5 & 0xff) - (uVar7 & 0xff)) *
iVar13) / iVar10)));
uVar8 = local_3c;
}
}
}
*(undefined4 *)(local_38 + iVar9 * 4) = uVar8;
}
} while (iVar9 != 0);
}
local_38 = local_38 + iVar4;
iVar11 = iVar11 + iVar3;
local_30 = local_30 + -1;
} while (local_30 != 0);
}
}
return;
}
// --- FUN_0066dfb0 at 0x0066DFB0 (size: 336) ---
void FUN_0066dfb0(void)
{
undefined1 *puVar1;
int iVar2;
int iVar3;
int iVar4;
undefined2 uVar5;
int in_EAX;
int iVar6;
undefined4 uVar7;
int iVar8;
int iVar9;
int iVar10;
undefined1 *puVar11;
int iVar12;
ushort uVar13;
short sVar14;
short sVar15;
short sVar16;
short sVar17;
ushort uVar19;
ulonglong uVar18;
undefined4 local_2c;
int local_20;
iVar9 = *(int *)(in_EAX + 8);
iVar10 = *(int *)(in_EAX + 0x14);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_20 = *(int *)(in_EAX + 0x20);
iVar12 = *(byte *)(in_EAX + 0x24) + 1;
if (local_20 != 0) {
iVar2 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0xc);
iVar4 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
local_2c = 0xff000000;
puVar11 = (undefined1 *)(iVar2 * 3 + 2 + iVar9);
iVar8 = iVar2;
do {
puVar1 = puVar11 + -4;
uVar5 = *(undefined2 *)(puVar11 + -5);
puVar11 = puVar11 + -3;
iVar8 = iVar8 + -1;
local_2c = CONCAT22(CONCAT11(local_2c._3_1_,*puVar11),uVar5);
iVar6 = 0xff;
if ((iVar12 == 0x100) || (iVar6 = iVar12 * 0xff >> 8, iVar6 != 0)) {
uVar7 = local_2c;
if (iVar6 + 1 != 0x100) {
uVar7 = *(undefined4 *)(iVar10 + iVar8 * 4);
uVar13 = (ushort)uVar7 & 0xff;
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(*puVar11,local_2c) >> 0x18),
CONCAT12(*puVar1,uVar5)) >> 0x10,uVar5) & 0xff00ff00ff;
sVar17 = (short)(iVar6 + 1);
uVar19 = (ushort)(byte)((uint)uVar7 >> 8);
sVar16 = (short)CONCAT21(0xff00,(char)((uint)uVar7 >> 0x10));
sVar14 = uVar13 - (((ushort)(uVar13 * sVar17) >> 8) -
((ushort)((short)uVar18 * sVar17) >> 8));
sVar15 = uVar19 - (((ushort)(uVar19 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
sVar17 = 0xff - (((ushort)(sVar17 * 0xff) >> 8) - ((ushort)(sVar17 * 0xff) >> 8));
uVar7 = CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14))));
}
*(undefined4 *)(iVar10 + iVar8 * 4) = uVar7;
}
} while (iVar8 != 0);
}
iVar9 = iVar9 + iVar3;
iVar10 = iVar10 + iVar4;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
}
return;
}
// --- FUN_0066e110 at 0x0066E110 (size: 407) ---
void FUN_0066e110(void)
{
undefined1 *puVar1;
int iVar2;
int iVar3;
int iVar4;
ushort uVar5;
ushort uVar6;
undefined2 uVar7;
int in_EAX;
int iVar8;
byte *pbVar9;
byte *pbVar10;
int iVar11;
int iVar12;
int iVar13;
short sVar14;
short sVar15;
short sVar16;
ulonglong uVar17;
undefined4 local_30;
int local_2c;
int local_28;
int local_20;
local_2c = *(int *)(in_EAX + 0x14);
iVar12 = *(int *)(in_EAX + 8);
if (*(byte *)(in_EAX + 0x24) != 0) {
local_20 = *(int *)(in_EAX + 0x20);
iVar11 = *(byte *)(in_EAX + 0x24) + 1;
if (local_20 != 0) {
iVar2 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0xc);
iVar4 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
iVar13 = iVar2 * 3 + iVar12;
pbVar9 = (byte *)(iVar2 * 3 + 2 + local_2c);
local_28 = iVar2;
do {
puVar1 = (undefined1 *)(iVar13 + -3);
iVar13 = iVar13 + -3;
pbVar10 = pbVar9 + -3;
local_30._0_2_ = CONCAT11(pbVar9[(iVar12 - local_2c) + -4],*puVar1);
uVar7 = (undefined2)local_30;
local_30 = (uint)CONCAT12(pbVar10[iVar12 - local_2c],(undefined2)local_30);
iVar8 = 0xff;
if ((iVar11 == 0x100) || (iVar8 = iVar11 * 0xff >> 8, iVar8 != 0)) {
if (iVar8 + 1 != 0x100) {
uVar6 = *(ushort *)(pbVar9 + -5);
uVar5 = (ushort)(((uint5)*pbVar10 << 0x20) >> 0x18);
uVar17 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(pbVar10[iVar12 - local_2c],local_30) >>
0x18),
CONCAT12(pbVar9[(iVar12 - local_2c) + -4],uVar7)) >> 0x10
,uVar7) & 0xff00ff00ff;
sVar16 = (short)(iVar8 + 1);
sVar15 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar14 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar16) >> 8) -
((ushort)((short)uVar17 * sVar16) >> 8));
sVar15 = sVar15 - (((ushort)(sVar15 * sVar16) >> 8) -
((ushort)((short)(uVar17 >> 0x10) * sVar16) >> 8));
sVar16 = uVar5 - (((ushort)(uVar5 * sVar16) >> 8) -
((ushort)((short)(uVar17 >> 0x20) * sVar16) >> 8));
local_30 = (uint)CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14)));
}
pbVar9[-5] = (byte)local_30;
pbVar9[-4] = (byte)(local_30 >> 8);
*pbVar10 = (byte)(local_30 >> 0x10);
}
local_28 = local_28 + -1;
pbVar9 = pbVar10;
} while (local_28 != 0);
}
local_2c = local_2c + iVar4;
iVar12 = iVar12 + iVar3;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
}
return;
}
// --- FUN_0066e2b0 at 0x0066E2B0 (size: 1118) ---
void FUN_0066e2b0(void)
{
int iVar1;
int iVar2;
undefined4 uVar3;
undefined1 auVar4 [16];
int in_EAX;
uint uVar5;
int iVar6;
uint uVar7;
int iVar8;
uint uVar9;
uint uVar10;
int iVar11;
uint uVar12;
uint uVar13;
ushort uVar14;
short sVar15;
undefined1 uVar18;
short sVar19;
short sVar21;
ulonglong uVar16;
short sVar22;
undefined8 uVar23;
short sVar24;
undefined2 uVar25;
undefined1 uVar28;
ulonglong uVar26;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
undefined1 auVar34 [16];
undefined1 auVar35 [16];
undefined1 auVar36 [16];
float fVar37;
undefined4 local_64;
int local_60;
int local_5c;
int local_54;
int local_44;
undefined1 uVar17;
uint5 uVar20;
undefined1 uVar27;
local_60 = *(int *)(in_EAX + 8);
local_5c = *(int *)(in_EAX + 0x14);
iVar6 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_44 = *(int *)(in_EAX + 0x20);
if (local_44 != 0) {
uVar9 = *(uint *)(in_EAX + 0x1c) >> 2;
uVar7 = *(uint *)(in_EAX + 0x1c) & 3;
iVar1 = *(int *)(in_EAX + 0xc);
iVar2 = *(int *)(in_EAX + 0x18);
do {
if (uVar9 != 0) {
iVar8 = uVar9 * 0x10 + local_5c;
uVar5 = uVar9;
do {
uVar13 = *(uint *)(local_60 + -4 + uVar5 * 4);
uVar5 = uVar5 - 1;
iVar8 = iVar8 + -0x10;
local_54 = 3;
do {
uVar12 = uVar13 & 0xff000000 | DAT_008f86b0;
uVar10 = uVar12 >> 0x18;
if (iVar6 != 0x100) {
uVar10 = (int)(uVar10 * iVar6) >> 8;
}
if (uVar10 != 0) {
iVar11 = uVar10 + 1;
if (iVar11 != 0x100) {
uVar3 = *(undefined4 *)(iVar8 + local_54 * 4);
local_64._3_1_ = (byte)((uint)uVar3 >> 0x18);
if (local_64._3_1_ != 0) {
uVar18 = (undefined1)((uint)uVar3 >> 0x10);
uVar28 = (undefined1)(DAT_008f86b0 >> 0x10);
uVar17 = (undefined1)((uint)uVar3 >> 8);
uVar14 = (ushort)uVar3;
uVar27 = (undefined1)(DAT_008f86b0 >> 8);
uVar25 = (undefined2)DAT_008f86b0;
if (local_64._3_1_ == 0xff) {
uVar10 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar18,uVar3)) >> 0x20)
,uVar3) >> 0x18);
uVar20 = (uint5)uVar10 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar10,CONCAT12(uVar17,uVar14)) &
0xffffffff00ffffff;
uVar26 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar28,uVar12) >> 0x18),
CONCAT12(uVar27,uVar25)) >> 0x10,uVar25) &
0xff00ff00ff;
sVar24 = (short)iVar11;
sVar19 = (short)(uVar16 >> 0x10);
sVar21 = (short)(uVar20 >> 8);
sVar22 = (short)(uVar20 >> 0x18);
sVar15 = (uVar14 & 0xff) -
(((ushort)((uVar14 & 0xff) * sVar24) >> 8) -
((ushort)((short)uVar26 * sVar24) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar24) >> 8) -
((ushort)((short)(uVar26 >> 0x10) * sVar24) >> 8));
sVar21 = sVar21 - (((ushort)(sVar21 * sVar24) >> 8) -
((ushort)((short)(uVar26 >> 0x20) * sVar24) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar24) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar24) >> 8));
uVar12 = CONCAT13((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
(0xff < sVar22),
CONCAT12((0 < sVar21) * (sVar21 < 0x100) * (char)sVar21 -
(0xff < sVar21),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)sVar19 - (0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)sVar15 - (0xff < sVar15))));
}
else {
uVar10 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_64._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar18,uVar3))
>> 0x20),uVar3) >> 0x18);
uVar20 = (uint5)uVar10 & 0xffffffff00;
uVar16 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar10,CONCAT12(uVar17,uVar14)) >> 0x10),
uVar14) & 0xffffffff00ff00ff;
fVar29 = (float)(ushort)(uVar20 >> 8);
fVar31 = (float)(ushort)(uVar20 >> 0x18);
fVar30 = (float)((uint)uVar16 & 0xffff);
fVar32 = (float)(ushort)(uVar16 >> 0x10);
uVar12 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar12 >> 0x18)
<< 0x30) >> 0x28),
CONCAT14(uVar28,uVar12)) >> 0x20),
uVar12) >> 0x18);
uVar20 = (uint5)uVar12 & 0xffffffff00;
uVar16 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar12,CONCAT12(uVar27,uVar25)) >> 0x10),
uVar25) & 0xffffffff00ff00ff;
fVar33 = (float)iVar11;
iVar11 = local_64._3_1_ + 1 +
(iVar11 - ((int)((local_64._3_1_ + 1) * iVar11) >> 8));
fVar37 = (float)iVar11;
auVar36._4_4_ = fVar37;
auVar36._0_4_ = fVar37;
auVar34._0_4_ = (fVar30 - (float)((uint)uVar16 & 0xffff)) * fVar33;
auVar34._4_4_ = (fVar32 - (float)(ushort)(uVar16 >> 0x10)) * fVar33;
auVar34._8_4_ = (fVar29 - (float)(ushort)(uVar20 >> 8)) * fVar33;
auVar34._12_4_ = (fVar31 - (float)(ushort)(uVar20 >> 0x18)) * fVar33;
auVar36._8_4_ = fVar37;
auVar36._12_4_ = fVar37;
auVar36 = divps(auVar34,auVar36);
uVar23 = packssdw(CONCAT44(ROUND(fVar32 - auVar36._4_4_),
ROUND(fVar30 - auVar36._0_4_)),
CONCAT44(ROUND(fVar31 - auVar36._12_4_),
ROUND(fVar29 - auVar36._8_4_)));
sVar15 = (short)uVar23;
sVar19 = (short)((ulonglong)uVar23 >> 0x10);
sVar21 = (short)((ulonglong)uVar23 >> 0x20);
local_64 = CONCAT13((char)iVar11 + -1,
CONCAT12((0 < sVar21) * (sVar21 < 0x100) *
(char)((ulonglong)uVar23 >> 0x20) - (0xff < sVar21)
,CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)((ulonglong)uVar23 >> 0x10) -
(0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)uVar23 - (0xff < sVar15))));
uVar12 = local_64;
}
}
}
*(uint *)(iVar8 + local_54 * 4) = uVar12;
}
uVar13 = uVar13 << 8;
local_54 = local_54 + -1;
} while (-1 < local_54);
} while (uVar5 != 0);
}
if (uVar7 != 0) {
iVar8 = uVar9 * 0x10 + local_5c;
uVar5 = uVar7;
while (uVar5 != 0) {
iVar11 = uVar5 - 1;
uVar5 = uVar5 - 1;
uVar13 = (uint)*(byte *)(iVar11 + local_60 + uVar9 * 4) << 0x18 | DAT_008f86b0;
uVar12 = uVar13 >> 0x18;
if (iVar6 != 0x100) {
uVar12 = (int)(uVar12 * iVar6) >> 8;
}
if (uVar12 != 0) {
iVar11 = uVar12 + 1;
if (iVar11 != 0x100) {
uVar3 = *(undefined4 *)(iVar8 + uVar5 * 4);
local_64._3_1_ = (byte)((uint)uVar3 >> 0x18);
if (local_64._3_1_ != 0) {
uVar18 = (undefined1)((uint)uVar3 >> 0x10);
uVar28 = (undefined1)(DAT_008f86b0 >> 0x10);
uVar17 = (undefined1)((uint)uVar3 >> 8);
uVar14 = (ushort)uVar3;
uVar27 = (undefined1)(DAT_008f86b0 >> 8);
uVar25 = (undefined2)DAT_008f86b0;
if (local_64._3_1_ == 0xff) {
uVar12 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar18,uVar3)) >> 0x20),
uVar3) >> 0x18);
uVar20 = (uint5)uVar12 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar12,CONCAT12(uVar17,uVar14)) & 0xffffffff00ffffff;
uVar26 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar28,uVar13) >> 0x18),
CONCAT12(uVar27,uVar25)) >> 0x10,uVar25) & 0xff00ff00ff
;
sVar24 = (short)iVar11;
sVar19 = (short)(uVar16 >> 0x10);
sVar21 = (short)(uVar20 >> 8);
sVar22 = (short)(uVar20 >> 0x18);
sVar15 = (uVar14 & 0xff) -
(((ushort)((uVar14 & 0xff) * sVar24) >> 8) -
((ushort)((short)uVar26 * sVar24) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar24) >> 8) -
((ushort)((short)(uVar26 >> 0x10) * sVar24) >> 8));
sVar21 = sVar21 - (((ushort)(sVar21 * sVar24) >> 8) -
((ushort)((short)(uVar26 >> 0x20) * sVar24) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar24) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar24) >> 8));
uVar13 = CONCAT13((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 - (0xff < sVar22)
,CONCAT12((0 < sVar21) * (sVar21 < 0x100) * (char)sVar21 -
(0xff < sVar21),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)sVar19 - (0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)sVar15 - (0xff < sVar15))));
}
else {
uVar12 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_64._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar18,uVar3))
>> 0x20),uVar3) >> 0x18);
uVar20 = (uint5)uVar12 & 0xffffffff00;
uVar16 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar12,CONCAT12(uVar17,uVar14)) >> 0x10),uVar14)
& 0xffffffff00ff00ff;
fVar29 = (float)(ushort)(uVar20 >> 8);
fVar31 = (float)(ushort)(uVar20 >> 0x18);
fVar30 = (float)((uint)uVar16 & 0xffff);
fVar32 = (float)(ushort)(uVar16 >> 0x10);
uVar13 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar13 >> 0x18) <<
0x30) >> 0x28),
CONCAT14(uVar28,uVar13)) >> 0x20),uVar13)
>> 0x18);
uVar20 = (uint5)uVar13 & 0xffffffff00;
uVar16 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar13,CONCAT12(uVar27,uVar25)) >> 0x10),uVar25)
& 0xffffffff00ff00ff;
fVar33 = (float)iVar11;
iVar11 = local_64._3_1_ + 1 +
(iVar11 - ((int)((local_64._3_1_ + 1) * iVar11) >> 8));
fVar37 = (float)iVar11;
auVar35._0_4_ = (fVar30 - (float)((uint)uVar16 & 0xffff)) * fVar33;
auVar35._4_4_ = (fVar32 - (float)(ushort)(uVar16 >> 0x10)) * fVar33;
auVar35._8_4_ = (fVar29 - (float)(ushort)(uVar20 >> 8)) * fVar33;
auVar35._12_4_ = (fVar31 - (float)(ushort)(uVar20 >> 0x18)) * fVar33;
auVar4._4_4_ = fVar37;
auVar4._0_4_ = fVar37;
auVar4._8_4_ = fVar37;
auVar4._12_4_ = fVar37;
auVar36 = divps(auVar35,auVar4);
uVar23 = packssdw(CONCAT44(ROUND(fVar32 - auVar36._4_4_),
ROUND(fVar30 - auVar36._0_4_)),
CONCAT44(ROUND(fVar31 - auVar36._12_4_),
ROUND(fVar29 - auVar36._8_4_)));
sVar15 = (short)uVar23;
sVar19 = (short)((ulonglong)uVar23 >> 0x10);
sVar21 = (short)((ulonglong)uVar23 >> 0x20);
local_64 = CONCAT13((char)iVar11 + -1,
CONCAT12((0 < sVar21) * (sVar21 < 0x100) *
(char)((ulonglong)uVar23 >> 0x20) - (0xff < sVar21),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)((ulonglong)uVar23 >> 0x10) -
(0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)uVar23 - (0xff < sVar15))));
uVar13 = local_64;
}
}
}
*(uint *)(iVar8 + uVar5 * 4) = uVar13;
}
}
}
local_60 = local_60 + iVar1;
local_5c = local_5c + iVar2;
local_44 = local_44 + -1;
} while (local_44 != 0);
}
return;
}
// --- FUN_0066e720 at 0x0066E720 (size: 988) ---
void FUN_0066e720(void)
{
int iVar1;
int iVar2;
uint uVar3;
int in_EAX;
uint uVar4;
int iVar5;
uint uVar6;
int iVar7;
int iVar8;
uint uVar9;
uint uVar10;
uint uVar11;
int iVar12;
uint uVar13;
byte bVar17;
ushort uVar14;
short sVar15;
byte bVar18;
short sVar19;
short sVar21;
uint5 uVar20;
short sVar22;
short sVar23;
ulonglong uVar24;
undefined4 local_50;
int local_48;
int local_44;
int local_40;
int local_28;
ulonglong uVar16;
local_44 = *(int *)(in_EAX + 8);
local_40 = *(int *)(in_EAX + 0x14);
iVar5 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_28 = *(int *)(in_EAX + 0x20);
if (local_28 != 0) {
uVar10 = *(uint *)(in_EAX + 0x1c) >> 2;
uVar6 = *(uint *)(in_EAX + 0x1c) & 3;
iVar1 = *(int *)(in_EAX + 0xc);
iVar2 = *(int *)(in_EAX + 0x18);
do {
if (uVar10 != 0) {
iVar8 = uVar10 * 0x10 + local_40;
uVar4 = uVar10;
do {
uVar13 = *(uint *)(local_44 + -4 + uVar4 * 4);
uVar4 = uVar4 - 1;
iVar8 = iVar8 + -0x10;
local_48 = 3;
do {
uVar9 = uVar13 & 0xff000000 | DAT_008f86b0;
uVar11 = uVar9 >> 0x18;
if (iVar5 != 0x100) {
uVar11 = (int)(uVar11 * iVar5) >> 8;
}
if (uVar11 != 0) {
iVar12 = uVar11 + 1;
if (iVar12 != 0x100) {
uVar11 = *(uint *)(iVar8 + local_48 * 4);
local_50._3_1_ = (byte)(uVar11 >> 0x18);
if (local_50._3_1_ != 0) {
bVar17 = (byte)(uVar11 >> 8);
bVar18 = (byte)(uVar11 >> 0x10);
if (local_50._3_1_ == 0xff) {
uVar3 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar18,uVar11)) >> 0x20)
,uVar11) >> 0x18);
uVar20 = (uint5)uVar3 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar3,CONCAT12(bVar17,(ushort)uVar11)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar11 & 0xff;
uVar24 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar9)
>> 0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),
(short)DAT_008f86b0)) >> 0x10,
(short)DAT_008f86b0) & 0xff00ff00ff;
sVar23 = (short)iVar12;
sVar19 = (short)(uVar16 >> 0x10);
sVar21 = (short)(uVar20 >> 8);
sVar22 = (short)(uVar20 >> 0x18);
sVar15 = uVar14 - (((ushort)(uVar14 * sVar23) >> 8) -
((ushort)((short)uVar24 * sVar23) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar23) >> 8) -
((ushort)((short)(uVar24 >> 0x10) * sVar23) >> 8));
sVar21 = sVar21 - (((ushort)(sVar21 * sVar23) >> 8) -
((ushort)((short)(uVar24 >> 0x20) * sVar23) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar23) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar23) >> 8));
uVar9 = CONCAT13((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
(0xff < sVar22),
CONCAT12((0 < sVar21) * (sVar21 < 0x100) * (char)sVar21 -
(0xff < sVar21),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)sVar19 - (0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)sVar15 - (0xff < sVar15))));
}
else {
iVar7 = local_50._3_1_ + 1 +
(iVar12 - ((int)((local_50._3_1_ + 1) * iVar12) >> 8));
local_50._0_1_ = (char)uVar11;
local_50 = CONCAT13((char)iVar7 + -1,
CONCAT21(CONCAT11(bVar18 - (char)((int)(((uint)bVar18 -
((DAT_008f86b0 &
0xff0000) >> 0x10))
* iVar12) / iVar7),
bVar17 - (char)((int)(((uint)bVar17 -
((DAT_008f86b0 &
0xff00) >> 8)) *
iVar12) / iVar7)),
(char)local_50 -
(char)((int)(((uVar11 & 0xff) -
(DAT_008f86b0 & 0xff)) * iVar12) /
iVar7)));
uVar9 = local_50;
}
}
}
*(uint *)(iVar8 + local_48 * 4) = uVar9;
}
uVar13 = uVar13 << 8;
local_48 = local_48 + -1;
} while (-1 < local_48);
} while (uVar4 != 0);
}
if (uVar6 != 0) {
iVar8 = uVar10 * 0x10 + local_40;
uVar4 = uVar6;
while (uVar4 != 0) {
iVar12 = uVar4 - 1;
uVar4 = uVar4 - 1;
uVar13 = (uint)*(byte *)(iVar12 + local_44 + uVar10 * 4) << 0x18 | DAT_008f86b0;
uVar9 = uVar13 >> 0x18;
if (iVar5 != 0x100) {
uVar9 = (int)(uVar9 * iVar5) >> 8;
}
if (uVar9 != 0) {
iVar12 = uVar9 + 1;
if (iVar12 != 0x100) {
uVar9 = *(uint *)(iVar8 + uVar4 * 4);
local_50._3_1_ = (byte)(uVar9 >> 0x18);
if (local_50._3_1_ != 0) {
bVar17 = (byte)(uVar9 >> 8);
bVar18 = (byte)(uVar9 >> 0x10);
if (local_50._3_1_ == 0xff) {
uVar11 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar18,uVar9)) >> 0x20),
uVar9) >> 0x18);
uVar20 = (uint5)uVar11 & 0xffffffff00;
uVar16 = (ulonglong)CONCAT43(uVar11,CONCAT12(bVar17,(ushort)uVar9)) &
0xffffffff00ffffff;
uVar14 = (ushort)uVar9 & 0xff;
uVar24 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar13)
>> 0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0)
) >> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar23 = (short)iVar12;
sVar19 = (short)(uVar16 >> 0x10);
sVar21 = (short)(uVar20 >> 8);
sVar22 = (short)(uVar20 >> 0x18);
sVar15 = uVar14 - (((ushort)(uVar14 * sVar23) >> 8) -
((ushort)((short)uVar24 * sVar23) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar23) >> 8) -
((ushort)((short)(uVar24 >> 0x10) * sVar23) >> 8));
sVar21 = sVar21 - (((ushort)(sVar21 * sVar23) >> 8) -
((ushort)((short)(uVar24 >> 0x20) * sVar23) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar23) >> 8) -
((ushort)((short)(uVar16 >> 0x30) * sVar23) >> 8));
uVar13 = CONCAT13((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 - (0xff < sVar22)
,CONCAT12((0 < sVar21) * (sVar21 < 0x100) * (char)sVar21 -
(0xff < sVar21),
CONCAT11((0 < sVar19) * (sVar19 < 0x100) *
(char)sVar19 - (0xff < sVar19),
(0 < sVar15) * (sVar15 < 0x100) *
(char)sVar15 - (0xff < sVar15))));
}
else {
iVar7 = local_50._3_1_ + 1 +
(iVar12 - ((int)((local_50._3_1_ + 1) * iVar12) >> 8));
local_50._0_1_ = (char)uVar9;
local_50 = CONCAT31(CONCAT12((char)iVar7 + -1,
CONCAT11(bVar18 - (char)((int)(((uint)bVar18 -
((DAT_008f86b0 &
0xff0000) >> 0x10)) *
iVar12) / iVar7),
bVar17 - (char)((int)(((uint)bVar17 -
((DAT_008f86b0 &
0xff00) >> 8)) *
iVar12) / iVar7))),
(char)local_50 -
(char)((int)(((uVar9 & 0xff) - (DAT_008f86b0 & 0xff)) * iVar12
) / iVar7));
uVar13 = local_50;
}
}
}
*(uint *)(iVar8 + uVar4 * 4) = uVar13;
}
}
}
local_44 = local_44 + iVar1;
local_40 = local_40 + iVar2;
local_28 = local_28 + -1;
} while (local_28 != 0);
}
return;
}
// --- FUN_0066eb00 at 0x0066EB00 (size: 1010) ---
void FUN_0066eb00(void)
{
int iVar1;
undefined4 uVar2;
undefined1 auVar3 [16];
uint uVar4;
int in_EAX;
uint uVar5;
undefined4 uVar6;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar13;
undefined1 uVar16;
short sVar17;
short sVar19;
ulonglong uVar14;
short sVar20;
undefined8 uVar21;
short sVar22;
undefined2 uVar23;
byte bVar26;
undefined1 uVar27;
ulonglong uVar24;
float fVar28;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
undefined1 auVar34 [16];
undefined1 auVar35 [16];
undefined1 auVar36 [16];
undefined4 local_3c;
undefined4 local_38;
undefined4 local_2c;
undefined4 local_28;
undefined1 uVar15;
uint5 uVar18;
undefined1 uVar25;
uVar4 = DAT_008f86b0;
if (*(int *)(in_EAX + 8) == 0) {
iVar11 = *(int *)(in_EAX + 0x14);
bVar26 = *(byte *)(in_EAX + 0x24);
local_3c = CONCAT13(bVar26,(int3)DAT_008f86b0);
local_28 = *(int *)(in_EAX + 0x20);
if (local_28 != 0) {
iVar7 = *(int *)(in_EAX + 0x1c);
iVar1 = *(int *)(in_EAX + 0x18);
do {
if (iVar7 != 0) {
iVar9 = iVar7;
do {
iVar9 = iVar9 + -1;
if (bVar26 != 0) {
iVar8 = bVar26 + 1;
uVar6 = local_3c;
if (iVar8 != 0x100) {
uVar2 = *(undefined4 *)(iVar11 + iVar9 * 4);
local_38._3_1_ = (byte)((uint)uVar2 >> 0x18);
if (local_38._3_1_ != 0) {
uVar16 = (undefined1)((uint)uVar2 >> 0x10);
uVar15 = (undefined1)((uint)uVar2 >> 8);
uVar12 = (ushort)uVar2;
uVar25 = (undefined1)(uVar4 >> 8);
uVar27 = (undefined1)(uVar4 >> 0x10);
uVar23 = (undefined2)uVar4;
if (local_38._3_1_ == 0xff) {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar16,uVar2)) >> 0x20),
uVar2) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar14 = (ulonglong)CONCAT43(uVar5,CONCAT12(uVar15,uVar12)) & 0xffffffff00ffffff
;
uVar24 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar27,local_3c) >> 0x18),
CONCAT12(uVar25,uVar23)) >> 0x10,uVar23) &
0xff00ff00ff;
sVar22 = (short)iVar8;
sVar17 = (short)(uVar14 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar13 = (uVar12 & 0xff) -
(((ushort)((uVar12 & 0xff) * sVar22) >> 8) -
((ushort)((short)uVar24 * sVar22) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar22) >> 8) -
((ushort)((short)(uVar24 >> 0x10) * sVar22) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar22) >> 8) -
((ushort)((short)(uVar24 >> 0x20) * sVar22) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar22) >> 8) -
((ushort)((short)(uVar14 >> 0x30) * sVar22) >> 8));
uVar6 = CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 -
(0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)sVar17 - (0xff < sVar17),
(0 < sVar13) * (sVar13 < 0x100) *
(char)sVar13 - (0xff < sVar13))));
}
else {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_38._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar16,uVar2))
>> 0x20),uVar2) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar14 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar5,CONCAT12(uVar15,uVar12)) >> 0x10),uVar12
) & 0xffffffff00ff00ff;
fVar28 = (float)(ushort)(uVar18 >> 8);
fVar30 = (float)(ushort)(uVar18 >> 0x18);
fVar29 = (float)((uint)uVar14 & 0xffff);
fVar31 = (float)(ushort)(uVar14 >> 0x10);
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)bVar26 << 0x30) >> 0x28)
,CONCAT14(uVar27,local_3c)) >> 0x20),
local_3c) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar14 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar5,CONCAT12(uVar25,uVar23)) >> 0x10),uVar23
) & 0xffffffff00ff00ff;
fVar32 = (float)iVar8;
iVar8 = local_38._3_1_ + 1 +
(iVar8 - ((int)((local_38._3_1_ + 1) * iVar8) >> 8));
fVar33 = (float)iVar8;
auVar35._4_4_ = fVar33;
auVar35._0_4_ = fVar33;
auVar36._0_4_ = (fVar29 - (float)((uint)uVar14 & 0xffff)) * fVar32;
auVar36._4_4_ = (fVar31 - (float)(ushort)(uVar14 >> 0x10)) * fVar32;
auVar36._8_4_ = (fVar28 - (float)(ushort)(uVar18 >> 8)) * fVar32;
auVar36._12_4_ = (fVar30 - (float)(ushort)(uVar18 >> 0x18)) * fVar32;
auVar35._8_4_ = fVar33;
auVar35._12_4_ = fVar33;
auVar35 = divps(auVar36,auVar35);
uVar21 = packssdw(CONCAT44(ROUND(fVar31 - auVar35._4_4_),
ROUND(fVar29 - auVar35._0_4_)),
CONCAT44(ROUND(fVar30 - auVar35._12_4_),
ROUND(fVar28 - auVar35._8_4_)));
sVar13 = (short)uVar21;
sVar17 = (short)((ulonglong)uVar21 >> 0x10);
sVar19 = (short)((ulonglong)uVar21 >> 0x20);
local_38 = CONCAT13((char)iVar8 + -1,
CONCAT12((0 < sVar19) * (sVar19 < 0x100) *
(char)((ulonglong)uVar21 >> 0x20) - (0xff < sVar19)
,CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)((ulonglong)uVar21 >> 0x10) -
(0xff < sVar17),
(0 < sVar13) * (sVar13 < 0x100) *
(char)uVar21 - (0xff < sVar13))));
uVar6 = local_38;
}
}
}
*(undefined4 *)(iVar11 + iVar9 * 4) = uVar6;
}
} while (iVar9 != 0);
}
iVar11 = iVar11 - iVar1;
local_28 = local_28 + -1;
} while (local_28 != 0);
}
}
else {
iVar11 = *(int *)(in_EAX + 0x14);
iVar7 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_2c = *(int *)(in_EAX + 0x20);
if (local_2c != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar9 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
uVar4 = DAT_008f86b0 >> 0x18;
iVar8 = iVar1;
do {
iVar8 = iVar8 + -1;
uVar5 = uVar4;
if (iVar7 != 0x100) {
uVar5 = (int)(uVar4 * iVar7) >> 8;
}
if (uVar5 != 0) {
iVar10 = uVar5 + 1;
uVar5 = DAT_008f86b0;
if (iVar10 != 0x100) {
uVar6 = *(undefined4 *)(iVar11 + iVar8 * 4);
local_3c._3_1_ = (byte)((uint)uVar6 >> 0x18);
if (local_3c._3_1_ != 0) {
uVar16 = (undefined1)((uint)uVar6 >> 0x10);
uVar15 = (undefined1)((uint)uVar6 >> 8);
uVar12 = (ushort)uVar6;
uVar25 = (undefined1)(DAT_008f86b0 >> 8);
bVar26 = (byte)(DAT_008f86b0 >> 0x10);
uVar23 = (undefined2)DAT_008f86b0;
if (local_3c._3_1_ == 0xff) {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar16,uVar6)) >> 0x20),
uVar6) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar14 = (ulonglong)CONCAT43(uVar5,CONCAT12(uVar15,uVar12)) & 0xffffffff00ffffff
;
uVar24 = (ulonglong)
CONCAT52((int5)(CONCAT43((int)(((uint7)bVar26 << 0x20) >> 0x18),
CONCAT12(uVar25,uVar23)) >> 0x10),uVar23) &
0xff00ff00ff;
sVar22 = (short)iVar10;
sVar17 = (short)(uVar14 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar13 = (uVar12 & 0xff) -
(((ushort)((uVar12 & 0xff) * sVar22) >> 8) -
((ushort)((short)uVar24 * sVar22) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar22) >> 8) -
((ushort)((short)(uVar24 >> 0x10) * sVar22) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar22) >> 8) -
((ushort)((short)(uVar24 >> 0x20) * sVar22) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar22) >> 8) -
((ushort)((short)(uVar14 >> 0x30) * sVar22) >> 8));
uVar5 = CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 -
(0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)sVar17 - (0xff < sVar17),
(0 < sVar13) * (sVar13 < 0x100) *
(char)sVar13 - (0xff < sVar13))));
}
else {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_3c._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar16,uVar6))
>> 0x20),uVar6) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar14 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar5,CONCAT12(uVar15,uVar12)) >> 0x10),uVar12
) & 0xffffffff00ff00ff;
fVar28 = (float)(ushort)(uVar18 >> 8);
fVar30 = (float)(ushort)(uVar18 >> 0x18);
fVar29 = (float)((uint)uVar14 & 0xffff);
fVar31 = (float)(ushort)(uVar14 >> 0x10);
uVar5 = (uint)(((uint7)bVar26 << 0x20) >> 0x18);
uVar14 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar5,CONCAT12(uVar25,uVar23)) >> 0x10),uVar23
) & 0xffffffff00ff00ff;
fVar32 = (float)iVar10;
iVar10 = local_3c._3_1_ + 1 +
(iVar10 - ((int)((local_3c._3_1_ + 1) * iVar10) >> 8));
fVar33 = (float)iVar10;
auVar3._4_4_ = fVar33;
auVar3._0_4_ = fVar33;
auVar34._0_4_ = (fVar29 - (float)((uint)uVar14 & 0xffff)) * fVar32;
auVar34._4_4_ = (fVar31 - (float)(ushort)(uVar14 >> 0x10)) * fVar32;
auVar34._8_4_ = (fVar28 - (float)(uVar5 >> 8)) * fVar32;
auVar34._12_4_ = (fVar30 - (float)(DAT_008f86b0 >> 0x18)) * fVar32;
auVar3._8_4_ = fVar33;
auVar3._12_4_ = fVar33;
auVar35 = divps(auVar34,auVar3);
uVar21 = packssdw(CONCAT44(ROUND(fVar31 - auVar35._4_4_),
ROUND(fVar29 - auVar35._0_4_)),
CONCAT44(ROUND(fVar30 - auVar35._12_4_),
ROUND(fVar28 - auVar35._8_4_)));
sVar13 = (short)uVar21;
sVar17 = (short)((ulonglong)uVar21 >> 0x10);
sVar19 = (short)((ulonglong)uVar21 >> 0x20);
local_3c = CONCAT13((char)iVar10 + -1,
CONCAT12((0 < sVar19) * (sVar19 < 0x100) *
(char)((ulonglong)uVar21 >> 0x20) - (0xff < sVar19)
,CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)((ulonglong)uVar21 >> 0x10) -
(0xff < sVar17),
(0 < sVar13) * (sVar13 < 0x100) *
(char)uVar21 - (0xff < sVar13))));
uVar5 = local_3c;
}
}
}
*(uint *)(iVar11 + iVar8 * 4) = uVar5;
}
} while (iVar8 != 0);
}
iVar11 = iVar11 + iVar9;
local_2c = local_2c + -1;
} while (local_2c != 0);
}
}
return;
}
// --- FUN_0066ef10 at 0x0066EF10 (size: 896) ---
void FUN_0066ef10(void)
{
int iVar1;
int iVar2;
uint uVar3;
uint uVar4;
int in_EAX;
uint uVar5;
undefined4 uVar6;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
byte bVar14;
ushort uVar11;
short sVar12;
byte bVar15;
byte bVar16;
short sVar17;
short sVar19;
uint5 uVar18;
short sVar20;
short sVar21;
byte bVar23;
byte bVar24;
ulonglong uVar22;
undefined4 local_34;
undefined4 local_30;
undefined4 local_24;
int local_20;
ulonglong uVar13;
uVar5 = DAT_008f86b0;
if (*(int *)(in_EAX + 8) == 0) {
iVar8 = *(int *)(in_EAX + 0x14);
bVar14 = *(byte *)(in_EAX + 0x24);
local_30 = CONCAT13(bVar14,(int3)DAT_008f86b0);
local_20 = *(int *)(in_EAX + 0x20);
if (local_20 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0x18);
do {
if (iVar1 != 0) {
iVar10 = iVar1;
do {
iVar10 = iVar10 + -1;
if (bVar14 != 0) {
iVar9 = bVar14 + 1;
uVar6 = local_30;
if (iVar9 != 0x100) {
uVar3 = *(uint *)(iVar8 + iVar10 * 4);
local_34._3_1_ = (byte)(uVar3 >> 0x18);
if (local_34._3_1_ != 0) {
bVar15 = (byte)(uVar3 >> 8);
bVar16 = (byte)(uVar3 >> 0x10);
bVar23 = (byte)(uVar5 >> 8);
bVar24 = (byte)(uVar5 >> 0x10);
if (local_34._3_1_ == 0xff) {
uVar4 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar16,uVar3)) >> 0x20),
uVar3) >> 0x18);
uVar18 = (uint5)uVar4 & 0xffffffff00;
uVar13 = (ulonglong)CONCAT43(uVar4,CONCAT12(bVar15,(ushort)uVar3)) &
0xffffffff00ffffff;
uVar11 = (ushort)uVar3 & 0xff;
uVar22 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(bVar24,local_30) >> 0x18),
CONCAT12(bVar23,(short)uVar5)) >> 0x10,(short)uVar5)
& 0xff00ff00ff;
sVar21 = (short)iVar9;
sVar17 = (short)(uVar13 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar12 = uVar11 - (((ushort)(uVar11 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar13 >> 0x30) * sVar21) >> 8));
uVar6 = CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 -
(0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) *
(char)sVar17 - (0xff < sVar17),
(0 < sVar12) * (sVar12 < 0x100) *
(char)sVar12 - (0xff < sVar12))));
}
else {
iVar7 = local_34._3_1_ + 1 +
(iVar9 - ((int)((local_34._3_1_ + 1) * iVar9) >> 8));
local_34._0_1_ = (char)uVar3;
local_34 = CONCAT13((char)iVar7 + -1,
CONCAT21(CONCAT11(bVar16 - (char)((int)(((uint)bVar16 -
(uint)bVar24) *
iVar9) / iVar7),
bVar15 - (char)((int)(((uint)bVar15 -
(uint)bVar23) *
iVar9) / iVar7)),
(char)local_34 -
(char)((int)(((uVar3 & 0xff) - (uVar5 & 0xff)) *
iVar9) / iVar7)));
uVar6 = local_34;
}
}
}
*(undefined4 *)(iVar8 + iVar10 * 4) = uVar6;
}
} while (iVar10 != 0);
}
iVar8 = iVar8 - iVar2;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
}
else {
local_30 = *(int *)(in_EAX + 0x14);
local_24 = *(int *)(in_EAX + 0x20);
iVar8 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
if (local_24 != 0) {
iVar1 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0x18);
iVar10 = iVar1;
do {
while (iVar10 != 0) {
uVar5 = DAT_008f86b0 >> 0x18;
iVar10 = iVar10 + -1;
if (iVar8 != 0x100) {
uVar5 = (int)(uVar5 * iVar8) >> 8;
}
if (uVar5 != 0) {
iVar9 = uVar5 + 1;
uVar5 = DAT_008f86b0;
if (iVar9 != 0x100) {
uVar3 = *(uint *)(local_30 + iVar10 * 4);
local_34._3_1_ = (byte)(uVar3 >> 0x18);
if (local_34._3_1_ != 0) {
bVar14 = (byte)(uVar3 >> 8);
bVar15 = (byte)(uVar3 >> 0x10);
if (local_34._3_1_ == 0xff) {
uVar5 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar15,uVar3)) >> 0x20),
uVar3) >> 0x18);
uVar18 = (uint5)uVar5 & 0xffffffff00;
uVar13 = (ulonglong)CONCAT43(uVar5,CONCAT12(bVar14,(ushort)uVar3)) &
0xffffffff00ffffff;
uVar11 = (ushort)uVar3 & 0xff;
uVar22 = (ulonglong)
CONCAT52((int5)(CONCAT43((int)(((uint7)(byte)(DAT_008f86b0 >> 0x10) <<
0x20) >> 0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),
(short)DAT_008f86b0)) >> 0x10),
(short)DAT_008f86b0) & 0xff00ff00ff;
sVar21 = (short)iVar9;
sVar17 = (short)(uVar13 >> 0x10);
sVar19 = (short)(uVar18 >> 8);
sVar20 = (short)(uVar18 >> 0x18);
sVar12 = uVar11 - (((ushort)(uVar11 * sVar21) >> 8) -
((ushort)((short)uVar22 * sVar21) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x10) * sVar21) >> 8));
sVar19 = sVar19 - (((ushort)(sVar19 * sVar21) >> 8) -
((ushort)((short)(uVar22 >> 0x20) * sVar21) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar21) >> 8) -
((ushort)((short)(uVar13 >> 0x30) * sVar21) >> 8));
uVar5 = CONCAT13((0 < sVar20) * (sVar20 < 0x100) * (char)sVar20 - (0xff < sVar20),
CONCAT12((0 < sVar19) * (sVar19 < 0x100) * (char)sVar19 -
(0xff < sVar19),
CONCAT11((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17
- (0xff < sVar17),
(0 < sVar12) * (sVar12 < 0x100) * (char)sVar12
- (0xff < sVar12))));
}
else {
iVar7 = local_34._3_1_ + 1 + (iVar9 - ((int)((local_34._3_1_ + 1) * iVar9) >> 8));
local_34._0_1_ = (char)uVar3;
local_34 = CONCAT13((char)iVar7 + -1,
CONCAT21(CONCAT11(bVar15 - (char)((int)(((uint)bVar15 -
(DAT_008f86b0 >> 0x10
& 0xff)) * iVar9) /
iVar7),
bVar14 - (char)((int)(((uint)bVar14 -
(DAT_008f86b0 >> 8 &
0xff)) * iVar9) /
iVar7)),
(char)local_34 -
(char)((int)(((uVar3 & 0xff) - (DAT_008f86b0 & 0xff))
* iVar9) / iVar7)));
uVar5 = local_34;
}
}
}
*(uint *)(local_30 + iVar10 * 4) = uVar5;
}
}
local_30 = local_30 + iVar2;
local_24 = local_24 + -1;
iVar10 = iVar1;
} while (local_24 != 0);
}
}
return;
}
// --- FUN_0066f2a0 at 0x0066F2A0 (size: 619) ---
void FUN_0066f2a0(void)
{
int iVar1;
int iVar2;
undefined4 uVar3;
int in_EAX;
uint uVar4;
uint uVar5;
int iVar6;
uint uVar7;
uint uVar8;
uint uVar9;
uint uVar10;
int iVar11;
int iVar12;
int iVar13;
ushort uVar14;
short sVar15;
short sVar16;
short sVar17;
short sVar18;
ushort uVar20;
ulonglong uVar19;
int local_3c;
int local_24;
local_3c = *(int *)(in_EAX + 8);
iVar11 = *(int *)(in_EAX + 0x14);
local_24 = *(int *)(in_EAX + 0x20);
iVar6 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
if (local_24 != 0) {
uVar9 = *(uint *)(in_EAX + 0x1c) >> 2;
uVar7 = *(uint *)(in_EAX + 0x1c) & 3;
iVar1 = *(int *)(in_EAX + 0xc);
iVar2 = *(int *)(in_EAX + 0x18);
do {
if (uVar9 != 0) {
iVar13 = uVar9 * 0x10 + iVar11;
uVar4 = uVar9;
do {
uVar10 = *(uint *)(local_3c + -4 + uVar4 * 4);
uVar4 = uVar4 - 1;
iVar13 = iVar13 + -0x10;
iVar12 = 3;
do {
uVar8 = uVar10 & 0xff000000 | DAT_008f86b0;
uVar5 = uVar8 >> 0x18;
if (iVar6 != 0x100) {
uVar5 = (int)(uVar5 * iVar6) >> 8;
}
if (uVar5 != 0) {
if (uVar5 + 1 != 0x100) {
uVar3 = *(undefined4 *)(iVar13 + iVar12 * 4);
uVar14 = (ushort)uVar3 & 0xff;
uVar19 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar8) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar18 = (short)(uVar5 + 1);
uVar20 = (ushort)(byte)((uint)uVar3 >> 8);
sVar17 = (short)CONCAT21(0xff00,(char)((uint)uVar3 >> 0x10));
sVar15 = uVar14 - (((ushort)(uVar14 * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8));
sVar16 = uVar20 - (((ushort)(uVar20 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8));
sVar18 = 0xff - (((ushort)(sVar18 * 0xff) >> 8) - ((ushort)(sVar18 * 0xff) >> 8));
uVar8 = CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 - (0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15))));
}
*(uint *)(iVar13 + iVar12 * 4) = uVar8;
}
uVar10 = uVar10 << 8;
iVar12 = iVar12 + -1;
} while (-1 < iVar12);
} while (uVar4 != 0);
}
if (uVar7 != 0) {
iVar13 = uVar9 * 0x10 + iVar11;
uVar4 = uVar7;
while (uVar4 != 0) {
iVar12 = uVar4 - 1;
uVar4 = uVar4 - 1;
uVar5 = (uint)*(byte *)(iVar12 + local_3c + uVar9 * 4) << 0x18 | DAT_008f86b0;
uVar10 = uVar5 >> 0x18;
if (iVar6 != 0x100) {
uVar10 = (int)(uVar10 * iVar6) >> 8;
}
if (uVar10 != 0) {
if (uVar10 + 1 != 0x100) {
uVar3 = *(undefined4 *)(iVar13 + uVar4 * 4);
uVar14 = (ushort)uVar3 & 0xff;
uVar19 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar5) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0)) >>
0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar18 = (short)(uVar10 + 1);
uVar20 = (ushort)(byte)((uint)uVar3 >> 8);
sVar17 = (short)CONCAT21(0xff00,(char)((uint)uVar3 >> 0x10));
sVar15 = uVar14 - (((ushort)(uVar14 * sVar18) >> 8) -
((ushort)((short)uVar19 * sVar18) >> 8));
sVar16 = uVar20 - (((ushort)(uVar20 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x10) * sVar18) >> 8));
sVar17 = sVar17 - (((ushort)(sVar17 * sVar18) >> 8) -
((ushort)((short)(uVar19 >> 0x20) * sVar18) >> 8));
sVar18 = 0xff - (((ushort)(sVar18 * 0xff) >> 8) - ((ushort)(sVar18 * 0xff) >> 8));
uVar5 = CONCAT13((0 < sVar18) * (sVar18 < 0x100) * (char)sVar18 - (0xff < sVar18),
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15))));
}
*(uint *)(iVar13 + uVar4 * 4) = uVar5;
}
}
}
local_3c = local_3c + iVar1;
iVar11 = iVar11 + iVar2;
local_24 = local_24 + -1;
} while (local_24 != 0);
}
return;
}
// --- FUN_0066f510 at 0x0066F510 (size: 529) ---
void FUN_0066f510(void)
{
byte bVar1;
int iVar2;
uint uVar3;
uint uVar4;
int in_EAX;
uint uVar5;
uint uVar6;
undefined4 uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
ushort uVar12;
short sVar13;
short sVar14;
short sVar15;
short sVar16;
undefined2 uVar17;
undefined1 uVar20;
ushort uVar21;
ulonglong uVar18;
undefined4 local_20;
undefined4 local_18;
undefined4 local_14;
undefined1 uVar19;
uVar4 = DAT_008f86b0;
uVar19 = (undefined1)(DAT_008f86b0 >> 8);
uVar20 = (undefined1)(DAT_008f86b0 >> 0x10);
uVar17 = (undefined2)DAT_008f86b0;
if (*(int *)(in_EAX + 8) == 0) {
iVar10 = *(int *)(in_EAX + 0x14);
bVar1 = *(byte *)(in_EAX + 0x24);
local_20 = CONCAT13(bVar1,(int3)DAT_008f86b0);
local_14 = *(int *)(in_EAX + 0x20);
if (local_14 != 0) {
iVar11 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0x18);
do {
if (iVar11 != 0) {
iVar9 = iVar11;
do {
iVar9 = iVar9 + -1;
if (bVar1 != 0) {
sVar13 = bVar1 + 1;
uVar7 = local_20;
if (sVar13 != 0x100) {
uVar7 = *(undefined4 *)(iVar10 + iVar9 * 4);
uVar12 = (ushort)uVar7 & 0xff;
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar20,local_20) >> 0x18),
CONCAT12(uVar19,uVar17)) >> 0x10,uVar17) & 0xff00ff00ff;
uVar21 = (ushort)(byte)((uint)uVar7 >> 8);
sVar16 = (short)CONCAT21(0xff00,(char)((uint)uVar7 >> 0x10));
sVar14 = uVar12 - (((ushort)(uVar12 * sVar13) >> 8) -
((ushort)((short)uVar18 * sVar13) >> 8));
sVar15 = uVar21 - (((ushort)(uVar21 * sVar13) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar13) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar13) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar13) >> 8));
sVar13 = 0xff - (((ushort)(sVar13 * 0xff) >> 8) - ((ushort)(sVar13 * 0xff) >> 8));
uVar7 = CONCAT13((0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 - (0xff < sVar13),
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15),
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14))));
}
*(undefined4 *)(iVar10 + iVar9 * 4) = uVar7;
}
} while (iVar9 != 0);
}
iVar10 = iVar10 - iVar2;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar10 = *(int *)(in_EAX + 0x14);
iVar11 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_18 = *(int *)(in_EAX + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(in_EAX + 0x1c);
iVar9 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
uVar3 = DAT_008f86b0 >> 0x18;
iVar8 = iVar2;
do {
iVar8 = iVar8 + -1;
uVar5 = uVar3;
if (iVar11 != 0x100) {
uVar5 = (int)(uVar3 * iVar11) >> 8;
}
if (uVar5 != 0) {
uVar6 = uVar4;
if (uVar5 + 1 != 0x100) {
uVar7 = *(undefined4 *)(iVar10 + iVar8 * 4);
uVar12 = (ushort)uVar7 & 0xff;
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar20,uVar4) >> 0x18),
CONCAT12(uVar19,uVar17)) >> 0x10,uVar17) & 0xff00ff00ff;
sVar16 = (short)(uVar5 + 1);
uVar21 = (ushort)(byte)((uint)uVar7 >> 8);
sVar15 = (short)CONCAT21(0xff00,(char)((uint)uVar7 >> 0x10));
sVar13 = uVar12 - (((ushort)(uVar12 * sVar16) >> 8) -
((ushort)((short)uVar18 * sVar16) >> 8));
sVar14 = uVar21 - (((ushort)(uVar21 * sVar16) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar16) >> 8));
sVar15 = sVar15 - (((ushort)(sVar15 * sVar16) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar16) >> 8));
sVar16 = 0xff - (((ushort)(sVar16 * 0xff) >> 8) - ((ushort)(sVar16 * 0xff) >> 8));
uVar6 = CONCAT13((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 - (0xff < sVar16),
CONCAT12((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15),
CONCAT11((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14),
(0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13))));
}
*(uint *)(iVar10 + iVar8 * 4) = uVar6;
}
} while (iVar8 != 0);
}
iVar10 = iVar10 + iVar9;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066f730 at 0x0066F730 (size: 743) ---
void FUN_0066f730(void)
{
int iVar1;
int iVar2;
ushort uVar3;
ushort uVar4;
int in_EAX;
uint uVar5;
uint uVar6;
int iVar7;
uint uVar8;
int iVar9;
uint uVar10;
byte *pbVar11;
byte *pbVar12;
uint uVar13;
int iVar14;
short sVar15;
short sVar16;
short sVar17;
ulonglong uVar18;
uint local_44;
uint local_40;
int local_3c;
int local_20;
local_3c = *(int *)(in_EAX + 8);
iVar14 = *(int *)(in_EAX + 0x14);
iVar7 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_20 = *(int *)(in_EAX + 0x20);
if (local_20 != 0) {
iVar1 = *(int *)(in_EAX + 0xc);
iVar2 = *(int *)(in_EAX + 0x18);
uVar10 = *(uint *)(in_EAX + 0x1c) >> 2;
uVar8 = *(uint *)(in_EAX + 0x1c) & 3;
do {
if (uVar10 != 0) {
pbVar11 = (byte *)(iVar14 + 0xb + uVar10 * 0xc);
uVar5 = uVar10;
do {
uVar13 = *(uint *)(local_3c + -4 + uVar5 * 4);
uVar5 = uVar5 - 1;
pbVar11 = pbVar11 + -0xc;
iVar9 = 4;
pbVar12 = pbVar11;
do {
local_44 = uVar13 & 0xff000000 | DAT_008f86b0;
uVar6 = local_44 >> 0x18;
if (iVar7 != 0x100) {
uVar6 = (int)(uVar6 * iVar7) >> 8;
}
if (uVar6 != 0) {
if (uVar6 + 1 != 0x100) {
uVar4 = *(ushort *)(pbVar12 + -2);
uVar3 = (ushort)(((uint5)*pbVar12 << 0x20) >> 0x18);
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),local_44)
>> 0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar17 = (short)(uVar6 + 1);
sVar16 = (short)(CONCAT23(uVar3,CONCAT12((char)(uVar4 >> 8),uVar4)) >> 0x10);
uVar3 = uVar3 >> 8;
sVar15 = (uVar4 & 0xff) -
(((ushort)((uVar4 & 0xff) * sVar17) >> 8) -
((ushort)((short)uVar18 * sVar17) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
sVar17 = uVar3 - (((ushort)(uVar3 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
local_44 = (uint)CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15)));
}
pbVar12[-2] = (byte)local_44;
pbVar12[-1] = (byte)(local_44 >> 8);
*pbVar12 = (byte)(local_44 >> 0x10);
}
uVar13 = uVar13 << 8;
pbVar12 = pbVar12 + -3;
iVar9 = iVar9 + -1;
} while (iVar9 != 0);
} while (uVar5 != 0);
}
if (uVar8 != 0) {
pbVar11 = (byte *)(uVar8 * 3 + 2 + iVar14 + uVar10 * 0xc);
uVar5 = uVar8;
do {
iVar9 = uVar5 - 1;
uVar5 = uVar5 - 1;
local_40 = (uint)*(byte *)(iVar9 + local_3c + uVar10 * 4) << 0x18 | DAT_008f86b0;
pbVar12 = pbVar11 + -3;
uVar13 = local_40 >> 0x18;
if (iVar7 != 0x100) {
uVar13 = (int)(uVar13 * iVar7) >> 8;
}
if (uVar13 != 0) {
if (uVar13 + 1 != 0x100) {
uVar4 = *(ushort *)(pbVar11 + -5);
uVar3 = (ushort)(((uint5)*pbVar12 << 0x20) >> 0x18);
uVar18 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),local_40) >>
0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0)) >>
0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
sVar17 = (short)(uVar13 + 1);
sVar16 = (short)(CONCAT23(uVar3,CONCAT12((char)(uVar4 >> 8),uVar4)) >> 0x10);
uVar3 = uVar3 >> 8;
sVar15 = (uVar4 & 0xff) -
(((ushort)((uVar4 & 0xff) * sVar17) >> 8) -
((ushort)((short)uVar18 * sVar17) >> 8));
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
sVar17 = uVar3 - (((ushort)(uVar3 * sVar17) >> 8) -
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
local_40 = (uint)CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
(0xff < sVar17),
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
(0xff < sVar16),
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
(0xff < sVar15)));
}
pbVar11[-5] = (byte)local_40;
pbVar11[-4] = (byte)(local_40 >> 8);
*pbVar12 = (byte)(local_40 >> 0x10);
}
pbVar11 = pbVar12;
} while (uVar5 != 0);
}
local_3c = local_3c + iVar1;
iVar14 = iVar14 + iVar2;
local_20 = local_20 + -1;
} while (local_20 != 0);
}
return;
}
// --- FUN_0066fa30 at 0x0066FA30 (size: 659) ---
void FUN_0066fa30(void)
{
byte bVar1;
int iVar2;
int iVar3;
uint uVar4;
ushort uVar5;
ushort uVar6;
int in_EAX;
uint uVar7;
byte *pbVar8;
byte *pbVar9;
int iVar10;
int iVar11;
short sVar12;
short sVar13;
short sVar14;
ulonglong uVar15;
uint local_28;
undefined4 local_24;
int local_18;
int local_14;
uVar4 = DAT_008f86b0;
if (*(int *)(in_EAX + 8) == 0) {
iVar10 = *(int *)(in_EAX + 0x14);
bVar1 = *(byte *)(in_EAX + 0x24);
local_14 = *(int *)(in_EAX + 0x20);
local_24 = CONCAT13(bVar1,(int3)DAT_008f86b0);
if (local_14 != 0) {
iVar11 = *(int *)(in_EAX + 0x1c);
iVar2 = *(int *)(in_EAX + 0x18);
do {
if (iVar11 != 0) {
pbVar8 = (byte *)(iVar11 * 3 + 2 + iVar10);
local_18 = iVar11;
do {
pbVar9 = pbVar8 + -3;
if (bVar1 != 0) {
sVar12 = bVar1 + 1;
if (sVar12 == 0x100) {
local_28 = local_24;
}
else {
uVar6 = *(ushort *)(pbVar8 + -5);
uVar5 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar15 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar4 >> 0x10),local_24) >> 0x18)
,CONCAT12((char)(uVar4 >> 8),(short)uVar4)) >> 0x10,
(short)uVar4) & 0xff00ff00ff;
sVar14 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar13 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar12) >> 8) -
((ushort)((short)uVar15 * sVar12) >> 8));
sVar14 = sVar14 - (((ushort)(sVar14 * sVar12) >> 8) -
((ushort)((short)(uVar15 >> 0x10) * sVar12) >> 8));
sVar12 = uVar5 - (((ushort)(uVar5 * sVar12) >> 8) -
((ushort)((short)(uVar15 >> 0x20) * sVar12) >> 8));
local_28 = (uint)CONCAT12((0 < sVar12) * (sVar12 < 0x100) * (char)sVar12 -
(0xff < sVar12),
CONCAT11((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14),
(0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13)));
}
pbVar8[-5] = (byte)local_28;
pbVar8[-4] = (byte)(local_28 >> 8);
*pbVar9 = (byte)(local_28 >> 0x10);
}
local_18 = local_18 + -1;
pbVar8 = pbVar9;
} while (local_18 != 0);
}
iVar10 = iVar10 - iVar2;
local_14 = local_14 + -1;
} while (local_14 != 0);
}
}
else {
iVar10 = *(int *)(in_EAX + 0x14);
iVar11 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_18 = *(int *)(in_EAX + 0x20);
if (local_18 != 0) {
iVar2 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar2 != 0) {
uVar4 = DAT_008f86b0 >> 0x18;
pbVar8 = (byte *)(iVar2 * 3 + 2 + iVar10);
local_24 = iVar2;
do {
pbVar9 = pbVar8 + -3;
uVar7 = uVar4;
if (iVar11 != 0x100) {
uVar7 = (int)(uVar4 * iVar11) >> 8;
}
if (uVar7 != 0) {
if (uVar7 + 1 == 0x100) {
local_28 = DAT_008f86b0;
}
else {
uVar6 = *(ushort *)(pbVar8 + -5);
uVar5 = (ushort)(((uint5)*pbVar9 << 0x20) >> 0x18);
uVar15 = (ulonglong)
CONCAT52((int5)(CONCAT43((int)(((uint7)(byte)(DAT_008f86b0 >> 0x10) << 0x20
) >> 0x18),
CONCAT12((char)(DAT_008f86b0 >> 8),
(short)DAT_008f86b0)) >> 0x10),
(short)DAT_008f86b0) & 0xff00ff00ff;
sVar14 = (short)(uVar7 + 1);
sVar13 = (short)(CONCAT23(uVar5,CONCAT12((char)(uVar6 >> 8),uVar6)) >> 0x10);
uVar5 = uVar5 >> 8;
sVar12 = (uVar6 & 0xff) -
(((ushort)((uVar6 & 0xff) * sVar14) >> 8) -
((ushort)((short)uVar15 * sVar14) >> 8));
sVar13 = sVar13 - (((ushort)(sVar13 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x10) * sVar14) >> 8));
sVar14 = uVar5 - (((ushort)(uVar5 * sVar14) >> 8) -
((ushort)((short)(uVar15 >> 0x20) * sVar14) >> 8));
local_28 = (uint)CONCAT12((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
(0xff < sVar14),
CONCAT11((0 < sVar13) * (sVar13 < 0x100) * (char)sVar13 -
(0xff < sVar13),
(0 < sVar12) * (sVar12 < 0x100) * (char)sVar12 -
(0xff < sVar12)));
}
pbVar8[-5] = (byte)local_28;
pbVar8[-4] = (byte)(local_28 >> 8);
*pbVar9 = (byte)(local_28 >> 0x10);
}
local_24 = local_24 + -1;
pbVar8 = pbVar9;
} while (local_24 != 0);
}
iVar10 = iVar10 + iVar3;
local_18 = local_18 + -1;
} while (local_18 != 0);
}
}
return;
}
// --- FUN_0066fcd0 at 0x0066FCD0 (size: 1071) ---
void FUN_0066fcd0(void)
{
uint *puVar1;
byte bVar2;
int iVar3;
undefined4 uVar4;
undefined1 auVar5 [16];
int in_EAX;
undefined4 uVar6;
uint *puVar7;
int iVar8;
int iVar9;
uint uVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
ushort uVar15;
short sVar16;
undefined1 uVar19;
short sVar20;
short sVar22;
ulonglong uVar17;
short sVar23;
undefined8 uVar24;
short sVar25;
undefined2 uVar26;
undefined1 uVar29;
ulonglong uVar27;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
float fVar34;
float fVar35;
undefined1 auVar36 [16];
undefined1 auVar37 [16];
undefined1 auVar38 [16];
undefined4 local_4c;
undefined4 local_48;
int local_3c;
int local_38;
int local_34;
undefined1 uVar18;
uint5 uVar21;
undefined1 uVar28;
uVar10 = DAT_008f86b0;
local_48 = *(int *)(in_EAX + 8);
if (local_48 == 0) {
iVar11 = *(int *)(in_EAX + 0x14);
bVar2 = *(byte *)(in_EAX + 0x24);
local_4c = CONCAT13(bVar2,(int3)DAT_008f86b0);
local_38 = *(int *)(in_EAX + 0x20);
if (local_38 != 0) {
iVar8 = *(int *)(in_EAX + 0x1c);
iVar3 = *(int *)(in_EAX + 0x18);
do {
if (iVar8 != 0) {
iVar9 = iVar8;
do {
iVar9 = iVar9 + -1;
if (bVar2 != 0) {
iVar12 = bVar2 + 1;
uVar6 = local_4c;
if (iVar12 != 0x100) {
uVar4 = *(undefined4 *)(iVar11 + iVar9 * 4);
local_48._3_1_ = (byte)((uint)uVar4 >> 0x18);
if (local_48._3_1_ != 0) {
uVar19 = (undefined1)((uint)uVar4 >> 0x10);
uVar18 = (undefined1)((uint)uVar4 >> 8);
uVar15 = (ushort)uVar4;
uVar28 = (undefined1)(uVar10 >> 8);
uVar29 = (undefined1)(uVar10 >> 0x10);
uVar26 = (undefined2)uVar10;
if (local_48._3_1_ == 0xff) {
uVar13 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar19,uVar4)) >> 0x20)
,uVar4) >> 0x18);
uVar21 = (uint5)uVar13 & 0xffffffff00;
uVar17 = (ulonglong)CONCAT43(uVar13,CONCAT12(uVar18,uVar15)) &
0xffffffff00ffffff;
uVar27 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar29,local_4c) >> 0x18),
CONCAT12(uVar28,uVar26)) >> 0x10,uVar26) &
0xff00ff00ff;
sVar25 = (short)iVar12;
sVar20 = (short)(uVar17 >> 0x10);
sVar22 = (short)(uVar21 >> 8);
sVar23 = (short)(uVar21 >> 0x18);
sVar16 = (uVar15 & 0xff) -
(((ushort)((uVar15 & 0xff) * sVar25) >> 8) -
((ushort)((short)uVar27 * sVar25) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar25) >> 8) -
((ushort)((short)(uVar27 >> 0x10) * sVar25) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar25) >> 8) -
((ushort)((short)(uVar27 >> 0x20) * sVar25) >> 8));
sVar23 = sVar23 - (((ushort)(sVar23 * sVar25) >> 8) -
((ushort)((short)(uVar17 >> 0x30) * sVar25) >> 8));
uVar6 = CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)sVar23 -
(0xff < sVar23),
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
(0xff < sVar22),
CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
(char)sVar20 - (0xff < sVar20),
(0 < sVar16) * (sVar16 < 0x100) *
(char)sVar16 - (0xff < sVar16))));
}
else {
uVar13 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_48._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar19,uVar4))
>> 0x20),uVar4) >> 0x18);
uVar21 = (uint5)uVar13 & 0xffffffff00;
uVar17 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar13,CONCAT12(uVar18,uVar15)) >> 0x10),
uVar15) & 0xffffffff00ff00ff;
fVar30 = (float)(ushort)(uVar21 >> 8);
fVar32 = (float)(ushort)(uVar21 >> 0x18);
fVar31 = (float)((uint)uVar17 & 0xffff);
fVar33 = (float)(ushort)(uVar17 >> 0x10);
uVar13 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)bVar2 << 0x30) >> 0x28)
,CONCAT14(uVar29,local_4c)) >> 0x20),
local_4c) >> 0x18);
uVar21 = (uint5)uVar13 & 0xffffffff00;
uVar17 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar13,CONCAT12(uVar28,uVar26)) >> 0x10),
uVar26) & 0xffffffff00ff00ff;
fVar34 = (float)iVar12;
iVar12 = local_48._3_1_ + 1 +
(iVar12 - ((int)((local_48._3_1_ + 1) * iVar12) >> 8));
fVar35 = (float)iVar12;
auVar37._4_4_ = fVar35;
auVar37._0_4_ = fVar35;
auVar38._0_4_ = (fVar31 - (float)((uint)uVar17 & 0xffff)) * fVar34;
auVar38._4_4_ = (fVar33 - (float)(ushort)(uVar17 >> 0x10)) * fVar34;
auVar38._8_4_ = (fVar30 - (float)(ushort)(uVar21 >> 8)) * fVar34;
auVar38._12_4_ = (fVar32 - (float)(ushort)(uVar21 >> 0x18)) * fVar34;
auVar37._8_4_ = fVar35;
auVar37._12_4_ = fVar35;
auVar37 = divps(auVar38,auVar37);
uVar24 = packssdw(CONCAT44(ROUND(fVar33 - auVar37._4_4_),
ROUND(fVar31 - auVar37._0_4_)),
CONCAT44(ROUND(fVar32 - auVar37._12_4_),
ROUND(fVar30 - auVar37._8_4_)));
sVar16 = (short)uVar24;
sVar20 = (short)((ulonglong)uVar24 >> 0x10);
sVar22 = (short)((ulonglong)uVar24 >> 0x20);
local_48 = CONCAT13((char)iVar12 + -1,
CONCAT12((0 < sVar22) * (sVar22 < 0x100) *
(char)((ulonglong)uVar24 >> 0x20) - (0xff < sVar22)
,CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
(char)((ulonglong)uVar24 >> 0x10) -
(0xff < sVar20),
(0 < sVar16) * (sVar16 < 0x100) *
(char)uVar24 - (0xff < sVar16))));
uVar6 = local_48;
}
}
}
*(undefined4 *)(iVar11 + iVar9 * 4) = uVar6;
}
} while (iVar9 != 0);
}
iVar11 = iVar11 - iVar3;
local_38 = local_38 + -1;
} while (local_38 != 0);
}
}
else {
iVar11 = *(int *)(in_EAX + 0x14);
iVar8 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
local_34 = *(int *)(in_EAX + 0x20);
if (local_34 != 0) {
iVar3 = *(int *)(in_EAX + 0x1c);
iVar9 = *(int *)(in_EAX + 0xc);
iVar12 = *(int *)(in_EAX + 0x18);
do {
if (iVar3 != 0) {
puVar7 = (uint *)(iVar11 + iVar3 * 4);
local_3c = iVar3;
do {
puVar1 = (uint *)((int)puVar7 + (local_48 - iVar11) + -4);
puVar7 = puVar7 + -1;
uVar10 = *puVar1 & 0xff000000 | DAT_008f86b0;
uVar13 = uVar10 >> 0x18;
if (iVar8 != 0x100) {
uVar13 = (int)(uVar13 * iVar8) >> 8;
}
if (uVar13 != 0) {
iVar14 = uVar13 + 1;
if (iVar14 != 0x100) {
uVar13 = *puVar7;
local_4c._3_1_ = (byte)(uVar13 >> 0x18);
if (local_4c._3_1_ != 0) {
uVar19 = (undefined1)(uVar13 >> 0x10);
uVar29 = (undefined1)(DAT_008f86b0 >> 0x10);
uVar18 = (undefined1)(uVar13 >> 8);
uVar15 = (ushort)uVar13;
uVar28 = (undefined1)(DAT_008f86b0 >> 8);
uVar26 = (undefined2)DAT_008f86b0;
if (local_4c._3_1_ == 0xff) {
uVar13 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(uVar19,uVar13)) >> 0x20
),uVar13) >> 0x18);
uVar21 = (uint5)uVar13 & 0xffffffff00;
uVar17 = (ulonglong)CONCAT43(uVar13,CONCAT12(uVar18,uVar15)) &
0xffffffff00ffffff;
uVar27 = (ulonglong)
CONCAT52(CONCAT23((short)(CONCAT14(uVar29,uVar10) >> 0x18),
CONCAT12(uVar28,uVar26)) >> 0x10,uVar26) &
0xff00ff00ff;
sVar25 = (short)iVar14;
sVar20 = (short)(uVar17 >> 0x10);
sVar22 = (short)(uVar21 >> 8);
sVar23 = (short)(uVar21 >> 0x18);
sVar16 = (uVar15 & 0xff) -
(((ushort)((uVar15 & 0xff) * sVar25) >> 8) -
((ushort)((short)uVar27 * sVar25) >> 8));
sVar20 = sVar20 - (((ushort)(sVar20 * sVar25) >> 8) -
((ushort)((short)(uVar27 >> 0x10) * sVar25) >> 8));
sVar22 = sVar22 - (((ushort)(sVar22 * sVar25) >> 8) -
((ushort)((short)(uVar27 >> 0x20) * sVar25) >> 8));
sVar23 = sVar23 - (((ushort)(sVar23 * sVar25) >> 8) -
((ushort)((short)(uVar17 >> 0x30) * sVar25) >> 8));
uVar10 = CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)sVar23 -
(0xff < sVar23),
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
(0xff < sVar22),
CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
(char)sVar20 - (0xff < sVar20),
(0 < sVar16) * (sVar16 < 0x100) *
(char)sVar16 - (0xff < sVar16))));
}
else {
uVar13 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)local_4c._3_1_ << 0x30)
>> 0x28),CONCAT14(uVar19,uVar13)
) >> 0x20),uVar13) >> 0x18);
uVar21 = (uint5)uVar13 & 0xffffffff00;
uVar17 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar13,CONCAT12(uVar18,uVar15)) >> 0x10),
uVar15) & 0xffffffff00ff00ff;
fVar30 = (float)(ushort)(uVar21 >> 8);
fVar32 = (float)(ushort)(uVar21 >> 0x18);
fVar31 = (float)((uint)uVar17 & 0xffff);
fVar33 = (float)(ushort)(uVar17 >> 0x10);
uVar10 = (uint)(CONCAT34((int3)(CONCAT25((short)(((uint7)(byte)(uVar10 >> 0x18)
<< 0x30) >> 0x28),
CONCAT14(uVar29,uVar10)) >> 0x20),
uVar10) >> 0x18);
uVar21 = (uint5)uVar10 & 0xffffffff00;
uVar17 = (ulonglong)
CONCAT52((int5)(CONCAT43(uVar10,CONCAT12(uVar28,uVar26)) >> 0x10),
uVar26) & 0xffffffff00ff00ff;
fVar34 = (float)iVar14;
iVar14 = local_4c._3_1_ + 1 +
(iVar14 - ((int)((local_4c._3_1_ + 1) * iVar14) >> 8));
fVar35 = (float)iVar14;
auVar5._4_4_ = fVar35;
auVar5._0_4_ = fVar35;
auVar36._0_4_ = (fVar31 - (float)((uint)uVar17 & 0xffff)) * fVar34;
auVar36._4_4_ = (fVar33 - (float)(ushort)(uVar17 >> 0x10)) * fVar34;
auVar36._8_4_ = (fVar30 - (float)(ushort)(uVar21 >> 8)) * fVar34;
auVar36._12_4_ = (fVar32 - (float)(ushort)(uVar21 >> 0x18)) * fVar34;
auVar5._8_4_ = fVar35;
auVar5._12_4_ = fVar35;
auVar37 = divps(auVar36,auVar5);
uVar24 = packssdw(CONCAT44(ROUND(fVar33 - auVar37._4_4_),
ROUND(fVar31 - auVar37._0_4_)),
CONCAT44(ROUND(fVar32 - auVar37._12_4_),
ROUND(fVar30 - auVar37._8_4_)));
sVar16 = (short)uVar24;
sVar20 = (short)((ulonglong)uVar24 >> 0x10);
sVar22 = (short)((ulonglong)uVar24 >> 0x20);
local_4c = CONCAT13((char)iVar14 + -1,
CONCAT12((0 < sVar22) * (sVar22 < 0x100) *
(char)((ulonglong)uVar24 >> 0x20) - (0xff < sVar22)
,CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
(char)((ulonglong)uVar24 >> 0x10) -
(0xff < sVar20),
(0 < sVar16) * (sVar16 < 0x100) *
(char)uVar24 - (0xff < sVar16))));
uVar10 = local_4c;
}
}
}
*puVar7 = uVar10;
}
local_3c = local_3c + -1;
} while (local_3c != 0);
}
local_48 = local_48 + iVar9;
iVar11 = iVar11 + iVar12;
local_34 = local_34 + -1;
} while (local_34 != 0);
}
}
return;
}