void FUN_00409248(void *param_1)
{
int *piVar1;
int iVar2;
int *piVar3;
switch(*(undefined4 *)((int)param_1 + 8)) {
case 0:
if (*(void **)((int)param_1 + 0x10) != (void *)0x0) {
free(*(void **)((int)param_1 + 0x10));
}
iVar2 = (int)param_1 + 0x18;
goto LAB_0040939c;
case 1:
while (piVar3 = *(int **)((int)param_1 + 0xc), piVar3 != (int *)((int)param_1 + 0xc)) {
piVar1 = (int *)piVar3[1];
iVar2 = *piVar3;
*piVar1 = iVar2;
*(int **)(iVar2 + 4) = piVar1;
*piVar3 = 0;
piVar3[1] = 0;
FUN_00408e24(piVar3);
}
FUN_00409728((int)param_1 + 0x14);
iVar2 = (int)param_1 + 0x1c;
break;
case 2:
if (*(void **)((int)param_1 + 0xc) != (void *)0x0) {
free(*(void **)((int)param_1 + 0xc));
}
FUN_00407df4((int)param_1 + 0x14);
goto switchD_00409294_default;
case 3:
while( true ) {
piVar3 = *(int **)((int)param_1 + 0xc);
iVar2 = (int)param_1 + 0x14;
if (piVar3 == (int *)((int)param_1 + 0xc)) break;
piVar1 = (int *)piVar3[1];
iVar2 = *piVar3;
*piVar1 = iVar2;
*(int **)(iVar2 + 4) = piVar1;
*piVar3 = 0;
piVar3[1] = 0;
FUN_00408e24(piVar3);
}
break;
case 4:
FUN_00407f28((int)param_1 + 0xc);
iVar2 = (int)param_1 + 0x14;
break;
case 5:
case 6:
iVar2 = (int)param_1 + 0xc;
LAB_0040939c:
FUN_00407f28(iVar2);
default:
goto switchD_00409294_default;
}
FUN_00409728(iVar2);
switchD_00409294_default:
free(param_1);
return;
}