undefined4 FUN_00406970(undefined4 param_1,int param_2,int param_3,uint param_4)
{
bool bVar1;
int iVar2;
int iVar3;
int iVar4;
int iVar5;
char *pcVar6;
undefined4 uVar7;
int iVar8;
int iVar9;
undefined4 uVar10;
undefined4 *puVar11;
undefined4 *puVar12;
int iVar13;
int *piVar14;
int *piVar15;
int *piVar16;
int *piVar17;
undefined4 local_3c;
iVar2 = sobj_new();
iVar3 = sobj_new();
iVar4 = solist_new();
if (iVar2 == 0) {
piVar16 = (int *)0x0;
local_3c = 0xffffffff;
}
else {
if ((iVar3 == 0) || (iVar4 == 0)) {
LAB_004070b8:
piVar16 = (int *)0x0;
local_3c = 0xffffffff;
}
else {
local_3c = 0;
bVar1 = false;
piVar15 = (int *)0x0;
LAB_0040708c:
iVar13 = xs_getc(param_1) //possible issue identified - semgrep
if (iVar13 != -1) {
if (iVar13 == 0x3c) {
solist_free(iVar4,0x3c);
iVar13 = sobj_xstream_read_tokens(param_1,iVar4,0x3e,&DAT_0042257c);
if (iVar13 == 0) goto LAB_004070b8;
solist_get_reset(iVar4);
iVar13 = solist_get_next(iVar4);
if ((iVar13 == 0) || (iVar5 = sobj_get_length(iVar13), iVar5 == 0)) goto LAB_004070b8;
iVar5 = sobj_get_char(iVar13,0);
if (iVar5 != 0x3f) {
iVar5 = sobj_get_char(iVar13,0);
if (iVar5 == 0x2f) {
iVar13 = solist_get_next(iVar4);
if ((iVar13 == 0) || (iVar5 = sobj_get_length(iVar13), iVar5 == 0)) goto LAB_004070b8;
pcVar6 = (char *)sobj_get_string(iVar13);
iVar13 = strcmp(pcVar6,*(char **)(param_2 + 0x1c));
if (iVar13 != 0) goto LAB_004070b8;
piVar16 = (int *)0x0;
if (bVar1) goto LAB_004070cc;
sobj_eat_indent(iVar2);
iVar13 = sobj_get_length(iVar2);
piVar16 = (int *)0x0;
if (iVar13 == 0) goto LAB_004070cc;
iVar13 = sobj_new();
if (iVar13 == 0) goto LAB_004070b8;
uVar7 = sobj_get_string(iVar2);
sobj_unescape_xml_sc(uVar7,iVar13);
uVar7 = sobj_strdup(iVar13);
*(undefined4 *)(param_2 + 0x20) = uVar7;
sobj_del(iVar13);
piVar16 = (int *)0x0;
goto LAB_004070cc;
}
if (!bVar1) {
sobj_eat_indent(iVar2);
iVar5 = sobj_get_length(iVar2);
if (iVar5 != 0) {
iVar5 = sobj_new();
if (iVar5 == 0) {
local_3c = 0xffffffff;
}
else {
uVar7 = sobj_get_string(iVar2);
sobj_unescape_xml_sc(uVar7,iVar5);
uVar7 = sobj_strdup(iVar5);
*(undefined4 *)(param_2 + 0x20) = uVar7;
sobj_del(iVar5);
}
}
bVar1 = true;
}
pcVar6 = (char *)sobj_get_string(iVar13);
if (pcVar6 != (char *)0x0) {
if (piVar15 == (int *)0x0) {
piVar15 = *(int **)(param_2 + 8);
}
else {
piVar15 = (int *)*piVar15;
}
for (; piVar15 != (int *)(param_2 + 8); piVar15 = (int *)*piVar15) {
iVar5 = strcmp((char *)piVar15[7],pcVar6);
if (iVar5 == 0) {
piVar16 = (int *)0x0;
goto LAB_00406dec;
}
}
}
if ((param_3 != 0) && (iVar5 = sobj_strcmp(iVar13,param_3), iVar5 != 0))
goto LAB_004070b8;
piVar16 = (int *)FUN_00404fb0();
piVar15 = piVar16;
if (piVar16 != (int *)0x0) {
LAB_00406dec:
if ((void *)piVar15[8] != (void *)0x0) {
free((void *)piVar15[8]);
}
while (piVar17 = (int *)piVar15[4], piVar17 != piVar15 + 4) {
piVar14 = (int *)piVar17[1];
iVar5 = *piVar17;
*piVar14 = iVar5;
*(int **)(iVar5 + 4) = piVar14;
*piVar17 = 0;
piVar17[1] = 0;
FUN_0040486c(piVar17);
}
piVar15[8] = 0;
if (piVar16 != (int *)0x0) {
iVar13 = sobj_strdup(iVar13);
piVar16[7] = iVar13;
}
if ((param_4 & 1) != 0) {
solist_get_reset(iVar4);
iVar13 = solist_get_next(iVar4);
if (iVar13 != 0) {
while (((((iVar13 = solist_get_next(iVar4), iVar13 != 0 &&
(iVar5 = solist_get_next(iVar4), iVar5 != 0)) &&
(iVar8 = solist_get_next(iVar4), iVar8 != 0)) &&
((iVar9 = sobj_get_string(iVar5), iVar9 != 0 &&
(iVar9 = sobj_get_string(iVar13), iVar9 != 0)))) &&
(iVar9 = sobj_get_string(iVar8), iVar9 != 0))) {
pcVar6 = (char *)sobj_get_string(iVar5);
iVar5 = strcmp(pcVar6,"=");
if (iVar5 != 0) break;
uVar7 = sobj_get_string(iVar13);
uVar10 = sobj_get_string(iVar8);
puVar11 = (undefined4 *)FUN_00404d94(uVar7,uVar10);
if (puVar11 == (undefined4 *)0x0) break;
puVar12 = (undefined4 *)piVar15[5];
*puVar11 = piVar17;
piVar15[5] = (int)puVar11;
*puVar12 = puVar11;
puVar11[1] = puVar12;
}
}
}
solist_get_reset(iVar4);
uVar7 = solist_get_prev(iVar4);
pcVar6 = (char *)sobj_get_string(uVar7);
iVar13 = strcmp(pcVar6,"/");
if ((iVar13 == 0) || (iVar13 = FUN_00406970(param_1,piVar15,0,param_4), -1 < iVar13))
{
if (piVar16 != (int *)0x0) {
puVar11 = *(undefined4 **)(param_2 + 0xc);
*(int **)(param_2 + 0xc) = piVar16;
*piVar16 = param_2 + 8;
piVar16[1] = (int)puVar11;
*puVar11 = piVar16;
piVar16[6] = param_2;
piVar15 = piVar16;
}
goto LAB_0040708c;
}
}
local_3c = 0xffffffff;
goto LAB_004070cc;
}
}
else {
sobj_add_char(iVar2);
}
goto LAB_0040708c;
}
piVar16 = (int *)0x0;
}
LAB_004070cc:
sobj_del(iVar2);
}
if (iVar3 != 0) {
sobj_del(iVar3);
}
if (piVar16 != (int *)0x0) {
FUN_00404900(piVar16);
}
if (iVar4 != 0) {
solist_del(iVar4);
}
return local_3c;
}