short APBuildAssociation(int param_1,int param_2,uint param_3,byte param_4,void *param_5,   //possible issue identified - semgrep
                        byte *param_6,byte param_7,uint param_8,byte param_9,byte *param_10,
                        char *param_11,short *param_12)

{
  byte bVar1;
  undefined1 uVar2;
  short sVar3;
  code *pcVar4;
  int iVar5;
  char cVar6;
  uint uVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  undefined1 local_38 [4];
  int local_34;
  uint local_30;
  uint local_2c;
  
  local_2c = (uint)param_7;
  local_30 = param_3 & 0xffff;
  uVar10 = 6;
  if (param_4 != 0x18) {
    if (param_4 < 0x19) {
      uVar10 = 2;
      if (param_4 != 0xb) {
        if (param_4 < 0xc) {
          uVar10 = 0;
          if (param_4 != 2) {
            uVar10 = 1;
            bVar1 = 4;
LAB_0006c148:
            if (param_4 != bVar1) {
              uVar10 = 3;
            }
          }
        }
        else {
          uVar10 = 4;
          if (param_4 != 0xc) {
            uVar10 = 5;
            bVar1 = 0x12;
            goto LAB_0006c148;
          }
        }
      }
    }
    else {
      uVar10 = 9;
      if (param_4 != 0x48) {
        if (param_4 < 0x49) {
          uVar10 = 7;
          if (param_4 != 0x24) {
            uVar10 = 8;
            bVar1 = 0x30;
            goto LAB_0006c148;
          }
        }
        else {
          uVar10 = 10;
          if (param_4 != 0x60) {
            uVar10 = 0xb;
            bVar1 = 0x6c;
            goto LAB_0006c148;
          }
        }
      }
    }
  }
  cVar6 = *(char *)(param_1 + 0x16982)   //possible issue identified - semgrep
  if (((cVar6 == '\x04') || (cVar6 == '\a')) && (uVar10 < 4)) {
    return 0x12;
  }
  if (((cVar6 == '\x06') || (cVar6 == '\v')) && (*param_11 == '\0')) {
    return 0x12;
  }
  if (param_2 == 0) {
    return 1;
  }
  if (1 < *(int *)(param_2 + 0x274) - 1U) {
    return 0x11;
  }
  *param_12 = *(short *)(param_2 + 0x27e);
  *(undefined4 *)(param_2 + 0x284) = 0;
  *(undefined4 *)(param_2 + 0x29c) = 0;
  sVar3 = APValidateRSNIE(param_1,param_2,param_5,*param_6)   //possible issue identified - semgrep
  if (sVar3 != 0) {
    return sVar3;
  }
  memmove((void *)(param_2 + 0x33),param_5,(uint)*param_6)   //possible issue identified - semgrep
  bVar1 = *param_6;
  *(byte *)(param_2 + 0x32) = bVar1;
  if (*param_12 == 0) {
    return 0x11;
  }
  if ((bVar1 == 0) && (2 < *(uint *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x51dc)))
  {
    *(undefined4 *)(param_2 + 0x274) = 2;
    goto LAB_0006cb4c;
  }
  *(undefined4 *)(param_2 + 0x274) = 2;
  if (*(byte *)(param_1 + 0x16a49) < uVar10) {
    uVar10 = (uint)*(byte *)(param_1 + 0x16a49);
  }
  *(char *)(param_2 + 0x34c) = (char)uVar10;
  uVar7 = *(uint *)(param_2 + 0x418);
  uVar9 = *(uint *)(param_2 + 0x41c);
  if (uVar10 < 4) {
    *(uint *)(param_2 + 0x41c) = uVar9 & 0xffff3f80 | uVar10 & 0x7f;
    *(uint *)(param_2 + 0x418) = uVar7 & 0x3f803f80 | (uVar10 & 0x7f) << 0x10 | uVar10 & 0x7f;
  }
  else {
    *(uint *)(param_2 + 0x418) = uVar7 & 0x3fffffff | 0x40000000;
    pbVar8 = &OfdmRateToRxwiMCS + *(byte *)(param_2 + 0x34c);
    uVar10 = (*pbVar8 & 0x7f) << 0x10;
    *(uint *)(param_2 + 0x418) = uVar7 & 0x3f80ffff | 0x40000000 | uVar10;
    *(uint *)(param_2 + 0x41c) = uVar9 & 0xffff3fff | 0x4000;
    bVar1 = *pbVar8;
    *(uint *)(param_2 + 0x418) = uVar7 & 0x3f803fff | 0x40000000 | uVar10 | 0x4000;
    *(uint *)(param_2 + 0x41c) = uVar9 & 0xffff3f80 | 0x4000 | bVar1 & 0x7f;
    *(uint *)(param_2 + 0x418) = uVar7 & 0x3f803f80 | 0x40000000 | uVar10 | 0x4000 | *pbVar8 & 0x7f;
  }
  iVar5 = *(int *)(param_2 + 0x1e4);
  *(short *)(param_2 + 0x280) = (short)local_30;
  if ((iVar5 == 4) || (iVar5 == 7)) {
    *(undefined4 *)(param_2 + 500) = 1;
    uVar2 = 7;
LAB_0006c374:
    *(undefined1 *)(param_2 + 0x1f0) = uVar2;
  }
  else if (((iVar5 == 3) || (iVar5 == 6)) ||
          (*(char *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x52b5) == '\x01')) {
    *(undefined4 *)(param_2 + 500) = 1;
    uVar2 = 4;
    goto LAB_0006c374;
  }
  if (param_8 == 0) {
    uVar10 = *(uint *)(param_2 + 0x414) & 0xffefffff;
  }
  else {
    uVar10 = *(uint *)(param_2 + 0x414) | 0x100000;
  }
  *(uint *)(param_2 + 0x414) = uVar10;
  uVar10 = *(uint *)(param_2 + 0x414) & 0xfffffff9;
  *(uint *)(param_2 + 0x414) = uVar10;
  if (((*(char *)(param_1 + 0x16a7e) != '\0') && ((param_8 & 1) != 0)) &&
     (*(uint *)(param_2 + 0x414) = uVar10 | 2, 2 < RTDebugLevel)) {
    printk("ASSOC -RaAggregate= 1\n");
  }
  if (*(char *)(param_1 + 0x16a7f) == '\0') {
    uVar10 = *(uint *)(param_2 + 0x1e4);
  }
  else if ((param_8 & 2) == 0) {
    uVar10 = *(uint *)(param_2 + 0x1e4);
  }
  else {
    *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 4;
    if (RTDebugLevel < 3) {
      uVar10 = *(uint *)(param_2 + 0x1e4);
    }
    else {
      printk("ASSOC -PiggyBack= 1\n");
      uVar10 = *(uint *)(param_2 + 0x1e4);
    }
  }
  if ((uVar10 < 3) &&
     (*(char *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x52b5) != '\x01')) {
    *(undefined2 *)(param_2 + 0x1f2) = 1;
  }
  else {
    *(undefined2 *)(param_2 + 0x1f2) = 2;
  }
  if (*(char *)(param_1 + 0x16e7a) == '\0') {
LAB_0006c4f0:
    cVar6 = *param_11;
  }
  else {
    if ((*(int *)(param_2 + 0x1e8) == 0) || (*(int *)(param_2 + 0x1e8) == 4)) {
      *param_11 = '\0';
      if (2 < RTDebugLevel) {
        printk("%s : Force the STA as legacy mode(None-HT)\n","APBuildAssociation");
      }
      goto LAB_0006c4f0;
    }
    cVar6 = *param_11;
  }
  if (((cVar6 == '\0') ||
      (*(char *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x520a) == '\0')) ||
     (*(byte *)(param_1 + 0x16982) < 5)) {
    *(undefined1 *)(param_1 + 0x71350) = 1;
    param_10 = (byte *)0x0;
    pcVar4 = memset;
  }
  else {
    if ((*param_10 & 0x10) == 0) {
      uVar10 = *(uint *)(param_2 + 0x418);
LAB_0006c560:
      *(uint *)(param_2 + 0x418) = uVar10 & 0x3fffffff | 0x80000000;
      *(undefined1 *)(param_1 + 0x71351) = 1;
      *(uint *)(param_1 + 0x16b18) = *(uint *)(param_1 + 0x16b18) & 0xfffbffff | 0x40000;
    }
    else {
      if (-1 < *(int *)(RTMPCheckRates + param_1) << 0xc) {
        uVar10 = *(uint *)(param_2 + 0x418);
        goto LAB_0006c560;
      }
      *(uint *)(param_2 + 0x418) = *(uint *)(param_2 + 0x418) & 0x3fffffff | 0xc0000000;
    }
    if ((param_9 & 1) == 0) {
      bVar1 = param_10[1];
    }
    else {
      *(undefined1 *)(param_2 + 0x474) = 1;
      bVar1 = param_10[1];
    }
    if ((bVar1 & 0x40) == 0) {
      bVar1 = *param_10;
    }
    else {
      *(undefined1 *)(param_2 + 0x475) = 1;
      *(undefined1 *)(param_1 + 0x71355) = 1;
      if (((*(int *)(param_1 + 0x16afc) << 0xe < 0) && (*(byte *)(param_1 + 0x169ec) < 0xf)) &&
         ((*(char *)(param_1 + 0x16b30) == '\x01' &&
          ((uVar10 = *(uint *)(param_1 + 0x16b18), (uVar10 & 0x400) != 0 && ((uVar10 & 0x300) != 0))
          )))) {
        *(byte *)(param_1 + 0x16b33) = *(byte *)(param_1 + 0x16b33) | 2;
        *(uint *)(param_1 + 0x16b74) = *(uint *)(param_1 + 0x16b74) & 0xfffffffb | 4;
        *(uint *)(param_1 + 0x16b18) = uVar10 & 0xfffff8ff;
      }
      if (2 < RTDebugLevel) {
        printk("pEntry set 40MHz Intolerant as 1\n");
      }
      Handle_BSS_Width_Trigger_Events(param_1);
      bVar1 = *param_10;
    }
    if ((bVar1 & 2) == 0) {
      uVar10 = *(uint *)(param_2 + 0x418);
LAB_0006c6fc:
      *(uint *)(param_2 + 0x418) = uVar10 & 0xff7fffff;
      *(uint *)(param_2 + 0x418) =
           uVar10 & 0xfe7fffff |
           (((uint)*param_10 << 0x1a & *(int *)(RTMPCheckRates + param_1) << 0xb) >> 0x1f) << 0x18;
      *(undefined1 *)(param_1 + 0x71352) = 1;
    }
    else {
      if ((*(uint *)(RTMPCheckRates + param_1) & 0x10000) == 0) {
        uVar10 = *(uint *)(param_2 + 0x418);
        goto LAB_0006c6fc;
      }
      uVar10 = *(uint *)(param_2 + 0x418);
      *(uint *)(param_2 + 0x418) = uVar10 & 0xff7fffff | 0x800000;
      *(uint *)(param_2 + 0x418) =
           uVar10 & 0xfe7fffff | 0x800000 |
           (((uint)*param_10 << 0x19 & *(int *)(RTMPCheckRates + param_1) << 10) >> 0x1f) << 0x18;
    }
    iVar5 = 0x17;
    cVar6 = '\x17';
    do {
      uVar9 = (uint)cVar6;
      uVar10 = (uVar9 << 0x15) >> 0x18;
      uVar7 = 1 << (uVar10 * -8 + iVar5 & 0x1f) & 0xff;
      iVar5 = iVar5 + -1;
      if (((uVar7 & *(byte *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + uVar10 + 0x520c))
           != 0) && ((uVar7 & param_10[uVar10 + 3]) != 0)) {
        *(uint *)(param_2 + 0x418) =
             *(uint *)(param_2 + 0x418) & 0xff80ffff | (uVar9 & 0x7f) << 0x10;
        break;
      }
      if (uVar9 == 0) {
        bVar1 = *(byte *)(param_2 + 0x31);
        goto LAB_0006c7a0;
      }
      cVar6 = (char)iVar5   //possible issue identified - semgrep
    } while (iVar5 != -1);
    bVar1 = *(byte *)(param_2 + 0x31);
LAB_0006c7a0:
    if ((*(uint *)((uint)bVar1 * 0x1140 + param_1 + 0x521c) & 0x7f) != 0x21) {
      if (RTDebugLevel < 3) {
        bVar1 = *(byte *)(param_2 + 0x31);
      }
      else {
        printk("@@@ IF-ra%d DesiredTransmitSetting.field.MCS = %d\n");
        bVar1 = *(byte *)(param_2 + 0x31);
      }
      iVar5 = (uint)bVar1 * 0x1140 + param_1;
      uVar10 = *(uint *)(param_2 + 0x418);
      if ((*(uint *)(iVar5 + 0x521c) & 0x7f) == 0x20) {
        uVar10 = uVar10 & 0x3800ffff | 0x80a00000;
      }
      else {
        uVar7 = *(uint *)(iVar5 + 0x5204) & 0x7f;
        if ((uVar10 << 9) >> 0x19 <= uVar7) goto LAB_0006c854;
        uVar10 = uVar10 & 0xff80ffff | uVar7 << 0x10;
      }
      *(uint *)(param_2 + 0x418) = uVar10;
    }
LAB_0006c854:
    *(uint *)(param_2 + 0x418) =
         *(uint *)(param_2 + 0x418) & 0xf9ffffff |
         ((uint)param_10[1] & (uint)(*(int *)(RTMPCheckRates + param_1) << 9) >> 0x1f) << 0x19;
    if (((uint)param_10[2] << 0x1b) >> 0x1d < 5) {
      *(undefined1 *)(param_2 + 0x456) = 5;
    }
    else {
      *(byte *)(param_2 + 0x456) = (byte)(((uint)param_10[2] << 0x1b) >> 0x1d);
    }
    *(byte *)(param_2 + 0x457) = (byte)(((uint)param_10[2] << 0x1e) >> 0x1e);
    *(byte *)(param_2 + 0x459) = (byte)(((uint)*param_10 << 0x1c) >> 0x1e);
    bVar1 = param_10[1];
    *(undefined2 *)(param_2 + 0x418) = *(undefined2 *)(param_2 + 0x41a);
    *(byte *)(param_2 + 0x458) = (byte)(((uint)bVar1 << 0x1c) >> 0x1f);
    if (*(int *)(RTMPCheckRates + param_1) << 6 < 0) {
      if ((*(uint *)(param_1 + 0x16a68) & 0x10000) == 0) {
        *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 8;
        bVar1 = *param_10;
      }
      else {
        bVar1 = *param_10;
      }
    }
    else {
      bVar1 = *param_10;
    }
    if ((bVar1 & 0x20) == 0) {
      bVar1 = *param_10;
    }
    else {
      *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x10;
      bVar1 = *param_10;
    }
    if ((bVar1 & 0x40) == 0) {
      bVar1 = *param_10;
    }
    else {
      *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x20;
      bVar1 = *param_10;
    }
    if ((bVar1 & 0x80) == 0) {
      bVar1 = param_10[1];
    }
    else {
      *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x40;
      bVar1 = param_10[1];
    }
    if ((bVar1 & 3) == 0) {
      bVar1 = param_10[0x14];
    }
    else {
      *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x80;
      bVar1 = param_10[0x14];
    }
    if ((bVar1 & 4) != 0) {
      *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x100;
    }
    bVar1 = param_10[0x14];
    if (*(char *)(param_1 + 0x16a88) != '\0') {
      if ((bVar1 & 8) == 0) {
        bVar1 = param_10[0x14];
      }
      else {
        *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x200;
        bVar1 = param_10[0x14];
      }
    }
    if ((bVar1 & 3) == 3) {
      *(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x400;
    }
    pcVar4 = memmove;
  }
  (*pcVar4)(param_2 + 0x45a,param_10,0x1a);
  *(undefined1 *)(param_2 + 0x359) = 1;
  iVar5 = (uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1;
  *(undefined2 *)(param_2 + 0x418) = *(undefined2 *)(param_2 + 0x41a);
  *(undefined1 *)(param_2 + 0x34d) = *(undefined1 *)(param_2 + 0x34c);
  *(undefined1 *)(param_2 + 0x350) = 0;
  *(undefined1 *)(param_2 + 0x351) = 0;
  *(undefined1 *)(param_2 + 0x358) = 0;
  *(undefined1 *)(param_2 + 0x35a) = 0;
  *(undefined1 *)(param_2 + 0x35b) = 0;
  *(undefined1 *)(param_2 + 0x35c) = 0;
  *(undefined1 *)(param_2 + 0x35d) = 0;
  *(undefined1 *)(param_2 + 0x35e) = 0;
  *(undefined1 *)(param_2 + 0x361) = 0;
  *(undefined1 *)(param_2 + 0x362) = 0;
  *(undefined1 *)(param_2 + 0x38c) = 0;
  if (*(char *)(iVar5 + 0x521e) == '\x01') {
    local_38[0] = 0;
    APMlmeSelectTxRateTable(param_1,param_2,&local_34,local_38,param_2 + 0x34e);
    APMlmeSetTxRate(param_1,param_2,(*(byte *)(param_2 + 0x34e) + 1) * 5 + local_34);
    *(undefined1 *)(param_2 + 0x476) = 1;
    *(uint *)(param_2 + 0x418) = *(uint *)(param_2 + 0x418) & 0xfffffeff;
  }
  else {
    uVar10 = *(uint *)(iVar5 + 0x5204);
    *(undefined1 *)(param_2 + 0x476) = 0;
    *(uint *)(param_2 + 0x418) = *(uint *)(param_2 + 0x418) & 0xffffff80 | uVar10 & 0x7f;
    RTMPUpdateLegacyTxSetting((uint)(*(int *)(iVar5 + 0x521c) << 0x13) >> 0x1e,param_2);
  }
  if (*(uint *)(param_2 + 0x1e4) < 3) {
    ApLogEvent(param_1,param_2 + 600,1);
  }
  APUpdateCapabilityAndErpIe(param_1);
  APUpdateOperationMode(param_1);
  *(undefined1 *)(param_2 + 0x1ba) = 0;
LAB_0006cb4c:
  uVar10 = *(uint *)(param_2 + 0x414) | 1;
  if (local_2c == 0) {
    uVar10 = *(uint *)(param_2 + 0x414) & 0xfffffffe;
  }
  *(uint *)(param_2 + 0x414) = uVar10;
  return 0;
}