undefined4 ip6tc_commit(int *param_1)

{
  ushort uVar1;
  char *__dest;
  void *pvVar2;
  size_t __size;
  char *__dest_00;
  int iVar3;
  int iVar4;
  uint *puVar5;
  char *pcVar6;
  int iVar7;
  int *__src;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int *piVar12;
  int *piVar13;
  int *piVar14;
  int iVar15;
  
  iptc_fn = ip6tc_commit;
  if (param_1[1] == 0) {
    iptc_fn = ip6tc_commit;
    return 1;
  }
  iVar3 = 0;
  iVar7 = 0;
  for (piVar14 = (int *)param_1[2]; iVar15 = iVar3 + 1, piVar14 != param_1 + 2;
      piVar14 = (int *)*piVar14) {
    piVar14[0x18] = iVar7;
    if (piVar14[10] == 0) {
      iVar7 = iVar7 + 0xe8;
      iVar3 = iVar3 + 1;
    }
    iVar15 = iVar3;
    for (piVar13 = (int *)piVar14[0x15]; iVar3 = iVar15 + 1, piVar13 != piVar14 + 0x15;
        piVar13 = (int *)*piVar13) {
      piVar13[5] = iVar15;
      piVar13[6] = iVar7;
      iVar7 = iVar7 + piVar13[9];
      iVar15 = iVar3;
    }
    piVar14[0x19] = iVar15;
    piVar14[0x1a] = iVar7;
    iVar7 = iVar7 + 0xd0;
  }
  if (-1 < iVar15) {
    __dest = (char *)malloc(iVar7 + 0x148U)   //possible issue identified - semgrep
    if (__dest != (char *)0x0) {
      memset(__dest,0,iVar7 + 0x148U)   //possible issue identified - semgrep
      pvVar2 = malloc(param_1[0x1d] << 4)   //possible issue identified - semgrep
      *(void **)(__dest + 0x58) = pvVar2;
      if (pvVar2 == (void *)0x0) {
        piVar14 = __errno_location();
        *piVar14 = 0xc;
      }
      else {
        __size = iVar15 * 0x10 + 0x28   //possible issue identified - semgrep
        __dest_00 = (char *)malloc(__size)   //possible issue identified - semgrep
        if (__dest_00 == (char *)0x0) {
          piVar14 = __errno_location();
          *piVar14 = 0xc;
        }
        else {
          memset(__dest_00,0,__size);
          strcpy(__dest,(char *)(param_1 + 10))   //possible issue identified - semgrep
          iVar3 = param_1[0x1d];
          iVar4 = param_1[0x12];
          *(int *)(__dest + 0x28) = iVar7 + 0xe8;
          *(int *)(__dest + 0x54) = iVar3;
          *(int *)(__dest + 0x20) = iVar4;
          *(int *)(__dest + 0x24) = iVar15;
          for (piVar13 = (int *)param_1[2]; piVar13 != piVar14; piVar13 = (int *)*piVar13) {
            iVar3 = piVar13[0x18];
            if (piVar13[10] == 0) {
              (__dest + iVar3 + 0xee)[0] = -0x18;
              (__dest + iVar3 + 0xee)[1] = '\0';
              (__dest + iVar3 + 0xec)[0] = -0x58;
              (__dest + iVar3 + 0xec)[1] = '\0';
              strcpy(__dest + iVar3 + 0x10a,(char *)0x54a0)   //possible issue identified - semgrep
              (__dest + iVar3 + 0x108)[0] = '@';
              (__dest + iVar3 + 0x108)[1] = '\0';
              strcpy(__dest + iVar3 + 0x128,(char *)(piVar13 + 2))   //possible issue identified - semgrep
            }
            else {
              *(int *)(__dest + (piVar13[10] + 9) * 4 + 4) = iVar3;
              *(int *)(__dest + (piVar13[10] + 0xf) * 4) = piVar13[0x1a];
            }
            for (piVar12 = (int *)piVar13[0x15]; piVar12 != piVar13 + 0x15;
                piVar12 = (int *)*piVar12) {
              if (piVar12[7] == 3) {
                uVar1 = *(ushort *)(piVar12 + 0x2d);
                pcVar6 = (char *)((int)piVar12 + uVar1 + 0x2a);
                memset(pcVar6,0,0x1e)   //possible issue identified - semgrep
                strcpy(pcVar6,(char *)0x5610)   //possible issue identified - semgrep
                *(int *)((int)piVar12 + uVar1 + 0x48) = *(int *)(piVar12[8] + 0x60) + 0xe8;
              }
              else if (piVar12[7] == 2) {
                *(int *)((int)piVar12 + *(ushort *)(piVar12 + 0x2d) + 0x48) =
                     piVar12[9] + piVar12[6];
              }
              memcpy(__dest + piVar12[6] + 0x60,piVar12 + 10,piVar12[9])   //possible issue identified - semgrep
            }
            iVar3 = piVar13[0x1a];
            (__dest + iVar3 + 0xee)[0] = -0x30;
            (__dest + iVar3 + 0xee)[1] = '\0';
            (__dest + iVar3 + 0xec)[0] = -0x58;
            (__dest + iVar3 + 0xec)[1] = '\0';
            strcpy(__dest + iVar3 + 0x10a,(char *)0x5610)   //possible issue identified - semgrep
            (__dest + iVar3 + 0x108)[0] = '(';
            (__dest + iVar3 + 0x108)[1] = '\0';
            if (piVar13[10] == 0) {
              pcVar6 = __dest + iVar3 + 0x128;
              pcVar6[0] = -5;
              pcVar6[1] = -1;
              pcVar6[2] = -1;
              pcVar6[3] = -1;
            }
            else {
              *(int *)(__dest + iVar3 + 0x128) = piVar13[0xc];
            }
            memcpy(__dest + iVar3 + 0xf8,piVar13 + 0xe,0x10)   //possible issue identified - semgrep
          }
          iVar3 = *(int *)(__dest + 0x28);
          (__dest + iVar3 + 4)[0] = -0x58;
          (__dest + iVar3 + 4)[1] = '\0';
          (__dest + iVar3 + 6)[0] = -0x18;
          (__dest + iVar3 + 6)[1] = '\0';
          (__dest + iVar3 + 0x20)[0] = '@';
          (__dest + iVar3 + 0x20)[1] = '\0';
          strcpy(__dest + iVar3 + 0x22,(char *)0x54a0)   //possible issue identified - semgrep
          strcpy(__dest + iVar3 + 0x40,(char *)0x54a0)   //possible issue identified - semgrep
          iVar3 = setsockopt(*param_1,0x29,0x40,__dest,*(int *)(__dest + 0x28) + 0x60);
          if (-1 < iVar3) {
            strcpy(__dest_00,(char *)(param_1 + 10))   //possible issue identified - semgrep
            *(int *)(__dest_00 + 0x20) = iVar15;
            for (piVar14 = (int *)param_1[2]; piVar14 != piVar13; piVar14 = (int *)*piVar14) {
              if (piVar14[10] == 0) goto LAB_00011c3c;
              iVar3 = piVar14[0x12];
              if (iVar3 == 1) {
                piVar12 = (int *)(*(int *)(__dest + 0x58) + piVar14[0x13] * 0x10);
                pcVar6 = __dest_00 + piVar14[0x19] * 0x10 + 0x28;
LAB_00011c30:
                memcpy(pcVar6,piVar12,0x10)   //possible issue identified - semgrep
              }
              else {
                if (iVar3 == 0) {
                  pcVar6 = __dest_00 + piVar14[0x19] * 0x10 + 0x28;
                  piVar12 = (int *)0x59f0;
                  goto LAB_00011c30;
                }
                if (iVar3 == 2) {
                  puVar5 = (uint *)(*(int *)(__dest + 0x58) + piVar14[0x13] * 0x10);
                  uVar9 = puVar5[2];
                  iVar3 = piVar14[0x19];
                  iVar7 = piVar14[0x11];
                  uVar8 = puVar5[3];
                  uVar10 = *puVar5 - piVar14[0xe];
                  uVar11 = uVar9 - piVar14[0x10];
                  *(uint *)(__dest_00 + iVar3 * 0x10 + 0x2c) =
                       (puVar5[1] - piVar14[0xf]) - (uint)(*puVar5 < uVar10);
                  *(uint *)((int)(__dest_00 + (iVar3 + 3) * 0x10) + 4) =
                       (uVar8 - iVar7) - (uint)(uVar9 < uVar11);
                  *(uint *)(__dest_00 + iVar3 * 0x10 + 0x28) = uVar10;
                  *(uint *)(__dest_00 + (iVar3 + 3) * 0x10) = uVar11;
                }
                else {
                  piVar12 = piVar14 + 0xe;
                  if (iVar3 == 3) {
                    pcVar6 = __dest_00 + piVar14[0x19] * 0x10 + 0x28;
                    goto LAB_00011c30;
                  }
                }
              }
LAB_00011c3c:
              for (piVar12 = (int *)piVar14[0x15]; piVar12 != piVar14 + 0x15;
                  piVar12 = (int *)*piVar12) {
                iVar3 = piVar12[3];
                if (iVar3 == 1) {
                  __src = (int *)(*(int *)(__dest + 0x58) + piVar12[4] * 0x10);
                  pcVar6 = __dest_00 + piVar12[5] * 0x10 + 0x28;
LAB_00011d50:
                  memcpy(pcVar6,__src,0x10)   //possible issue identified - semgrep
                }
                else {
                  if (iVar3 == 0) {
                    pcVar6 = __dest_00 + piVar12[5] * 0x10 + 0x28;
                    __src = (int *)0x59f0;
                    goto LAB_00011d50;
                  }
                  if (iVar3 == 2) {
                    puVar5 = (uint *)(*(int *)(__dest + 0x58) + piVar12[4] * 0x10);
                    uVar9 = puVar5[2];
                    iVar3 = piVar12[5];
                    iVar7 = piVar12[0x33];
                    uVar8 = puVar5[3];
                    uVar10 = *puVar5 - piVar12[0x30];
                    uVar11 = uVar9 - piVar12[0x32];
                    *(uint *)(__dest_00 + iVar3 * 0x10 + 0x2c) =
                         (puVar5[1] - piVar12[0x31]) - (uint)(*puVar5 < uVar10);
                    *(uint *)((int)(__dest_00 + (iVar3 + 3) * 0x10) + 4) =
                         (uVar8 - iVar7) - (uint)(uVar9 < uVar11);
                    *(uint *)(__dest_00 + iVar3 * 0x10 + 0x28) = uVar10;
                    *(uint *)(__dest_00 + (iVar3 + 3) * 0x10) = uVar11;
                  }
                  else {
                    __src = piVar12 + 0x30;
                    if (iVar3 == 3) {
                      pcVar6 = __dest_00 + piVar12[5] * 0x10 + 0x28;
                      goto LAB_00011d50;
                    }
                  }
                }
              }
            }
            iVar3 = setsockopt(*param_1,0x29,0x41,__dest_00,__size)   //possible issue identified - semgrep
            if (-1 < iVar3) {
              free(*(void **)(__dest + 0x58));
              free(__dest);
              free(__dest_00);
              return 1;
            }
          }
          free(__dest_00);
        }
        free(*(void **)(__dest + 0x58));
      }
      free(__dest);
      return 0;
    }
  }
  piVar14 = __errno_location();
  *piVar14 = 0xc;
  return 0;
}