void FUN_00412b00(undefined4 *param_1)

{
  int *piVar1;
  void *pvVar2;
  
  if (param_1 != (undefined4 *)0x0) {
    do {
      pvVar2 = (void *)*param_1;
      free((void *)param_1[1]);
      if (param_1[6] != 0) {
        for (piVar1 = (int *)param_1[4]; piVar1 != (int *)0x0; piVar1 = (int *)*piVar1) {
          while (piVar1[2] != 5) {
            piVar1 = (int *)*piVar1;
            if (piVar1 == (int *)0x0) goto LAB_00412bac;
          }
          release_segment_prefix(param_1[6],piVar1 + 3);
        }
      }
LAB_00412bac:
      dhcp6_clear_list(param_1 + 4);
      dhcp6_clear_list(param_1 + 7);
      if ((void *)param_1[3] != (void *)0x0) {
        free((void *)param_1[3]);
      }
      if ((void *)param_1[9] != (void *)0x0) {
        free((void *)param_1[9]);
      }
      free(param_1);
      param_1 = (undefined4 *)pvVar2;
    } while (pvVar2 != (void *)0x0);
  }
  return;
}