void FUN_004739e0(uint *param_1,char *param_2)
{
char cVar1;
uint *puVar2;
int iVar3;
uint **ppuVar4;
int iVar5;
int *piVar6;
uint uVar7;
undefined4 *puVar8;
char *pcVar9;
undefined *puVar10;
uint uVar11;
uint **ppuVar12;
uint uVar13;
code *pcVar14;
uint uVar15;
uint *puVar16;
uint **ppuVar17;
uint *puVar18;
uint **ppuVar19;
code *pcVar20;
uint *local_88;
uint *local_84;
uint local_80;
uint *local_7c;
int local_78;
uint local_74;
uint *local_70 [2];
uint *local_68 [14];
uint **local_30;
if ((uint *)param_2 == (uint *)0x0) {
switchD_00473a68_caseD_2e:
goto switchD_00473a68_default;
}
if (param_1[0x47] != 0) {
return;
}
uVar7 = *(uint *)param_2;
switch(uVar7) {
case 0:
uVar7 = *(uint *)((int)param_2 + 8);
param_2 = *(char **)((int)param_2 + 4);
if ((*param_1 & 4) != 0) {
puVar16 = (uint *)((int)param_2 + uVar7);
do {
if (puVar16 <= param_2) {
return;
}
if (((3 < (int)puVar16 - (int)param_2) && ((char)*(uint *)param_2 == '_')) &&
((*(char *)((int)param_2 + 1) == '_' &&
(puVar18 = (uint *)((int)param_2 + 3), *(char *)((int)param_2 + 2) == 'U')))) {
uVar7 = 0;
for (; puVar18 < puVar16; puVar18 = (uint *)((int)puVar18 + 1)) {
cVar1 = (char)*puVar18;
iVar3 = (int)cVar1;
iVar5 = iVar3 + -0x30;
if (((9 < (byte)(cVar1 - 0x30U)) && (iVar5 = iVar3 + -0x37, 5 < (byte)(cVar1 + 0xbfU)))
&& (iVar5 = iVar3 + -0x57, 5 < (byte)(cVar1 + 0x9fU))) {
if ((iVar3 == 0x5f) && (uVar7 < 0x100)) {
FUN_004736cc(param_1,(int)(char)uVar7);
goto LAB_00473b90;
}
break;
}
uVar7 = iVar5 + uVar7 * 0x10;
}
}
FUN_004736cc(param_1,(int)(char)*(uint *)param_2);
puVar18 = (uint *)param_2;
LAB_00473b90:
param_2 = (char *)((int)puVar18 + 1);
} while( true );
}
goto LAB_00474508;
case 1:
case 2:
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
if ((*param_1 & 4) != 0) {
pcVar9 = (char *)0x2e;
goto LAB_00473be4;
}
pcVar9 = "::";
goto LAB_00474530;
case 3:
uVar13 = param_1[0x46];
puVar16 = *(uint **)((int)param_2 + 4);
ppuVar4 = local_70;
uVar7 = 0;
while( true ) {
if (puVar16 == (uint *)0x0) {
param_1[0x47] = 1;
return;
}
if (uVar7 == 4) goto switchD_00473a68_default;
uVar11 = *puVar16;
puVar18 = (uint *)param_1[0x45];
*ppuVar4 = (uint *)param_1[0x46];
ppuVar4[1] = puVar16;
param_1[0x46] = (uint)ppuVar4;
ppuVar4[2] = (uint *)0x0;
ppuVar4[3] = puVar18;
uVar15 = uVar7 + 1;
ppuVar4 = ppuVar4 + 4;
if (2 < uVar11 - 0x19) break;
puVar16 = (uint *)puVar16[1];
uVar7 = uVar15;
}
if (uVar11 == 4) {
param_1[0x45] = (uint)&local_88;
local_88 = puVar18;
local_84 = puVar16;
}
if (*puVar16 == 2) {
ppuVar19 = local_70 + uVar15 * 4;
ppuVar17 = local_70 + (1 - uVar15) * -4;
ppuVar4 = local_70 + uVar7 * 4;
for (puVar18 = (uint *)puVar16[2]; *puVar18 - 0x19 < 3; puVar18 = (uint *)puVar18[1]) {
ppuVar12 = ppuVar4 + 4;
if (3 < uVar15) goto switchD_00473a68_caseD_2e;
FUN_00483c90(ppuVar12,ppuVar4,0x10);
puVar2 = (uint *)param_1[0x45];
*ppuVar12 = (uint *)ppuVar17;
ppuVar4[3] = puVar2;
param_1[0x46] = (uint)ppuVar19;
ppuVar4[1] = puVar18;
ppuVar4[2] = (uint *)0x0;
uVar15 = uVar15 + 1;
ppuVar17 = ppuVar17 + 4;
ppuVar19 = ppuVar19 + 4;
ppuVar4 = ppuVar12;
}
}
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
if (*puVar16 == 4) {
param_1[0x45] = (uint)local_88;
}
for (ppuVar4 = local_70 + (uVar15 + 0xfffffff) * 4 + 1; ppuVar4 != &local_7c;
ppuVar4 = ppuVar4 + -4) {
if (ppuVar4[1] == (uint *)0x0) {
FUN_004736cc(param_1,0x20);
FUN_00473830(param_1,*ppuVar4);
}
}
param_1[0x46] = uVar13;
return;
case 4:
uVar7 = param_1[0x46];
param_1[0x46] = 0;
piVar6 = *(int **)((int)param_2 + 4);
if (((((*param_1 & 4) == 0) || (*piVar6 != 0)) || (piVar6[2] != 6)) ||
(iVar5 = FUN_00483ec0(piVar6[1],"JArray",6), iVar5 != 0)) {
FUN_004739e0(param_1,piVar6);
if ((char)param_1[0x42] == '<') {
FUN_004736cc(param_1,0x20);
}
FUN_004736cc(param_1,0x3c);
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
if ((char)param_1[0x42] == '>') {
FUN_004736cc(param_1,0x20);
}
puVar10 = (undefined *)0x3e;
pcVar14 = FUN_004736cc;
}
else {
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
puVar10 = &DAT_00497c5c;
pcVar14 = FUN_004737d0;
}
(*pcVar14)(param_1,puVar10);
param_1[0x46] = uVar7;
return;
case 5:
puVar16 = (uint *)param_1[0x45];
if (puVar16 != (uint *)0x0) {
uVar7 = *(uint *)((int)param_2 + 4);
for (piVar6 = *(int **)(puVar16[1] + 8); piVar6 != (int *)0x0; piVar6 = (int *)piVar6[2]) {
if (*piVar6 != 0x28) goto switchD_00473a68_default;
if ((int)uVar7 < 1) break;
uVar7 = uVar7 - 1;
}
if ((uVar7 == 0) && (piVar6 != (int *)0x0)) {
param_1[0x45] = *puVar16;
FUN_004739e0(param_1,piVar6[1]);
param_1[0x45] = (uint)puVar16;
return;
}
}
default:
switchD_00473a68_default:
param_1[0x47] = 1;
return;
case 6:
goto switchD_00473a68_caseD_6;
case 7:
pcVar9 = (char *)0x7e;
LAB_00473be4:
pcVar14 = FUN_004736cc;
goto LAB_00473bf0;
case 8:
pcVar9 = "vtable for ";
break;
case 9:
pcVar9 = "VTT for ";
break;
case 10:
pcVar14 = FUN_004737d0;
FUN_004737d0(param_1,"construction vtable for ");
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
puVar10 = &DAT_00497c94;
goto LAB_00474484;
case 0xb:
pcVar9 = "typeinfo for ";
break;
case 0xc:
pcVar9 = "typeinfo name for ";
break;
case 0xd:
pcVar9 = "typeinfo fn for ";
break;
case 0xe:
pcVar9 = "non-virtual thunk to ";
break;
case 0xf:
pcVar9 = "virtual thunk to ";
break;
case 0x10:
pcVar9 = "covariant return thunk to ";
break;
case 0x11:
pcVar9 = "java Class for ";
break;
case 0x12:
pcVar9 = "guard variable for ";
break;
case 0x13:
pcVar9 = "reference temporary for ";
break;
case 0x14:
pcVar9 = "hidden alias for ";
break;
case 0x15:
uVar7 = *(uint *)((int)param_2 + 8);
param_2 = *(char **)((int)param_2 + 4);
goto LAB_00474508;
case 0x16:
case 0x17:
case 0x18:
for (puVar16 = (uint *)param_1[0x46]; puVar16 != (uint *)0x0; puVar16 = (uint *)*puVar16) {
if (puVar16[2] == 0) {
if (2 < *(uint *)puVar16[1] - 0x16) break;
if (*(uint *)puVar16[1] == uVar7) goto switchD_00473a68_caseD_23;
}
}
case 0x19:
case 0x1a:
case 0x1b:
case 0x1c:
case 0x1d:
case 0x1e:
case 0x1f:
case 0x20:
case 0x21:
local_80 = param_1[0x46];
param_1[0x46] = (uint)&local_80;
local_74 = param_1[0x45];
local_78 = 0;
local_7c = (uint *)param_2;
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
if (local_78 == 0) {
pcVar14 = FUN_00473830;
LAB_00474434:
(*pcVar14)(param_1,param_2);
}
LAB_00474440:
param_1[0x46] = local_80;
return;
case 0x22:
puVar8 = *(undefined4 **)((int)param_2 + 4);
pcVar14 = FUN_00473740;
if ((*param_1 & 4) == 0) {
uVar7 = puVar8[1];
param_2 = (char *)*puVar8;
}
else {
uVar7 = puVar8[3];
param_2 = (char *)puVar8[2];
}
goto LAB_00474514;
case 0x23:
goto switchD_00473a68_caseD_23;
case 0x24:
if ((*param_1 & 0x20) != 0) {
FUN_00474bcc(param_1,param_2,param_1[0x46]);
}
if (*(uint *)((int)param_2 + 4) != 0) {
local_80 = param_1[0x46];
param_1[0x46] = (uint)&local_80;
local_74 = param_1[0x45];
local_78 = 0;
local_7c = (uint *)param_2;
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
param_1[0x46] = local_80;
if (local_78 != 0) {
return;
}
if ((*param_1 & 0x20) == 0) {
FUN_004736cc(param_1,0x20);
}
}
if ((*param_1 & 0x20) != 0) {
return;
}
uVar7 = param_1[0x46];
pcVar14 = FUN_00474bcc;
goto LAB_00474514;
case 0x25:
puVar18 = (uint *)param_1[0x46];
local_68[1] = (uint *)param_1[0x45];
local_30 = local_70;
param_1[0x46] = (uint)local_30;
local_68[0] = (uint *)0x0;
uVar7 = 1;
puVar16 = puVar18;
local_70[0] = puVar18;
local_70[1] = (uint *)param_2;
while ((puVar16 != (uint *)0x0 && (*(int *)puVar16[1] - 0x16U < 3))) {
if (puVar16[2] == 0) {
if (3 < uVar7) goto switchD_00473a68_default;
FUN_00483c90(local_70 + uVar7 * 4,puVar16,0x10);
local_70[uVar7 * 4] = (uint *)param_1[0x46];
puVar16[2] = 1;
param_1[0x46] = (uint)(local_30 + uVar7 * 4);
uVar7 = uVar7 + 1;
}
puVar16 = (uint *)*puVar16;
}
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
param_1[0x46] = (uint)puVar18;
if (local_68[0] != (uint *)0x0) {
return;
}
ppuVar4 = local_70 + (uVar7 + 0xfffffff) * 4 + 1;
for (; 1 < uVar7; uVar7 = uVar7 - 1) {
FUN_00473830(param_1,*ppuVar4);
ppuVar4 = ppuVar4 + -4;
}
uVar7 = param_1[0x46];
pcVar14 = FUN_0047501c;
goto LAB_00474514;
case 0x26:
local_80 = param_1[0x46];
param_1[0x46] = (uint)&local_80;
local_74 = param_1[0x45];
local_78 = 0;
local_7c = (uint *)param_2;
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
if (local_78 != 0) goto LAB_00474440;
FUN_004736cc(param_1,0x20);
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
param_2 = &DAT_00497c4c;
pcVar14 = FUN_004737d0;
goto LAB_00474434;
case 0x27:
case 0x28:
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
if (*(uint *)((int)param_2 + 8) == 0) {
return;
}
puVar10 = &DAT_00497d5c;
pcVar14 = FUN_004737d0;
goto LAB_00474484;
case 0x29:
FUN_004737d0(param_1,"operator");
if ((byte)(**(char **)(*(uint *)((int)param_2 + 4) + 4) + 0x9fU) < 0x1a) {
FUN_004736cc(param_1,0x20);
}
uVar7 = *(uint *)(*(uint *)((int)param_2 + 4) + 8);
param_2 = *(char **)(*(uint *)((int)param_2 + 4) + 4);
LAB_00474508:
pcVar14 = FUN_00473740;
LAB_00474514:
(*pcVar14)(param_1,param_2,uVar7);
return;
case 0x2a:
pcVar9 = "operator ";
LAB_00474530:
pcVar14 = FUN_004737d0;
LAB_00473bf0:
(*pcVar14)(param_1,pcVar9);
switchD_00473a68_caseD_6:
param_2 = *(char **)((int)param_2 + 8);
goto LAB_00473c00;
case 0x2b:
FUN_004737d0(param_1,"operator ");
pcVar20 = FUN_00475198;
goto LAB_00474b80;
case 0x2c:
piVar6 = *(int **)((int)param_2 + 4);
if (*piVar6 == 0x2b) {
pcVar14 = FUN_004736cc;
FUN_004736cc(param_1,0x28);
FUN_00475198(param_1,*(uint *)((int)param_2 + 4));
piVar6 = (int *)0x29;
}
else {
pcVar14 = FUN_004752e8;
}
(*pcVar14)(param_1,piVar6);
pcVar20 = FUN_004736cc;
FUN_004736cc(param_1,0x28);
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
param_2 = (char *)0x29;
goto LAB_00474b80;
case 0x2d:
if (**(int **)((int)param_2 + 8) != 0x2e) goto switchD_00473a68_default;
if (((**(int **)((int)param_2 + 4) == 0x29) &&
(iVar5 = (*(int **)((int)param_2 + 4))[1], *(int *)(iVar5 + 8) == 1)) &&
(**(char **)(iVar5 + 4) == '>')) {
FUN_004736cc(param_1,0x28);
}
pcVar20 = FUN_004736cc;
FUN_004736cc(param_1,0x28);
FUN_004739e0(param_1,*(undefined4 *)(*(uint *)((int)param_2 + 8) + 4));
FUN_004737d0(param_1,&DAT_00497d78);
FUN_004752e8(param_1,*(uint *)((int)param_2 + 4));
FUN_004737d0(param_1,&DAT_00497d7c);
FUN_004739e0(param_1,*(undefined4 *)(*(uint *)((int)param_2 + 8) + 8));
FUN_004736cc(param_1,0x29);
if (**(int **)((int)param_2 + 4) != 0x29) {
return;
}
iVar5 = (*(int **)((int)param_2 + 4))[1];
if (*(int *)(iVar5 + 8) != 1) {
return;
}
if (**(char **)(iVar5 + 4) != '>') {
return;
}
param_2 = (char *)0x29;
goto LAB_00474b80;
case 0x2e:
case 0x30:
case 0x31:
goto switchD_00473a68_caseD_2e;
case 0x2f:
if ((**(int **)((int)param_2 + 8) != 0x30) || (*(int *)(*(int **)((int)param_2 + 8))[2] != 0x31)
) goto switchD_00473a68_default;
pcVar20 = FUN_004736cc;
FUN_004736cc(param_1,0x28);
FUN_004739e0(param_1,*(undefined4 *)(*(uint *)((int)param_2 + 8) + 4));
FUN_004737d0(param_1,&DAT_00497d78);
FUN_004752e8(param_1,*(uint *)((int)param_2 + 4));
FUN_004737d0(param_1,&DAT_00497d7c);
FUN_004739e0(param_1,*(undefined4 *)(*(int *)(*(uint *)((int)param_2 + 8) + 8) + 4));
FUN_004737d0(param_1,") : (");
FUN_004739e0(param_1,*(undefined4 *)(*(int *)(*(uint *)((int)param_2 + 8) + 8) + 8));
param_2 = (char *)0x29;
goto LAB_00474b80;
case 0x32:
case 0x33:
uVar13 = 0;
if (**(int **)((int)param_2 + 4) != 0x22) {
LAB_00474a6c:
FUN_004736cc(param_1,0x28);
FUN_004739e0(param_1,*(uint *)((int)param_2 + 4));
FUN_004736cc(param_1,0x29);
if (*(uint *)param_2 == 0x33) {
FUN_004736cc(param_1,0x2d);
}
if (uVar13 == 8) {
FUN_004736cc(param_1,0x5b);
}
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
if (uVar13 != 8) {
return;
}
param_2 = (char *)0x5d;
goto LAB_00474b74;
}
uVar13 = *(uint *)((*(int **)((int)param_2 + 4))[1] + 0x10);
if (uVar13 == 0) goto LAB_00474a6c;
if (6 < uVar13) {
if ((((uVar13 == 7) && (piVar6 = *(int **)((int)param_2 + 8), *piVar6 == 0)) &&
(piVar6[2] == 1)) && (uVar7 == 0x32)) {
if (*(char *)piVar6[1] == '0') {
param_2 = "false";
}
else {
if (*(char *)piVar6[1] != '1') goto LAB_00474a6c;
param_2 = &DAT_00497d9c;
}
goto LAB_00474a60;
}
goto LAB_00474a6c;
}
if (**(int **)((int)param_2 + 8) != 0) goto LAB_00474a6c;
if (uVar7 == 0x33) {
FUN_004736cc(param_1,0x2d);
}
FUN_004739e0(param_1,*(uint *)((int)param_2 + 8));
switch(uVar13) {
case 2:
param_2 = (char *)0x75;
goto LAB_00474b74;
case 3:
param_2 = (char *)0x6c;
LAB_00474b74:
pcVar20 = FUN_004736cc;
goto LAB_00474b80;
case 4:
param_2 = &UNK_00497d88;
break;
case 5:
param_2 = &UNK_00497d8c;
break;
case 6:
param_2 = &UNK_00497d90;
break;
default:
goto switchD_0047499c_default;
}
LAB_00474a60:
pcVar20 = FUN_004737d0;
goto LAB_00474b80;
case 0x34:
pcVar9 = "java resource ";
break;
case 0x35:
puVar10 = *(undefined **)((int)param_2 + 4);
pcVar14 = FUN_004739e0;
LAB_00474484:
pcVar20 = FUN_004739e0;
(*pcVar14)(param_1,puVar10);
param_2 = *(char **)((int)param_2 + 8);
goto LAB_00474b80;
case 0x36:
param_2 = (char *)(int)(char)*(uint *)((int)param_2 + 4);
goto LAB_00474b74;
}
FUN_004737d0(param_1,pcVar9);
switchD_00473a68_caseD_23:
param_2 = *(char **)((int)param_2 + 4);
LAB_00473c00:
pcVar20 = FUN_004739e0;
LAB_00474b80:
(*pcVar20)(param_1,param_2);
switchD_0047499c_default:
return;
}