int FUN_00408f6c(undefined1 param_1,undefined1 *param_2,undefined1 *param_3,undefined4 param_4,
                int param_5)

{
  undefined1 *puVar1;
  undefined1 uVar2;
  bool bVar3;
  ushort uVar4;
  uint uVar5;
  int iVar6;
  undefined1 *__src;
  undefined1 *puVar7;
  undefined1 *puVar8;
  
  if (param_5 == 1) {
    *param_3 = param_1;
    param_3[1] = 0;
    iVar6 = 2;
  }
  else {
    uVar2 = *param_2;
    param_3[5] = 1;
    param_3[2] = uVar2;
    param_3[3] = 0;
    param_3[4] = 0;
    puVar7 = param_3 + 7;
    param_3[6] = param_2[1];
    puVar8 = *(undefined1 **)(param_2 + 0xc);
    iVar6 = 0;
    while( true ) {
      bVar3 = *(int *)(param_2 + 8) <= iVar6;
      __src = puVar8 + 4;
      iVar6 = iVar6 + 1;
      if (bVar3) break;
      *puVar7 = 1;
      puVar7[1] = 10;
      puVar7[2] = *puVar8;
      puVar7[3] = puVar8[1];
      puVar7[4] = puVar8[2];
      puVar1 = puVar8 + 3;
      puVar8 = puVar8 + 10;
      puVar7[5] = *puVar1;
      memcpy(puVar7 + 6,__src,6)   //possible issue identified - semgrep
      puVar7 = puVar7 + 0xc;
    }
    puVar7[1] = 4;
    *puVar7 = 2;
    memcpy(puVar7 + 2,param_2 + 4,4)   //possible issue identified - semgrep
    iVar6 = (int)(puVar7 + 6) - (int)param_3;
    uVar5 = iVar6 - 2U & 0xffff;
    g_short_reorder_buffer._0_1_ = (undefined1)(uVar5 >> 8);
    uVar4 = (ushort)(uVar5 << 8) | (ushort)(uVar5 >> 8);
    *param_3 = (undefined1)g_short_reorder_buffer;
    g_short_reorder_buffer = uVar4;
    param_3[1] = g_short_reorder_buffer._1_1_;
  }
  return iVar6;
}