
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int main(int argc,char **argv)

{
  uint8_t uVar1;
  ushort uVar2;
  bool bVar3;
  undefined *puVar4;
  undefined *puVar5;
  undefined *puVar6;
  char cVar7;
  ushort **ppuVar8;
  char *pcVar9;
  char *pcVar10;
  opts_t *poVar11;
  uint uVar12;
  undefined4 uVar13;
  opts_t *op;
  int *piVar14;
  char *pcVar15;
  diag_page_code *pdVar16;
  opts_t *poVar17;
  int iVar18;
  char **extraout_ECX;
  undefined4 extraout_ECX_00;
  undefined4 extraout_ECX_01;
  undefined4 extraout_ECX_02;
  opts_t *extraout_ECX_03;
  char **extraout_ECX_04;
  char **ppcVar19;
  int iVar20;
  opts_t *op_00;
  opts_t *extraout_ECX_05;
  opts_t *extraout_ECX_06;
  opts_t *extraout_ECX_07;
  opts_t *extraout_ECX_08;
  opts_t *extraout_ECX_09;
  undefined4 extraout_ECX_10;
  undefined4 extraout_ECX_11;
  opts_t *extraout_ECX_12;
  undefined4 extraout_ECX_13;
  byte bVar21;
  undefined4 extraout_EDX;
  undefined4 extraout_EDX_00;
  undefined4 extraout_EDX_01;
  undefined4 extraout_EDX_02;
  stat64 *extraout_EDX_03;
  uint extraout_EDX_04;
  undefined4 extraout_EDX_05;
  uint extraout_EDX_06;
  undefined4 extraout_EDX_07;
  undefined4 extraout_EDX_08;
  undefined4 extraout_EDX_09;
  uint extraout_EDX_10;
  undefined4 extraout_EDX_11;
  undefined4 extraout_EDX_12;
  uint extraout_EDX_13;
  undefined4 extraout_EDX_14;
  undefined4 extraout_EDX_15;
  stat64 *extraout_EDX_16;
  undefined4 extraout_EDX_17;
  undefined4 extraout_EDX_18;
  undefined4 extraout_EDX_19;
  undefined4 extraout_EDX_20;
  undefined4 extraout_EDX_21;
  opts_t *poVar22;
  mode_s *pmVar23;
  undefined4 uVar24;
  uint8_t *puVar25;
  opts_t *poVar26;
  undefined4 uVar27;
  uint uVar28;
  opts_t *poVar29;
  _Bool *off_off;
  stat64 *psVar30;
  opts_t *poVar31;
  int in_GS_OFFSET;
  byte bVar32;
  longlong lVar33;
  undefined8 uVar34;
  __off64_t _Var35;
  undefined8 uVar36;
  _Bool last;
  undefined4 uVar37;
  opts_t *poVar38;
  stat64 *psVar39;
  char *local_1f0;
  byte local_1e9;
  int local_1e8;
  stat64 *local_1e0;
  option *local_1dc;
  stat64 *local_1d8;
  stat64 *local_1d4;
  int local_1c4;
  void *local_1c0;
  dout_buff_t local_1bc;
  opts_t local_1b0;
  stat64 local_184;
  stat64 local_124 [2];
  uint local_24;
  int *local_18;
  
  ppcVar19 = argv;
  iVar20 = argc;
  puVar5 = PTR_optarg_00015ffc;
  bVar32 = 0;
  local_18 = &argc;
  local_1d4 = (stat64 *)argv;
  local_24 = *(uint *)(in_GS_OFFSET + 0x14);
  local_1c0 = (void *)0x0;
  local_1bc.doutp = (uint8_t *)0x0;
  local_1bc.free_doutp = (uint8_t *)0x0;
  local_1bc.dout_len = 0;
  local_1f0 = (char *)0x0;
  poVar22 = &local_1b0;
  for (iVar18 = 0xb; iVar18 != 0; iVar18 = iVar18 + -1) {
    poVar22->dry_run = false;
    poVar22->ealsd = false;
    poVar22->mc_non = false;
    poVar22->bpw_then_activate = false;
    poVar22 = (opts_t *)&poVar22->mc_len_given;
  }
  psVar30 = &local_184;
  local_1e8 = 0;
  local_1dc = long_options;
  pcVar15 = "b:dehi:I:l:m:No:s:S:t:vV";
  local_1e9 = 0;
  bVar3 = false;
LAB_00011330:
  do {
    local_184.st_dev._0_4_ = 0;
    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);
    puVar6 = PTR_optarg_00015ffc;
    puVar4 = PTR_optind_00015fe8;
    local_1e0 = (stat64 *)pcVar15;
    local_1d8 = psVar30;
    if (iVar18 == -1) {
      if (local_1e8 != 0) {
        if (local_1e8 == 1) {
          poVar22 = (opts_t *)0x0;
          pr2serr(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
        }
        else {
          poVar22 = (opts_t *)0x0;
          pr2serr(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
          pr2serr("\n");
          print_modes();
        }
        goto LAB_0001160b;
      }
      iVar18 = *(int *)PTR_optind_00015fe8;
      if (iVar18 < iVar20) {
        local_1e0 = (stat64 *)ppcVar19[iVar18];
        iVar18 = iVar18 + 1;
        *(int *)PTR_optind_00015fe8 = iVar18;
        if (iVar20 <= iVar18) goto LAB_000116cd;
        do {
          pcVar9 = ppcVar19[iVar18];
          psVar30 = local_1e0;
          psVar39 = local_1e0;
          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);
          iVar18 = *(int *)puVar4 + 1;
          *(int *)puVar4 = iVar18;
          local_1e0 = extraout_EDX_03;
        } while (iVar18 < iVar20);
        poVar22 = (opts_t *)0x1;
        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                ,pcVar9,psVar30,psVar39);
        local_1e0 = (stat64 *)pcVar15;
        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";
        goto LAB_0001160b;
      }
      local_1e0 = (stat64 *)0x0;
      ppcVar19 = extraout_ECX;
LAB_000116cd:
      if (bVar3) {
        if (local_1e9 != 0) {
          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");
          ppcVar19 = extraout_ECX_04;
LAB_000119bc:
          poVar22 = (opts_t *)0x0;
          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);
          local_1e0 = (stat64 *)pcVar15;
          goto LAB_0001160b;
        }
      }
      else if (local_1e9 != 0) goto LAB_000119bc;
      if (local_1e0 == (stat64 *)0x0) {
        pcVar9 = "missing device name!\n\n";
        goto LAB_000115ef;
      }
      if (local_1b0.mc_mode < 8) {
        if (local_1b0.mc_mode < 6) {
          local_1d4 = (stat64 *)0x0;
          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;
        }
        else {
LAB_00011c5b:
          local_1d4 = (stat64 *)0x1;
        }
      }
      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||
              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {
        local_1d4 = (stat64 *)0x0;
      }
      else {
        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;
LAB_0001171b:
        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);
        local_1d4 = (stat64 *)0x0;
      }
      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {
        pr2serr("trim chunk size (CS) to be the same as LEN\n");
        local_1b0.bpw = local_1b0.mc_len;
      }
      poVar38 = (opts_t *)local_1b0.mc_len;
      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {
        local_1b0.mc_offset = 0;
        poVar38 = (opts_t *)
                  pr2serr(
                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"
                         );
      }
      uVar13 = 0;
      iVar20 = local_1b0.verbose;
      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);
      uVar36 = CONCAT44(iVar20,uVar13);
      if ((int)local_1dc < 0) {
        if (local_1b0.verbose != 0) {
          uVar13 = safe_strerror(-(int)local_1dc);
          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);
          local_1d4 = local_1e0;
        }
        lVar33 = sg_convert_errno(-(int)local_1dc);
        goto LAB_000118e5;
      }
      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);
      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);
      if (bVar21 != 0) {
        pr2serr("ignoring --in=FILE option\n");
        uVar36 = CONCAT44(iVar20,uVar13);
        local_1d8 = (stat64 *)0x0;
        goto LAB_00011a5c;
      }
      if (local_1f0 == (char *)0x0) {
        local_1d8 = (stat64 *)0x0;
        if ((byte)local_1d4 == 0) goto LAB_00011a5c;
        pr2serr("need --in=FILE option with given mode\n");
        lVar33 = CONCAT44(extraout_EDX_09,0x1f);
        goto LAB_000118e5;
      }
      local_1e0 = (stat64 *)strcmp(local_1f0,"-");
      if (local_1e0 == (stat64 *)0x0) {
        uVar28 = 0;
        uVar13 = extraout_ECX_00;
      }
      else {
        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);
        if ((int)uVar28 < 0) {
          piVar14 = __errno_location();
          uVar13 = sg_convert_errno(*piVar14);
          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",
                         local_1f0);
          perror((char *)local_124);
          lVar33 = CONCAT44(extraout_EDX_14,uVar13);
          goto LAB_000118e5;
        }
        iVar20 = sg_set_binary_mode(uVar28);
        uVar13 = extraout_ECX_01;
        if (iVar20 < 0) {
          perror("sg_set_binary_mode");
          uVar13 = extraout_ECX_11;
        }
      }
      uVar12 = uVar28;
      iVar20 = __fxstat64(3,uVar28,psVar30);
      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {
        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {
          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;
          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=
              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=
              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {
            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;
            uVar27 = 1;
            goto LAB_00011e31;
          }
          uVar24 = 0xf;
          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,
                  extraout_EDX);
          uVar13 = extraout_EDX_21;
        }
        else {
          uVar27 = 1;
LAB_00011e31:
          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;
          uVar24 = 0xf;
          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",
                  local_1b0.mc_len,0x8000000,uVar27);
          uVar13 = extraout_EDX_07;
        }
      }
      else {
        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;
        local_1b0.mc_len = 0x800000;
LAB_0001185d:
        poVar22 = (opts_t *)local_1b0.mc_len;
        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);
        if (local_1d8 != (stat64 *)0x0) {
          uVar37 = 0xff;
          uVar13 = extraout_ECX_02;
          memset(local_1d8,0xff,(size_t)poVar22);
          poVar38 = extraout_ECX_03;
          if (local_1b0.mc_skip < 1) {
LAB_00011f46:
            psVar30 = local_1d8;
            poVar11 = (opts_t *)local_1b0.mc_len;
            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);
            if (-1 < (int)poVar22) {
              poVar29 = (opts_t *)local_1b0.mc_len;
              uVar36 = CONCAT44(poVar11,psVar30);
              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;
              if (local_1b0.mc_len_given == false) {
                poVar29 = poVar22;
                uVar36 = CONCAT44(poVar11,psVar30);
                if (local_1b0.verbose == 0) goto LAB_00011f90;
                poVar38 = poVar22;
                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,
                        poVar22);
                poVar11 = poVar22;
                pr2serr("will send %d bytes",poVar22);
                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);
                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;
                pr2serr("\n",poVar11,local_1f0,poVar38);
                uVar36 = CONCAT44(local_1f0,poVar11);
                goto LAB_00011f90;
              }
              poVar11 = (opts_t *)local_1b0.mc_len;
              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,
                      poVar22);
              pr2serr("pad with 0xff bytes and continue\n");
              poVar38 = poVar22;
              poVar29 = (opts_t *)local_1b0.mc_len;
              uVar36 = CONCAT44(local_1f0,poVar11);
              goto LAB_00011f90;
            }
            piVar14 = __errno_location();
            uVar24 = sg_convert_errno(*piVar14);
            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";
          }
          else {
            if ((char)uVar27 == '\0') {
              if (local_1e0 == (stat64 *)0x0) {
                uVar24 = 0xf;
                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);
                goto LAB_000118d4;
              }
              uVar24 = 0xf;
              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,
                      poVar22,uVar13);
              goto LAB_00011e75;
            }
            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);
            poVar38 = extraout_ECX_09;
            if (-1 < _Var35) goto LAB_00011f46;
            piVar14 = __errno_location();
            uVar24 = sg_convert_errno(*piVar14);
            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";
          }
          local_1d4 = local_124;
          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);
          perror((char *)local_1d4);
          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;
          goto LAB_00011e75;
        }
        uVar24 = 99;
        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,
                uVar13);
        uVar13 = extraout_EDX_18;
      }
      lVar33 = CONCAT44(uVar13,uVar24);
      local_1d8 = (stat64 *)0x0;
      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;
LAB_00011e75:
      close(uVar28);
      lVar33 = CONCAT44(extraout_EDX_08,uVar24);
      goto LAB_00011e81;
    }
    switch(iVar18) {
    case 0x3f:
    case 0x68:
      local_1e8 = local_1e8 + 1;
      break;
    default:
      pcVar9 = "unrecognised option code 0x%x ??\n";
LAB_000115ef:
      pr2serr(pcVar9);
      pr2serr(
             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
             );
      goto LAB_00011606;
    case 0x49:
      local_1f0 = *(char **)PTR_optarg_00015ffc;
      break;
    case 0x4e:
      local_1b0.mc_non = true;
      break;
    case 0x53:
      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);
      if (0xff < (uint)local_1b0.mc_subenc) {
        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");
        goto LAB_00011606;
      }
      break;
    case 0x56:
      local_1e9 = 1;
      break;
    case 0x62:
      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);
      if (local_1b0.bpw < 0) {
        pr2serr("argument to \'--bpw\' should be in a positive number\n");
        goto LAB_00011606;
      }
      pcVar9 = strchr(*(char **)puVar6,0x2c);
      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {
        local_1b0.bpw_then_activate = true;
      }
      break;
    case 100:
      local_1b0.dry_run = true;
      break;
    case 0x65:
      local_1b0.ealsd = true;
      break;
    case 0x69:
      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);
      if (0xff < (uint)local_1b0.mc_id) {
        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");
        goto LAB_00011606;
      }
      break;
    case 0x6c:
      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);
      if (local_1b0.mc_len < 0) {
        pr2serr("bad argument to \'--length\'\n");
        goto LAB_00011606;
      }
      local_1b0.mc_len_given = true;
      break;
    case 0x6d:
      ppuVar8 = __ctype_b_loc();
      pcVar9 = *(char **)PTR_optarg_00015ffc;
      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {
        uVar28 = 0xffffffff;
        pcVar10 = pcVar9;
        do {
          if (uVar28 == 0) break;
          uVar28 = uVar28 - 1;
          cVar7 = *pcVar10;
          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;
        } while (cVar7 != '\0');
        if (mode_arr[0].mode_string == (char *)0x0) {
LAB_00011fdc:
          print_modes();
          goto LAB_00011606;
        }
        pmVar23 = mode_arr;
        pcVar10 = mode_arr[0].mode_string;
        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {
          pmVar23 = pmVar23 + 1;
          pcVar10 = pmVar23->mode_string;
          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;
        }
        local_1b0.mc_mode = pmVar23->mode;
      }
      else {
        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);
        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {
          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");
          goto LAB_00011606;
        }
      }
      break;
    case 0x6f:
      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);
      if (local_1b0.mc_offset < 0) {
        pr2serr("bad argument to \'--offset\'\n");
        goto LAB_00011606;
      }
      if ((local_1b0.mc_offset & 3U) != 0) {
        pr2serr("\'--offset\' value needs to be a multiple of 4\n");
        goto LAB_00011606;
      }
      break;
    case 0x73:
      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);
      if (local_1b0.mc_skip < 0) {
        pr2serr("bad argument to \'--skip\'\n");
        goto LAB_00011606;
      }
      break;
    case 0x74:
      goto _L157;
    case 0x76:
      local_1b0.verbose = local_1b0.verbose + 1;
      bVar3 = true;
    }
  } while( true );
_L157:
  local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5);
  if (local_1b0.mc_tlen < 0) goto code_r0x0001141f;
  goto LAB_00011330;
code_r0x0001141f:
  pr2serr("bad argument to \'--tlength\'\n");
LAB_00011606:
  poVar22 = (opts_t *)0x1;
  local_1e0 = (stat64 *)pcVar15;
LAB_0001160b:
  do {
    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);
    if (uVar28 == 0) {
      return (int)poVar22;
    }
    uVar36 = __stack_chk_fail_local();
LAB_00012469:
    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);
    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);
    poVar29 = poVar22;
LAB_00011f90:
    local_1b0.mc_len = (int)poVar29;
    if (local_1e0 != (stat64 *)0x0) {
      close(uVar28);
    }
LAB_00011a5c:
    if (local_1b0.mc_tlen < local_1b0.mc_len) {
      local_1b0.mc_tlen = local_1b0.mc_len;
    }
    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {
      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);
      poVar22 = (opts_t *)&local_1c0;
      poVar38 = (opts_t *)0x0;
      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);
      local_1e0 = (stat64 *)lVar33;
      if (local_1e0 == (stat64 *)0x0) {
        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");
        lVar33 = CONCAT44(extraout_EDX_19,99);
      }
      else {
        if (local_1b0.dry_run == false) {
          iVar20 = 1;
          if (0 < local_1b0.verbose) {
            iVar20 = local_1b0.verbose;
          }
          lVar33 = sg_ll_receive_diag_v2
                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);
          poVar29 = (opts_t *)lVar33;
          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;
          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);
          poVar26 = (opts_t *)(0x2000 - local_1c4);
          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);
          op_00 = extraout_ECX_05;
          poVar31 = op;
          if (op < (opts_t *)0x2001) goto LAB_00011b07;
          poVar31 = (opts_t *)0x2000;
          poVar38 = (opts_t *)0x2000;
          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0
                          );
          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);
          poVar17 = (opts_t *)uVar36;
          op_00 = extraout_ECX_06;
          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;
        }
        else {
          puVar25 = dummy_rd_resp;
          psVar30 = local_1e0;
          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {
            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;
            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;
            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);
          }
          poVar26 = (opts_t *)0x48;
          local_1c4 = 0x1fb8;
          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);
          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);
          op_00 = (opts_t *)0x0;
          poVar31 = poVar29;
          if (poVar29 < (opts_t *)0x2001) {
LAB_00011b07:
            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);
            poVar17 = (opts_t *)lVar33;
            op = poVar22;
            poVar29 = poVar11;
            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;
          }
          else {
            poVar31 = (opts_t *)0x2000;
            poVar17 = (opts_t *)
                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,
                              poVar29,local_1e0);
LAB_00011ddf:
            poVar38 = poVar26;
            op = poVar31;
            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,
                    poVar31,poVar17);
            op_00 = extraout_ECX_07;
            uVar28 = extraout_EDX_06;
            poVar31 = poVar26;
            poVar29 = poVar17;
          }
          if ((int)poVar31 < 8) {
            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);
            lVar33 = CONCAT44(extraout_EDX_12,99);
            goto LAB_00011e81;
          }
        }
        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {
          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);
          poVar29 = (opts_t *)
                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |
                    uVar28 << 0x18);
          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);
          poVar38 = poVar31;
          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);
          op_00 = extraout_ECX_08;
          uVar28 = extraout_EDX_10;
        }
        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);
        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18
        ;
        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {
          puts("Download microcode status diagnostic page:");
          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);
          piVar14 = &poVar31[-1].mc_tlen;
          uVar13 = extraout_ECX_10;
          if (((uint)piVar14 & 0xf) != 0) {
            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",
                    (int)piVar14 >> 4,piVar14,piVar14);
            uVar13 = extraout_ECX_13;
          }
          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);
          __printf_chk(1,"  generation code: 0x%x\n",uVar12);
          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);
          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,
              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;
              psVar30 = (stat64 *)&psVar30->st_mode) {
            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);
            pcVar15 = "";
            if (cVar7 == '\0') {
              pcVar15 = " [primary]";
            }
            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);
            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);
            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;
                pdVar16 = pdVar16 + 1) {
              if (uVar28 == pdVar16->page_code) {
                if (*pcVar15 != '\0') {
                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);
                  __printf_chk(1,"     download microcode additional status: 0x%x\n",
                               *(undefined1 *)((int)&psVar30->__pad1 + 3));
                  uVar13 = extraout_EDX_17;
                  goto LAB_0001225d;
                }
                break;
              }
            }
            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28
                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));
            uVar13 = extraout_EDX_15;
LAB_0001225d:
            uVar28 = psVar30->__st_ino;
            __printf_chk(1,"     download microcode maximum size: %u bytes\n",
                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |
                         uVar28 << 0x18,uVar13);
            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",
                         *(undefined1 *)((int)&psVar30->st_mode + 3));
            uVar28 = psVar30->st_nlink;
            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",
                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |
                         uVar28 << 0x18);
            local_1e0 = extraout_EDX_16;
          }
        }
        else {
          last = SUB41(&local_1b0,0);
          poVar22 = (opts_t *)local_1b0.mc_mode;
          if ((byte)local_1d4 == 0) {
LAB_0001201a:
            psVar30 = (stat64 *)0x0;
            poVar38 = (opts_t *)0x0;
            op_00 = poVar22;
          }
          else {
            off_off = (_Bool *)0x0;
            if (0 < local_1b0.bpw) {
              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {
                op = (opts_t *)local_1b0.bpw;
                poVar22 = (opts_t *)local_1b0.bpw;
                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {
                  local_1e9 = (byte)local_1d4;
                  op = (opts_t *)((uint)local_1d4 & 0xff);
                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);
                }
                if (local_1b0.verbose != 0) {
                  op = (opts_t *)
                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",
                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,
                               op);
                }
                poVar38 = &local_1b0;
                poVar29 = op;
                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,
                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),
                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,
                                           (uint)local_1e9,last,op);
                lVar33 = CONCAT44(extraout_EDX_04,iVar20);
                if (iVar20 != 0) goto LAB_00011e81;
                uVar28 = extraout_EDX_04;
              }
              poVar22 = (opts_t *)0x0;
              lVar33 = (ulonglong)uVar28 << 0x20;
              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;
              local_1b0.mc_mode = 0xf;
              if (local_1b0.verbose != 0) {
                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);
              }
              goto LAB_0001201a;
            }
            psVar30 = local_1d8;
            poVar38 = (opts_t *)local_1b0.mc_len;
            if (local_1b0.verbose != 0) {
              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,
                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);
              poVar38 = (opts_t *)local_1b0.mc_len;
              op_00 = extraout_ECX_12;
            }
          }
          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,
                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);
          lVar33 = CONCAT44(extraout_EDX_11,iVar20);
        }
      }
    }
    else {
      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"
              ,uVar36,poVar38);
      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;
    }
LAB_00011e81:
    uVar24 = (undefined4)lVar33;
    if (local_1d8 != (stat64 *)0x0) {
LAB_000118d4:
      free(local_1d8);
      lVar33 = CONCAT44(extraout_EDX_00,uVar24);
    }
LAB_000118e5:
    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);
    iVar20 = (int)lVar33;
    if (local_1bc.free_doutp != (uint8_t *)0x0) {
      free(local_1bc.free_doutp);
      uVar13 = extraout_EDX_01;
    }
    if (local_1c0 != (void *)0x0) {
      free(local_1c0);
      uVar13 = extraout_EDX_02;
    }
    uVar36 = CONCAT44(uVar13,iVar20);
    if (-1 < (int)local_1dc) {
      uVar34 = sg_cmds_close_device(local_1dc);
      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);
      if ((int)uVar34 < 0) {
        iVar18 = -(int)uVar34;
        uVar13 = safe_strerror(iVar18);
        pr2serr("close error: %s\n",uVar13);
        uVar36 = CONCAT44(extraout_EDX_05,iVar20);
        if (iVar20 == 0) {
          uVar36 = sg_convert_errno(iVar18);
        }
      }
    }
    poVar22 = (opts_t *)uVar36;
    if ((local_1b0.verbose == 0) &&
       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)
                                ), cVar7 == '\0')) {
      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");
    }
    if ((int)poVar22 < 0) {
      poVar22 = (opts_t *)0x63;
    }
  } while( true );
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void ** FUN_00011260(int param_1,stat64 *param_2)

{
  ushort uVar1;
  bool bVar2;
  undefined *puVar3;
  char cVar4;
  char *pcVar5;
  void **ppvVar6;
  undefined4 uVar7;
  void **ppvVar8;
  int *piVar9;
  char *pcVar10;
  uint *puVar11;
  void **ppvVar12;
  int iVar13;
  stat64 *extraout_ECX;
  undefined4 extraout_ECX_00;
  undefined4 extraout_ECX_01;
  undefined4 extraout_ECX_02;
  void **extraout_ECX_03;
  stat64 *extraout_ECX_04;
  stat64 *psVar14;
  int iVar15;
  undefined *puVar16;
  undefined *extraout_ECX_05;
  undefined *extraout_ECX_06;
  undefined *extraout_ECX_07;
  undefined *extraout_ECX_08;
  void **extraout_ECX_09;
  undefined4 extraout_ECX_10;
  undefined4 extraout_ECX_11;
  undefined *extraout_ECX_12;
  undefined4 extraout_ECX_13;
  byte bVar17;
  undefined4 extraout_EDX;
  undefined4 extraout_EDX_00;
  undefined4 extraout_EDX_01;
  undefined4 extraout_EDX_02;
  stat64 *extraout_EDX_03;
  undefined4 extraout_EDX_04;
  uint extraout_EDX_05;
  undefined4 extraout_EDX_06;
  undefined4 extraout_EDX_07;
  undefined4 extraout_EDX_08;
  uint extraout_EDX_09;
  undefined4 extraout_EDX_10;
  uint extraout_EDX_11;
  undefined4 extraout_EDX_12;
  undefined4 extraout_EDX_13;
  stat64 *extraout_EDX_14;
  undefined4 extraout_EDX_15;
  undefined4 extraout_EDX_16;
  undefined4 extraout_EDX_17;
  undefined4 extraout_EDX_18;
  undefined4 extraout_EDX_19;
  void **ppvVar18;
  undefined **ppuVar19;
  undefined4 uVar20;
  undefined4 *puVar21;
  void **ppvVar22;
  undefined4 uVar23;
  undefined *puVar24;
  uint uVar25;
  char *pcVar26;
  void **ppvVar27;
  void **ppvVar28;
  int in_GS_OFFSET;
  byte bVar29;
  longlong lVar30;
  undefined8 uVar31;
  __off64_t _Var32;
  undefined8 uVar33;
  uint uVar34;
  undefined4 uVar35;
  void **ppvVar36;
  stat64 *psVar37;
  stat64 *psVar38;
  char *local_1f0;
  char local_1e9;
  int local_1e8;
  stat64 *local_1e0;
  undefined **local_1dc;
  stat64 *local_1d8;
  stat64 *local_1d4;
  int local_1c4;
  void *local_1c0;
  undefined4 local_1bc;
  void *local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0;
  char local_1ac;
  void **local_1a8;
  uint local_1a4;
  void **local_1a0;
  undefined *local_19c;
  uint local_198;
  uint local_194;
  uint uStack_190;
  void **local_18c;
  int local_188;
  stat64 local_184;
  stat64 local_124 [2];
  uint local_24;
  undefined4 *local_18;
  
  psVar14 = param_2;
  iVar15 = param_1;
  puVar16 = PTR_optarg_00015ffc;
  bVar29 = 0;
  local_18 = &param_1;
  local_1d4 = param_2;
  local_24 = *(uint *)(in_GS_OFFSET + 0x14);
  local_1c0 = (void *)0x0;
  local_1bc = 0;
  local_1b8 = (void *)0x0;
  local_1b4 = 0;
  local_1f0 = (char *)0x0;
  ppvVar18 = (void **)&local_1b0;
  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {
    *ppvVar18 = (void *)0x0;
    ppvVar18 = ppvVar18 + 1;
  }
  psVar37 = &local_184;
  local_1e8 = 0;
  local_1dc = &PTR_DAT_00016160;
  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";
  local_1e9 = '\0';
  bVar2 = false;
code_r0x00011330:
  do {
    local_184.st_dev._0_4_ = 0;
    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);
    puVar3 = PTR_optarg_00015ffc;
    puVar24 = PTR_optind_00015fe8;
    local_1e0 = (stat64 *)pcVar10;
    local_1d8 = psVar37;
    if (iVar13 == -1) {
      if (local_1e8 != 0) {
        if (local_1e8 == 1) {
          ppvVar18 = (void **)0x0;
          pr2serr(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
        }
        else {
          ppvVar18 = (void **)0x0;
          pr2serr(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
          pr2serr("\n");
          FUN_00012620();
        }
        goto LAB_0001160b;
      }
      iVar13 = *(int *)PTR_optind_00015fe8;
      if (iVar13 < iVar15) {
        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);
        iVar13 = iVar13 + 1;
        *(int *)PTR_optind_00015fe8 = iVar13;
        if (iVar15 <= iVar13) goto LAB_000116cd;
        do {
          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);
          psVar37 = local_1e0;
          psVar38 = local_1e0;
          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);
          iVar13 = *(int *)puVar24 + 1;
          *(int *)puVar24 = iVar13;
          local_1e0 = extraout_EDX_03;
        } while (iVar13 < iVar15);
        ppvVar18 = (void **)0x1;
        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                ,uVar7,psVar37,psVar38);
        local_1e0 = (stat64 *)pcVar10;
        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";
        goto LAB_0001160b;
      }
      local_1e0 = (stat64 *)0x0;
      psVar14 = extraout_ECX;
LAB_000116cd:
      if (bVar2) {
        if (local_1e9 != '\0') {
          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");
          psVar14 = extraout_ECX_04;
LAB_000119bc:
          ppvVar18 = (void **)0x0;
          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);
          local_1e0 = (stat64 *)pcVar10;
          goto LAB_0001160b;
        }
      }
      else if (local_1e9 != '\0') goto LAB_000119bc;
      if (local_1e0 == (stat64 *)0x0) {
        pcVar5 = "missing device name!\n\n";
        goto LAB_000115ef;
      }
      if ((int)local_19c < 8) {
        if ((int)local_19c < 6) {
          local_1d4 = (stat64 *)0x0;
          if (local_19c != (undefined *)0x0) goto LAB_0001171b;
        }
        else {
LAB_00011c5b:
          local_1d4 = (stat64 *)0x1;
        }
      }
      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {
        local_1d4 = (stat64 *)0x0;
      }
      else {
        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;
LAB_0001171b:
        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);
        local_1d4 = (stat64 *)0x0;
      }
      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {
        pr2serr("trim chunk size (CS) to be the same as LEN\n");
        local_1a8 = local_1a0;
      }
      ppvVar36 = local_1a0;
      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {
        local_198 = 0;
        ppvVar36 = (void **)pr2serr(
                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"
                                   );
      }
      uVar7 = 0;
      iVar15 = local_188;
      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);
      uVar33 = CONCAT44(iVar15,uVar7);
      if ((int)local_1dc < 0) {
        if (local_188 != 0) {
          uVar7 = safe_strerror(-(int)local_1dc);
          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);
          local_1d4 = local_1e0;
        }
        lVar30 = sg_convert_errno(-(int)local_1dc);
        goto LAB_000118e5;
      }
      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);
      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);
      if (bVar17 != 0) {
        pr2serr("ignoring --in=FILE option\n");
        uVar33 = CONCAT44(iVar15,uVar7);
        local_1d8 = (stat64 *)0x0;
        goto LAB_00011a5c;
      }
      if (local_1f0 == (char *)0x0) {
        local_1d8 = (stat64 *)0x0;
        if ((byte)local_1d4 == 0) goto LAB_00011a5c;
        pr2serr("need --in=FILE option with given mode\n");
        lVar30 = CONCAT44(extraout_EDX_08,0x1f);
        goto LAB_000118e5;
      }
      local_1e0 = (stat64 *)strcmp(local_1f0,"-");
      if (local_1e0 == (stat64 *)0x0) {
        uVar25 = 0;
        uVar7 = extraout_ECX_00;
      }
      else {
        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);
        if ((int)uVar25 < 0) {
          piVar9 = __errno_location();
          uVar7 = sg_convert_errno(*piVar9);
          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",
                         local_1f0);
          perror((char *)local_124);
          lVar30 = CONCAT44(extraout_EDX_12,uVar7);
          goto LAB_000118e5;
        }
        iVar15 = sg_set_binary_mode(uVar25);
        uVar7 = extraout_ECX_01;
        if (iVar15 < 0) {
          perror("sg_set_binary_mode");
          uVar7 = extraout_ECX_11;
        }
      }
      uVar34 = uVar25;
      iVar15 = __fxstat64(3,uVar25,psVar37);
      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {
        if (local_1a0 == (void **)0x0) {
          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;
          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=
              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=
              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {
            local_1a0 = (void **)((uint)local_184.st_size - local_194);
            uVar23 = 1;
            goto LAB_00011e31;
          }
          uVar20 = 0xf;
          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,
                  extraout_EDX);
          uVar7 = extraout_EDX_19;
        }
        else {
          uVar23 = 1;
LAB_00011e31:
          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;
          uVar20 = 0xf;
          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,
                  0x8000000,uVar23);
          uVar7 = extraout_EDX_06;
        }
      }
      else {
        if (local_1a0 != (void **)0x0) goto LAB_00011e31;
        local_1a0 = (void **)0x800000;
LAB_0001185d:
        ppvVar18 = local_1a0;
        local_1d8 = (stat64 *)malloc((size_t)local_1a0);
        if (local_1d8 != (stat64 *)0x0) {
          uVar35 = 0xff;
          uVar7 = extraout_ECX_02;
          memset(local_1d8,0xff,(size_t)ppvVar18);
          ppvVar36 = extraout_ECX_03;
          if ((int)local_194 < 1) {
LAB_00011f46:
            psVar14 = local_1d8;
            ppvVar6 = local_1a0;
            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);
            if (-1 < (int)ppvVar18) {
              ppvVar27 = local_1a0;
              uVar33 = CONCAT44(ppvVar6,psVar14);
              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;
              if (local_1ac == '\0') {
                ppvVar27 = ppvVar18;
                uVar33 = CONCAT44(ppvVar6,psVar14);
                if (local_188 == 0) goto LAB_00011f90;
                ppvVar36 = ppvVar18;
                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,
                        ppvVar18);
                ppvVar6 = ppvVar18;
                pr2serr("will send %d bytes",ppvVar18);
                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);
                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;
                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);
                uVar33 = CONCAT44(local_1f0,ppvVar6);
                goto LAB_00011f90;
              }
              ppvVar6 = local_1a0;
              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)
              ;
              pr2serr("pad with 0xff bytes and continue\n");
              ppvVar36 = ppvVar18;
              ppvVar27 = local_1a0;
              uVar33 = CONCAT44(local_1f0,ppvVar6);
              goto LAB_00011f90;
            }
            piVar9 = __errno_location();
            uVar20 = sg_convert_errno(*piVar9);
            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";
          }
          else {
            if ((char)uVar23 == '\0') {
              if (local_1e0 == (stat64 *)0x0) {
                uVar20 = 0xf;
                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);
                goto LAB_000118d4;
              }
              uVar20 = 0xf;
              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,
                      ppvVar18,uVar7);
              goto LAB_00011e75;
            }
            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);
            ppvVar36 = extraout_ECX_09;
            if (-1 < _Var32) goto LAB_00011f46;
            piVar9 = __errno_location();
            uVar20 = sg_convert_errno(*piVar9);
            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";
          }
          local_1d4 = local_124;
          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);
          perror((char *)local_1d4);
          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;
          goto LAB_00011e75;
        }
        uVar20 = 99;
        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,
                uVar7);
        uVar7 = extraout_EDX_16;
      }
      lVar30 = CONCAT44(uVar7,uVar20);
      local_1d8 = (stat64 *)0x0;
      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;
LAB_00011e75:
      close(uVar25);
      lVar30 = CONCAT44(extraout_EDX_07,uVar20);
      goto LAB_00011e81;
    }
    switch(iVar13) {
    case 0x3f:
    case 0x68:
      local_1e8 = local_1e8 + 1;
      break;
    default:
      pcVar5 = "unrecognised option code 0x%x ??\n";
LAB_000115ef:
      pr2serr(pcVar5);
      pr2serr(
             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
             );
      goto code_r0x00011606;
    case 0x49:
      local_1f0 = *(char **)PTR_optarg_00015ffc;
      break;
    case 0x4e:
      local_1b0._2_1_ = '\x01';
      break;
    case 0x53:
      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);
      if (0xff < uStack_190) {
        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");
        goto code_r0x00011606;
      }
      break;
    case 0x56:
      local_1e9 = '\x01';
      break;
    case 0x62:
      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_1a8 < 0) {
        pr2serr("argument to \'--bpw\' should be in a positive number\n");
        goto code_r0x00011606;
      }
      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);
      if ((iVar13 != 0) &&
         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {
        local_1b0._3_1_ = '\x01';
      }
      break;
    case 100:
      local_1b0._0_1_ = '\x01';
      break;
    case 0x65:
      local_1b0._1_1_ = 1;
      break;
    case 0x69:
      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);
      if (0xff < local_1a4) {
        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");
        goto code_r0x00011606;
      }
      break;
    case 0x6c:
      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_1a0 < 0) {
        pr2serr("bad argument to \'--length\'\n");
        goto code_r0x00011606;
      }
      local_1ac = '\x01';
      break;
    case 0x6d:
      piVar9 = (int *)func_0x00011240();
      pcVar5 = *(char **)PTR_optarg_00015ffc;
      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {
        uVar25 = 0xffffffff;
        pcVar26 = pcVar5;
        do {
          if (uVar25 == 0) break;
          uVar25 = uVar25 - 1;
          cVar4 = *pcVar26;
          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;
        } while (cVar4 != '\0');
        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {
code_r0x00011fdc:
          FUN_00012620();
          goto code_r0x00011606;
        }
        ppuVar19 = &PTR_s_dmc_status_00016100;
        puVar24 = PTR_s_dmc_status_00016100;
        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {
          ppuVar19 = ppuVar19 + 3;
          puVar24 = *ppuVar19;
          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;
        }
        local_19c = ppuVar19[1];
      }
      else {
        local_19c = (undefined *)func_0x00011130(pcVar5);
        if ((undefined *)0xff < local_19c) {
          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");
          goto code_r0x00011606;
        }
      }
      break;
    case 0x6f:
      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_198 < 0) {
        pr2serr("bad argument to \'--offset\'\n");
        goto code_r0x00011606;
      }
      if ((local_198 & 3) != 0) {
        pr2serr("\'--offset\' value needs to be a multiple of 4\n");
        goto code_r0x00011606;
      }
      break;
    case 0x73:
      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_194 < 0) {
        pr2serr("bad argument to \'--skip\'\n");
        goto code_r0x00011606;
      }
      break;
    case 0x74:
      goto code_r0x000113fe;
    case 0x76:
      local_188 = local_188 + 1;
      bVar2 = true;
    }
  } while( true );
code_r0x000113fe:
  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);
  if ((int)local_18c < 0) goto code_r0x0001141f;
  goto code_r0x00011330;
code_r0x0001141f:
  pr2serr("bad argument to \'--tlength\'\n");
code_r0x00011606:
  ppvVar18 = (void **)0x1;
  local_1e0 = (stat64 *)pcVar10;
LAB_0001160b:
  do {
    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);
    if (uVar25 == 0) {
      return ppvVar18;
    }
    uVar33 = FUN_00012f60();
LAB_00012469:
    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);
    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);
    ppvVar27 = ppvVar18;
LAB_00011f90:
    local_1a0 = ppvVar27;
    if (local_1e0 != (stat64 *)0x0) {
      close(uVar25);
    }
LAB_00011a5c:
    if ((int)local_18c < (int)local_1a0) {
      local_18c = local_1a0;
    }
    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {
      ppvVar6 = (void **)(uint)(3 < local_188);
      ppvVar18 = &local_1c0;
      ppvVar36 = (void **)0x0;
      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);
      local_1e0 = (stat64 *)lVar30;
      if (local_1e0 == (stat64 *)0x0) {
        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");
        lVar30 = CONCAT44(extraout_EDX_17,99);
      }
      else {
        if ((char)local_1b0 == '\0') {
          iVar15 = 1;
          if (0 < local_188) {
            iVar15 = local_188;
          }
          lVar30 = sg_ll_receive_diag_v2
                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);
          ppvVar27 = (void **)lVar30;
          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;
          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);
          ppvVar22 = (void **)(0x2000 - local_1c4);
          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);
          puVar16 = extraout_ECX_05;
          ppvVar28 = ppvVar8;
          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;
          ppvVar28 = (void **)0x2000;
          ppvVar36 = (void **)0x2000;
          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,
                           ppvVar8,0);
          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);
          ppvVar12 = (void **)uVar33;
          puVar16 = extraout_ECX_06;
          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;
        }
        else {
          puVar21 = &DAT_00016020;
          psVar14 = local_1e0;
          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {
            *(undefined4 *)&psVar14->st_dev = *puVar21;
            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;
            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);
          }
          ppvVar22 = (void **)0x48;
          local_1c4 = 0x1fb8;
          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);
          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);
          puVar16 = (undefined *)0x0;
          ppvVar28 = ppvVar27;
          if (ppvVar27 < (void **)0x2001) {
LAB_00011b07:
            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);
            ppvVar12 = (void **)lVar30;
            ppvVar8 = ppvVar18;
            ppvVar27 = ppvVar6;
            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;
          }
          else {
            ppvVar28 = (void **)0x2000;
            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"
                                        ,0x2000,ppvVar27,local_1e0);
LAB_00011ddf:
            ppvVar36 = ppvVar22;
            ppvVar8 = ppvVar28;
            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,
                    ppvVar28,ppvVar12);
            puVar16 = extraout_ECX_07;
            uVar25 = extraout_EDX_05;
            ppvVar28 = ppvVar22;
            ppvVar27 = ppvVar12;
          }
          if ((int)ppvVar28 < 8) {
            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);
            lVar30 = CONCAT44(extraout_EDX_10,99);
            goto LAB_00011e81;
          }
        }
        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {
          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);
          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |
                              uVar25 << 0x18);
          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);
          ppvVar36 = ppvVar28;
          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,
                  ppvVar27);
          puVar16 = extraout_ECX_08;
          uVar25 = extraout_EDX_09;
        }
        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);
        if (local_19c == (undefined *)0x0) {
          puts("Download microcode status diagnostic page:");
          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);
          ppvVar28 = ppvVar28 + -2;
          uVar7 = extraout_ECX_10;
          if (((uint)ppvVar28 & 0xf) != 0) {
            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",
                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);
            uVar7 = extraout_ECX_13;
          }
          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);
          __printf_chk(1,"  generation code: 0x%x\n",
                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |
                       uVar34 << 0x18);
          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);
          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,
              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;
              psVar14 = (stat64 *)&psVar14->st_mode) {
            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);
            pcVar10 = "";
            if (cVar4 == '\0') {
              pcVar10 = " [primary]";
            }
            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);
            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);
            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;
                puVar11 = puVar11 + 2) {
              if (uVar25 == *puVar11) {
                if (*pcVar10 != '\0') {
                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);
                  __printf_chk(1,"     download microcode additional status: 0x%x\n",
                               *(undefined1 *)((int)&psVar14->__pad1 + 3));
                  uVar7 = extraout_EDX_15;
                  goto LAB_0001225d;
                }
                break;
              }
            }
            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25
                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));
            uVar7 = extraout_EDX_13;
LAB_0001225d:
            uVar25 = psVar14->__st_ino;
            __printf_chk(1,"     download microcode maximum size: %u bytes\n",
                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |
                         uVar25 << 0x18,uVar7);
            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",
                         *(undefined1 *)((int)&psVar14->st_mode + 3));
            uVar25 = psVar14->st_nlink;
            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",
                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |
                         uVar25 << 0x18);
            local_1e0 = extraout_EDX_14;
          }
        }
        else {
          puVar24 = local_19c;
          if ((byte)local_1d4 == '\0') {
LAB_0001201a:
            psVar14 = (stat64 *)0x0;
            ppvVar18 = (void **)0x0;
            puVar16 = puVar24;
          }
          else {
            iVar15 = 0;
            if (0 < (int)local_1a8) {
              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {
                ppvVar8 = local_1a8;
                ppvVar18 = local_1a8;
                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {
                  local_1e9 = (byte)local_1d4;
                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);
                  ppvVar18 = (void **)((int)local_1a0 - iVar15);
                }
                if (local_188 != 0) {
                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"
                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,
                                             ppvVar8);
                }
                ppvVar36 = (void **)&local_1b0;
                ppvVar27 = ppvVar8;
                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0
                                      ,local_1e9);
                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);
                if ((int)lVar30 != 0) goto LAB_00011e81;
              }
              puVar24 = (undefined *)0x0;
              lVar30 = (ulonglong)uVar25 << 0x20;
              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;
              local_19c = (undefined *)0xf;
              if (local_188 != 0) {
                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);
              }
              goto LAB_0001201a;
            }
            psVar14 = local_1d8;
            ppvVar18 = local_1a0;
            if (local_188 != 0) {
              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,
                      local_1a0);
              ppvVar18 = local_1a0;
              puVar16 = extraout_ECX_12;
            }
          }
          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);
        }
      }
    }
    else {
      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"
              ,uVar33,ppvVar36);
      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;
    }
LAB_00011e81:
    uVar20 = (undefined4)lVar30;
    if (local_1d8 != (stat64 *)0x0) {
LAB_000118d4:
      free(local_1d8);
      lVar30 = CONCAT44(extraout_EDX_00,uVar20);
    }
LAB_000118e5:
    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);
    iVar15 = (int)lVar30;
    if (local_1b8 != (void *)0x0) {
      free(local_1b8);
      uVar7 = extraout_EDX_01;
    }
    if (local_1c0 != (void *)0x0) {
      free(local_1c0);
      uVar7 = extraout_EDX_02;
    }
    uVar33 = CONCAT44(uVar7,iVar15);
    if (-1 < (int)local_1dc) {
      uVar31 = sg_cmds_close_device(local_1dc);
      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);
      if ((int)uVar31 < 0) {
        iVar13 = -(int)uVar31;
        uVar7 = safe_strerror(iVar13);
        pr2serr("close error: %s\n",uVar7);
        uVar33 = CONCAT44(extraout_EDX_04,iVar15);
        if (iVar15 == 0) {
          uVar33 = sg_convert_errno(iVar13);
        }
      }
    }
    ppvVar18 = (void **)uVar33;
    if ((local_188 == 0) &&
       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)
                                ), cVar4 == '\0')) {
      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");
    }
    if ((int)ppvVar18 < 0) {
      ppvVar18 = (void **)0x63;
    }
  } while( true );
}


LEA ECX,[ESP + 0x4]
AND ESP,0xfffffff0
PUSH dword ptr [ECX + -0x4]
PUSH EBP
MOV EBP,ESP
PUSH EDI
PUSH ESI
LEA EDI,[EBP + 0xfffffe58]
PUSH EBX
CALL 0x000124e0
ADD EBX,0x4cd9
PUSH ECX
SUB ESP,0x1e8
MOV EAX,dword ptr [ECX + 0x4]
MOV ESI,dword ptr [ECX]
MOV ECX,0xb
MOV dword ptr [EBP + 0xfffffe34],EAX
MOV EAX,GS:[0x14]
MOV dword ptr [EBP + -0x1c],EAX
XOR EAX,EAX
MOV dword ptr [EBP + 0xfffffe0c],EDI
MOV dword ptr [EBP + 0xfffffe48],0x0
MOV dword ptr [EBP + 0xfffffe4c],0x0
MOV dword ptr [EBP + 0xfffffe50],0x0
MOV dword ptr [EBP + 0xfffffe54],0x0
MOV dword ptr [EBP + 0xfffffe18],0x0
STOSD.REP ES:EDI
LEA EAX,[EBP + 0xfffffe84]
MOV dword ptr [EBP + 0xfffffe20],0x0
MOV dword ptr [EBP + 0xfffffe30],EAX
LEA EAX,[EBX + 0x20c]
MOV dword ptr [EBP + 0xfffffe2c],EAX
LEA EAX,[EBX + 0xffffe75c]
MOV dword ptr [EBP + 0xfffffe28],EAX
MOV EAX,dword ptr [EBX + 0xa8]
MOV byte ptr [EBP + 0xfffffe1f],0x0
MOV byte ptr [EBP + 0xfffffe1e],0x0
MOV dword ptr [EBP + 0xfffffe14],EAX
MOV dword ptr [EBP + 0xfffffe10],EAX
LEA ESI,[ESI]
NOP
MOV dword ptr [EBP + 0xfffffe84],0x0
SUB ESP,0xc
PUSH dword ptr [EBP + 0xfffffe30]
PUSH dword ptr [EBP + 0xfffffe2c]
PUSH dword ptr [EBP + 0xfffffe28]
PUSH dword ptr [EBP + 0xfffffe34]
PUSH ESI
CALL 0x00011140
ADD ESP,0x20
CMP EAX,-0x1
JZ 0x0001169a
LEA EDX,[EAX + -0x3f]
CMP EDX,0x37
JA 0x000115e6
MOV ECX,dword ptr [EBX + EDX*0x4 + 0xffffe994]
ADD ECX,EBX
JMP ECX
PUSH ECX
PUSH ECX
PUSH EAX
LEA EAX,[EBX + 0xffffd4f4]
PUSH EAX
CALL 0x000110d0
LEA EAX,[EBX + 0xffffd518]
MOV dword ptr [ESP],EAX
CALL 0x000110d0
ADD ESP,0x10
MOV ESI,0x1
MOV EDI,dword ptr [EBP + -0x1c]
XOR EDI,dword ptr GS:[0x14]
MOV EAX,ESI
JNZ 0x00012464
LEA ESP,[EBP + -0x10]
POP ECX
POP EBX
POP ESI
POP EDI
POP EBP
LEA ESP,[ECX + -0x4]
RET
CMP dword ptr [EBP + 0xfffffe20],0x0
JNZ 0x0001193e
MOV EDI,dword ptr [EBX + 0x94]
MOV EAX,dword ptr [EDI]
CMP EAX,ESI
JGE 0x00011994
MOV ECX,dword ptr [EBP + 0xfffffe34]
MOV EDX,dword ptr [ECX + EAX*0x4]
ADD EAX,0x1
MOV dword ptr [EDI],EAX
CMP EAX,ESI
JL 0x000119f4
CMP byte ptr [EBP + 0xfffffe1e],0x0
JZ 0x0001199b
CMP byte ptr [EBP + 0xfffffe1f],0x0
JNZ 0x000119aa
TEST EDX,EDX
JZ 0x00011f12
MOV EAX,dword ptr [EBP + 0xfffffe6c]
CMP EAX,0x7
JLE 0x00011977
CMP EAX,0xf
JZ 0x00011c67
CMP EAX,0xff
JZ 0x00011c67
CMP EAX,0xe
JZ 0x00011c5b
MOV dword ptr [EBP + 0xfffffe2c],EDX
PUSH EDX
PUSH EAX
LEA EAX,[EBX + 0xffffea88]
PUSH EAX
LEA EAX,[EBX + 0xffffdd50]
PUSH EAX
CALL 0x000110d0
MOV byte ptr [EBP + 0xfffffe34],0x0
MOV EDX,dword ptr [EBP + 0xfffffe2c]
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0xfffffe68]
TEST EAX,EAX
JLE 0x0001175c
CMP EAX,dword ptr [EBP + 0xfffffe60]
JL 0x00011c2c
CMP dword ptr [EBP + 0xfffffe70],0x0
JLE 0x00011772
CMP dword ptr [EBP + 0xfffffe60],0x0
JG 0x00011bff
PUSH EAX
PUSH dword ptr [EBP + 0xfffffe80]
PUSH 0x0
PUSH EDX
MOV dword ptr [EBP + 0xfffffe28],EDX
CALL 0x000111f0
ADD ESP,0x10
MOV EDX,dword ptr [EBP + 0xfffffe28]
TEST EAX,EAX
MOV dword ptr [EBP + 0xfffffe2c],EAX
JS 0x00011cf2
MOVZX EAX,byte ptr [EBP + 0xfffffe34]
CMP dword ptr [EBP + 0xfffffe18],0x0
SETNZ DL
XOR EAX,0x1
AND DL,AL
MOV ESI,EDX
JNZ 0x00011a40
MOV EDI,dword ptr [EBP + 0xfffffe18]
TEST EDI,EDI
JZ 0x00011edf
PUSH EAX
PUSH EAX
LEA EAX,[EBX + 0xffffe828]
PUSH EAX
PUSH EDI
CALL 0x00011050
ADD ESP,0x10
MOV dword ptr [EBP + 0xfffffe28],EAX
TEST EAX,EAX
JZ 0x00011e93
PUSH EAX
PUSH EAX
PUSH 0x0
PUSH EDI
CALL 0x00011060
ADD ESP,0x10
MOV EDI,EAX
TEST EAX,EAX
JS 0x0001212f
SUB ESP,0xc
PUSH EAX
CALL 0x00011070
ADD ESP,0x10
TEST EAX,EAX
JS 0x000122f6
PUSH ECX
PUSH dword ptr [EBP + 0xfffffe30]
PUSH EDI
PUSH 0x3
CALL 0x000110f0
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00011841
MOV EAX,dword ptr [EBP + 0xfffffe94]
AND EAX,0xf000
CMP EAX,0x8000
JZ 0x00011df8
CMP dword ptr [EBP + 0xfffffe68],0x0
JNZ 0x00011e31
MOV dword ptr [EBP + 0xfffffe68],0x800000
MOV EDX,0x800000
SUB ESP,0xc
MOV dword ptr [EBP + 0xfffffe24],EDX
PUSH EDX
CALL 0x00011110
ADD ESP,0x10
MOV EDX,dword ptr [EBP + 0xfffffe24]
TEST EAX,EAX
MOV dword ptr [EBP + 0xfffffe30],EAX
JZ 0x000122da
PUSH ECX
PUSH EDX
PUSH 0xff
PUSH dword ptr [EBP + 0xfffffe30]
CALL 0x00011180
MOV EAX,dword ptr [EBP + 0xfffffe74]
ADD ESP,0x10
TEST EAX,EAX
JLE 0x00011f46
MOV ECX,ESI
TEST CL,CL
JNZ 0x000120b7
CMP dword ptr [EBP + 0xfffffe28],0x0
JNZ 0x00012364
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe83d]
MOV ESI,0xf
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
SUB ESP,0xc
PUSH dword ptr [EBP + 0xfffffe30]
CALL 0x00011090
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0xfffffe50]
TEST EAX,EAX
JZ 0x000118fb
SUB ESP,0xc
PUSH EAX
CALL 0x00011090
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0xfffffe48]
TEST EAX,EAX
JZ 0x00011911
SUB ESP,0xc
PUSH EAX
CALL 0x00011090
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0xfffffe2c]
TEST EAX,EAX
JNS 0x00011c73
CMP dword ptr [EBP + 0xfffffe80],0x0
JZ 0x00011cc1
TEST ESI,ESI
JNS 0x0001160b
MOV ESI,0x63
JMP 0x0001160b
CMP dword ptr [EBP + 0xfffffe20],0x1
JZ 0x000119db
SUB ESP,0xc
LEA EAX,[EBX + 0xffffd518]
XOR ESI,ESI
PUSH EAX
CALL 0x000110d0
LEA EAX,[EBX + 0xffffe80b]
MOV dword ptr [ESP],EAX
CALL 0x000110d0
CALL 0x00012620
ADD ESP,0x10
JMP 0x0001160b
CMP EAX,0x6
JGE 0x00011c5b
MOV byte ptr [EBP + 0xfffffe34],0x0
TEST EAX,EAX
JNZ 0x0001171b
JMP 0x00011746
XOR EDX,EDX
JMP 0x000116cd
CMP byte ptr [EBP + 0xfffffe1f],0x0
JZ 0x000116e7
JMP 0x000119bc
SUB ESP,0xc
LEA EAX,[EBX + 0xffffdcfc]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
LEA EAX,[EBX + 0xffffe7e8]
PUSH ECX
XOR ESI,ESI
PUSH ECX
PUSH EAX
LEA EAX,[EBX + 0xffffdd30]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x0001160b
SUB ESP,0xc
LEA EAX,[EBX + 0xffffd518]
XOR ESI,ESI
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x0001160b
LEA ECX,[EBX + 0xffffdcdc]
MOV dword ptr [EBP + 0xfffffe30],ECX
MOV ECX,dword ptr [EBP + 0xfffffe34]
PUSH EDX
PUSH EDX
PUSH dword ptr [ECX + EAX*0x4]
PUSH dword ptr [EBP + 0xfffffe30]
CALL 0x000110d0
MOV EAX,dword ptr [EDI]
ADD ESP,0x10
ADD EAX,0x1
MOV dword ptr [EDI],EAX
CMP EAX,ESI
JL 0x00011a00
SUB ESP,0xc
LEA EAX,[EBX + 0xffffd518]
MOV ESI,0x1
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x0001160b
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe80d]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
MOV dword ptr [EBP + 0xfffffe30],0x0
MOV EAX,dword ptr [EBP + 0xfffffe68]
CMP dword ptr [EBP + 0xfffffe7c],EAX
JGE 0x00011a70
MOV dword ptr [EBP + 0xfffffe7c],EAX
CMP byte ptr [EBP + 0xfffffe5a],0x0
JZ 0x00011a87
MOV ESI,dword ptr [EBP + 0xfffffe6c]
TEST ESI,ESI
JZ 0x000120a0
XOR EAX,EAX
CMP dword ptr [EBP + 0xfffffe80],0x3
SETG AL
PUSH EAX
LEA EAX,[EBP + 0xfffffe48]
PUSH EAX
PUSH 0x0
PUSH 0x2000
CALL 0x00011210
ADD ESP,0x10
MOV dword ptr [EBP + 0xfffffe28],EAX
TEST EAX,EAX
JZ 0x0001230d
CMP byte ptr [EBP + 0xfffffe58],0x0
JZ 0x00011d46
LEA ESI,[EBX + 0xcc]
MOV ECX,0x12
MOV EDI,dword ptr [EBP + 0xfffffe28]
MOVSD.REP ES:EDI,ESI
MOV EDI,dword ptr [EBP + 0xfffffe28]
MOV ESI,0x48
MOV dword ptr [EBP + 0xfffffe44],0x1fb8
MOVZX EDI,word ptr [EDI + 0x2]
ROL DI,0x8
MOVZX EDI,DI
ADD EDI,0x4
CMP EDI,0x2000
JG 0x00012380
CMP ESI,EDI
JL 0x00011ddf
CMP EDI,0x7
JLE 0x00012084
MOV EAX,dword ptr [EBP + 0xfffffe80]
CMP EAX,0x2
JG 0x00011f20
CMP byte ptr [EBP + 0xfffffe58],0x0
JZ 0x00011b38
TEST EAX,EAX
JNZ 0x00011f20
MOV EAX,dword ptr [EBP + 0xfffffe28]
MOV ESI,dword ptr [EBP + 0xfffffe6c]
MOV EAX,dword ptr [EAX + 0x4]
BSWAP EAX
MOV dword ptr [EBP + 0xfffffe24],EAX
TEST ESI,ESI
JZ 0x00012178
CMP byte ptr [EBP + 0xfffffe34],0x0
JZ 0x0001201a
XOR EDI,EDI
LEA EAX,[EBX + 0xffffe2fc]
CMP dword ptr [EBP + 0xfffffe60],0x0
MOV dword ptr [EBP + 0xfffffe18],EAX
JG 0x00011bd6
JMP 0x00012052
MOV ESI,EAX
CMP dword ptr [EBP + 0xfffffe80],0x0
MOVZX EDX,byte ptr [EBP + 0xfffffe1f]
JNZ 0x00011d16
PUSH EAX
MOV ECX,EDI
PUSH EAX
LEA EAX,[EBP + 0xfffffe4c]
PUSH dword ptr [EBP + 0xfffffe0c]
PUSH EDX
PUSH dword ptr [EBP + 0xfffffe28]
MOV EDX,dword ptr [EBP + 0xfffffe24]
PUSH EAX
MOV EAX,dword ptr [EBP + 0xfffffe30]
PUSH ESI
ADD EAX,EDI
PUSH EAX
MOV EAX,dword ptr [EBP + 0xfffffe2c]
CALL 0x000126a0
ADD ESP,0x20
TEST EAX,EAX
JNZ 0x00012329
ADD EDI,ESI
MOV ESI,dword ptr [EBP + 0xfffffe68]
CMP ESI,EDI
JLE 0x00011fe6
MOV EAX,dword ptr [EBP + 0xfffffe60]
SUB ESI,EDI
CMP EAX,ESI
JL 0x00011b80
MOVZX EAX,byte ptr [EBP + 0xfffffe34]
MOV byte ptr [EBP + 0xfffffe1f],AL
JMP 0x00011b82
SUB ESP,0xc
LEA EAX,[EBX + 0xffffdda0]
MOV dword ptr [EBP + 0xfffffe2c],EDX
PUSH EAX
MOV dword ptr [EBP + 0xfffffe70],0x0
CALL 0x000110d0
ADD ESP,0x10
MOV EDX,dword ptr [EBP + 0xfffffe2c]
JMP 0x00011772
SUB ESP,0xc
LEA EAX,[EBX + 0xffffdd74]
MOV dword ptr [EBP + 0xfffffe2c],EDX
PUSH EAX
CALL 0x000110d0
MOV EAX,dword ptr [EBP + 0xfffffe68]
ADD ESP,0x10
MOV EDX,dword ptr [EBP + 0xfffffe2c]
MOV dword ptr [EBP + 0xfffffe60],EAX
JMP 0x0001175c
MOV byte ptr [EBP + 0xfffffe34],0x1
JMP 0x00011746
MOV byte ptr [EBP + 0xfffffe34],0x0
JMP 0x00011746
SUB ESP,0xc
PUSH EAX
CALL 0x000110b0
ADD ESP,0x10
TEST EAX,EAX
JNS 0x0001191f
SUB ESP,0xc
NEG EAX
PUSH EAX
MOV EDI,EAX
CALL 0x000111c0
POP ECX
POP EDX
PUSH EAX
LEA EAX,[EBX + 0xffffe87e]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
TEST ESI,ESI
JNZ 0x0001191f
SUB ESP,0xc
PUSH EDI
CALL 0x000111a0
ADD ESP,0x10
MOV ESI,EAX
JMP 0x0001191f
LEA EAX,[EBX + 0xffffe88f]
PUSH EDX
PUSH EDX
PUSH ESI
PUSH EAX
CALL 0x00011170
ADD ESP,0x10
TEST AL,AL
JNZ 0x0001192c
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe394]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x0001192c
MOV EDI,EAX
NEG EDI
CMP dword ptr [EBP + 0xfffffe80],0x0
JNZ 0x00011fae
SUB ESP,0xc
PUSH EDI
CALL 0x000111a0
ADD ESP,0x10
MOV ESI,EAX
JMP 0x000118e5
PUSH EAX
PUSH EAX
PUSH EDX
PUSH ESI
PUSH EDI
PUSH dword ptr [EBP + 0xfffffe64]
PUSH dword ptr [EBP + 0xfffffe6c]
PUSH dword ptr [EBP + 0xfffffe18]
MOV dword ptr [EBP + 0xfffffe20],EDX
CALL 0x000110d0
ADD ESP,0x20
MOV EDX,dword ptr [EBP + 0xfffffe20]
JMP 0x00011b96
SUB ESP,0xc
MOV EAX,0x1
CMP dword ptr [EBP + 0xfffffe80],0x0
CMOVG EAX,dword ptr [EBP + 0xfffffe80]
MOV EDI,dword ptr [EBP + 0xfffffe28]
SUB EAX,0x1
PUSH EAX
LEA EAX,[EBP + 0xfffffe44]
PUSH 0x1
PUSH EAX
PUSH 0x0
PUSH 0x2000
PUSH EDI
PUSH 0xe
PUSH 0x1
PUSH dword ptr [EBP + 0xfffffe2c]
CALL 0x00011230
ADD ESP,0x30
MOV ESI,EAX
TEST EAX,EAX
JNZ 0x00011e81
MOVZX EDI,word ptr [EDI + 0x2]
MOV ESI,0x2000
SUB ESI,dword ptr [EBP + 0xfffffe44]
ROL DI,0x8
MOVZX EDI,DI
ADD EDI,0x4
CMP EDI,0x2000
JLE 0x00011b07
PUSH EAX
LEA EAX,[EBX + 0xffffd204]
PUSH EDI
MOV EDI,0x2000
PUSH 0x2000
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
CMP ESI,0x1fff
JG 0x00011b18
PUSH EAX
LEA EAX,[EBX + 0xffffd240]
PUSH EDI
MOV EDI,ESI
PUSH ESI
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011b0f
CMP dword ptr [EBP + 0xfffffe68],0x0
JNZ 0x0001235a
MOV ESI,dword ptr [EBP + 0xfffffe74]
MOV EAX,dword ptr [EBP + 0xfffffeb0]
MOV ECX,ESI
SAR ECX,0x1f
CMP ESI,EAX
SBB ECX,dword ptr [EBP + 0xfffffeb4]
JGE 0x00012480
SUB EAX,ESI
MOV ESI,0x1
MOV dword ptr [EBP + 0xfffffe68],EAX
MOV EDX,dword ptr [EBP + 0xfffffe68]
CMP EDX,0x8000000
JLE 0x0001185d
LEA EAX,[EBX + 0xffffde70]
PUSH ESI
MOV ESI,0xf
PUSH 0x8000000
PUSH EDX
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
CMP dword ptr [EBP + 0xfffffe28],0x0
MOV dword ptr [EBP + 0xfffffe30],0x0
JZ 0x000118e5
SUB ESP,0xc
PUSH EDI
CALL 0x00011220
ADD ESP,0x10
CMP dword ptr [EBP + 0xfffffe30],0x0
JNZ 0x000118d4
JMP 0x000118e5
XOR EDI,EDI
JMP 0x00011815
CMP byte ptr [EBP + 0xfffffe34],0x0
MOV dword ptr [EBP + 0xfffffe30],0x0
JZ 0x00011a5c
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe018]
MOV ESI,0x1f
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x000118e5
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe7f6]
JMP 0x000115ef
MOV ESI,dword ptr [EBP + 0xfffffe28]
MOV EAX,dword ptr [ESI + 0x4]
BSWAP EAX
PUSH EAX
MOVZX EAX,byte ptr [ESI + 0x1]
PUSH EAX
LEA EAX,[EBX + 0xffffe108]
PUSH EDI
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011b38
PUSH ECX
PUSH dword ptr [EBP + 0xfffffe68]
PUSH dword ptr [EBP + 0xfffffe30]
PUSH EDI
CALL 0x00011080
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JS 0x0001241d
MOV EAX,dword ptr [EBP + 0xfffffe68]
CMP EAX,ESI
JLE 0x00011f90
CMP byte ptr [EBP + 0xfffffe5c],0x0
JNZ 0x000123f3
CMP dword ptr [EBP + 0xfffffe80],0x0
JNZ 0x000123a0
MOV dword ptr [EBP + 0xfffffe68],ESI
CMP dword ptr [EBP + 0xfffffe28],0x0
JZ 0x00011a5c
SUB ESP,0xc
PUSH EDI
CALL 0x00011220
ADD ESP,0x10
JMP 0x00011a5c
SUB ESP,0xc
MOV dword ptr [EBP + 0xfffffe34],EDX
PUSH EDI
CALL 0x000111c0
ADD ESP,0xc
MOV EDX,dword ptr [EBP + 0xfffffe34]
PUSH EAX
LEA EAX,[EBX + 0xffffddf4]
PUSH EDX
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011d03
XOR ESI,ESI
CMP byte ptr [EBP + 0xfffffe5b],0x0
JZ 0x00011e81
CMP dword ptr [EBP + 0xfffffe80],0x0
MOV dword ptr [EBP + 0xfffffe6c],0xf
JZ 0x0001201a
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe338]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
LEA EAX,[EBP + 0xfffffe4c]
PUSH ESI
PUSH ESI
PUSH dword ptr [EBP + 0xfffffe0c]
PUSH 0x1
PUSH dword ptr [EBP + 0xfffffe28]
PUSH EAX
PUSH 0x0
PUSH 0x0
MOV EDX,dword ptr [EBP + 0xfffffe24]
MOV EAX,dword ptr [EBP + 0xfffffe2c]
XOR ECX,ECX
CALL 0x000126a0
ADD ESP,0x20
MOV ESI,EAX
JMP 0x00011e81
CMP dword ptr [EBP + 0xfffffe80],0x0
JNZ 0x00012330
LEA EAX,[EBP + 0xfffffe4c]
PUSH ECX
PUSH ECX
PUSH dword ptr [EBP + 0xfffffe0c]
PUSH 0x1
PUSH dword ptr [EBP + 0xfffffe28]
PUSH EAX
PUSH dword ptr [EBP + 0xfffffe68]
PUSH dword ptr [EBP + 0xfffffe30]
JMP 0x00012035
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe0dc]
MOV ESI,0x63
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011e81
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe040]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011e81
CDQ
PUSH 0x0
PUSH EDX
PUSH EAX
PUSH EDI
CALL 0x000111d0
ADD ESP,0x10
TEST EDX,EDX
JNS 0x00011f46
CALL 0x00011190
SUB ESP,0xc
PUSH dword ptr [EAX]
CALL 0x000111a0
MOV ESI,EAX
POP EAX
LEA EAX,[EBX + 0xffffdf38]
POP EDX
PUSH dword ptr [EBP + 0xfffffe18]
LEA EDX,[EBP + 0xfffffee4]
PUSH EAX
PUSH 0x100
PUSH 0x1
PUSH 0x100
PUSH EDX
MOV dword ptr [EBP + 0xfffffe34],EDX
CALL 0x00011040
MOV EDX,dword ptr [EBP + 0xfffffe34]
ADD ESP,0x14
PUSH EDX
CALL 0x000110e0
ADD ESP,0x10
CMP dword ptr [EBP + 0xfffffe28],0x0
JNZ 0x00011e75
JMP 0x000118d4
CALL 0x00011190
SUB ESP,0xc
PUSH dword ptr [EAX]
CALL 0x000111a0
POP EDI
LEA EDI,[EBP + 0xfffffee4]
MOV ESI,EAX
POP EAX
LEA EAX,[EBX + 0xffffde1c]
PUSH dword ptr [EBP + 0xfffffe18]
PUSH EAX
PUSH 0x100
PUSH 0x1
PUSH 0x100
PUSH EDI
CALL 0x00011040
ADD ESP,0x14
PUSH EDI
CALL 0x000110e0
ADD ESP,0x10
JMP 0x000118e5
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe144]
PUSH EAX
CALL 0x00011120
MOV EAX,dword ptr [EBP + 0xfffffe28]
ADD ESP,0x10
MOVZX EDX,byte ptr [EAX + 0x1]
LEA EAX,[EDI + -0x8]
MOV EDI,EAX
SAR EDI,0x4
TEST AL,0xf
JNZ 0x00012441
LEA EAX,[EBX + 0xffffe170]
PUSH ECX
SHL EDI,0x4
PUSH EDX
PUSH EAX
PUSH 0x1
CALL 0x000111b0
ADD ESP,0xc
LEA EAX,[EBX + 0xffffe865]
PUSH dword ptr [EBP + 0xfffffe24]
PUSH EAX
PUSH 0x1
CALL 0x000111b0
MOV EDX,dword ptr [EBP + 0xfffffe28]
ADD ESP,0x10
LEA EAX,[EDX + EDI*0x1]
MOV EDI,EDX
MOV dword ptr [EBP + 0xfffffe34],EAX
LEA EAX,[EBX + 0xffffe751]
MOV dword ptr [EBP + 0xfffffe28],EAX
LEA EAX,[EBX + 0xffffe80c]
MOV dword ptr [EBP + 0xfffffe24],EAX
CMP dword ptr [EBP + 0xfffffe34],EDI
JZ 0x00011e81
MOVZX EAX,byte ptr [EDI + 0x9]
MOV EDX,dword ptr [EBP + 0xfffffe24]
TEST AL,AL
CMOVZ EDX,dword ptr [EBP + 0xfffffe28]
PUSH EDX
PUSH EAX
LEA EAX,[EBX + 0xffffe19c]
PUSH EAX
PUSH 0x1
CALL 0x000111b0
MOVZX EDX,byte ptr [EDI + 0xa]
ADD ESP,0x10
LEA EAX,[EBX + 0x12c]
JMP 0x0001223f
CMP EDX,dword ptr [EAX]
JZ 0x000122aa
ADD EAX,0x8
MOV ECX,dword ptr [EAX + 0x4]
TEST ECX,ECX
JNZ 0x00012238
MOVZX EAX,byte ptr [EDI + 0xb]
PUSH EAX
LEA EAX,[EBX + 0xffffe220]
PUSH EDX
PUSH EAX
PUSH 0x1
CALL 0x000111b0
ADD ESP,0x10
MOV EAX,dword ptr [EDI + 0xc]
PUSH EDX
ADD EDI,0x10
BSWAP EAX
PUSH EAX
LEA EAX,[EBX + 0xffffe260]
PUSH EAX
PUSH 0x1
CALL 0x000111b0
MOVZX EAX,byte ptr [EDI + 0x3]
ADD ESP,0xc
PUSH EAX
LEA EAX,[EBX + 0xffffe290]
PUSH EAX
PUSH 0x1
CALL 0x000111b0
MOV EAX,dword ptr [EDI + 0x4]
ADD ESP,0xc
BSWAP EAX
PUSH EAX
LEA EAX,[EBX + 0xffffe2c4]
PUSH EAX
PUSH 0x1
CALL 0x000111b0
ADD ESP,0x10
JMP 0x000121fa
CMP byte ptr [ECX],0x0
JZ 0x00012246
LEA EAX,[EBX + 0xffffe1c0]
PUSH EDX
PUSH ECX
PUSH EAX
PUSH 0x1
CALL 0x000111b0
MOVZX EAX,byte ptr [EDI + 0xb]
ADD ESP,0xc
PUSH EAX
LEA EAX,[EBX + 0xffffe1ec]
PUSH EAX
PUSH 0x1
CALL 0x000111b0
ADD ESP,0x10
JMP 0x0001225d
SUB ESP,0xc
LEA EAX,[EBX + 0xffffdeb8]
MOV ESI,0x63
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011e5e
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe82a]
PUSH EAX
CALL 0x000110e0
ADD ESP,0x10
JMP 0x00011815
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe0a8]
MOV ESI,0x63
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011e81
MOV ESI,EAX
JMP 0x00011e81
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe364]
PUSH dword ptr [EBP + 0xfffffe68]
PUSH dword ptr [EBP + 0xfffffe70]
PUSH dword ptr [EBP + 0xfffffe64]
PUSH ESI
PUSH EAX
CALL 0x000110d0
ADD ESP,0x20
JMP 0x0001205f
MOV ESI,0x1
JMP 0x00011e31
SUB ESP,0xc
LEA EAX,[EBX + 0xffffdefc]
MOV ESI,0xf
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011e75
PUSH EAX
LEA EAX,[EBX + 0xffffd204]
PUSH EDI
MOV EDI,0x2000
PUSH 0x2000
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011ddf
PUSH ESI
PUSH dword ptr [EBP + 0xfffffe18]
PUSH EAX
LEA EAX,[EBX + 0xffffdf9c]
PUSH EAX
CALL 0x000110d0
POP ECX
POP EAX
LEA EAX,[EBX + 0xffffe852]
PUSH ESI
PUSH EAX
CALL 0x000110d0
MOV EAX,dword ptr [EBP + 0xfffffe60]
ADD ESP,0x10
TEST EAX,EAX
JLE 0x000123dc
CMP EAX,dword ptr [EBP + 0xfffffe68]
JL 0x00012469
SUB ESP,0xc
LEA EAX,[EBX + 0xffffe80b]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011f8a
PUSH ESI
PUSH dword ptr [EBP + 0xfffffe18]
PUSH EAX
LEA EAX,[EBX + 0xffffdf9c]
PUSH EAX
CALL 0x000110d0
LEA EAX,[EBX + 0xffffdfcc]
MOV dword ptr [ESP],EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011f90
CALL 0x00011190
SUB ESP,0xc
PUSH dword ptr [EAX]
CALL 0x000111a0
MOV ESI,EAX
POP EAX
LEA EAX,[EBX + 0xffffdf74]
POP EDX
PUSH dword ptr [EBP + 0xfffffe18]
JMP 0x000120ec
PUSH EAX
PUSH EAX
LEA EAX,[EBX + 0xffffd338]
PUSH EDI
PUSH EAX
MOV dword ptr [EBP + 0xfffffe34],EDX
CALL 0x000110d0
ADD ESP,0x10
MOV EDX,dword ptr [EBP + 0xfffffe34]
JMP 0x000121a4
CALL 0x00012f60
PUSH EDX
PUSH EDX
PUSH EAX
LEA EAX,[EBX + 0xffffdff0]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011f8a
PUSH EDX
MOV ESI,0xf
PUSH EDX
PUSH EAX
LEA EAX,[EBX + 0xffffde4c]
PUSH EAX
CALL 0x000110d0
ADD ESP,0x10
JMP 0x00011e5e
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid ** FUN_00011260(int param_1,stat64 *param_2)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}\n\n" comment (function_definition "void ** FUN_00011260(int param_1,stat64 *param_2)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}" primitive_type (pointer_declarator "** FUN_00011260(int param_1,stat64 *param_2)" * (pointer_declarator "* FUN_00011260(int param_1,stat64 *param_2)" * (function_declarator "FUN_00011260(int param_1,stat64 *param_2)" identifier (parameter_list "(int param_1,stat64 *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "stat64 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))))) (compound_statement "{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "void **ppvVar6;" primitive_type (pointer_declarator "**ppvVar6" * (pointer_declarator "*ppvVar6" * identifier)) ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "void **ppvVar8;" primitive_type (pointer_declarator "**ppvVar8" * (pointer_declarator "*ppvVar8" * identifier)) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "void **ppvVar12;" primitive_type (pointer_declarator "**ppvVar12" * (pointer_declarator "*ppvVar12" * identifier)) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "stat64 *extraout_ECX;" type_identifier (pointer_declarator "*extraout_ECX" * identifier) ;) (declaration "undefined4 extraout_ECX_00;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_01;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_02;" type_identifier identifier ;) (declaration "void **extraout_ECX_03;" primitive_type (pointer_declarator "**extraout_ECX_03" * (pointer_declarator "*extraout_ECX_03" * identifier)) ;) (declaration "stat64 *extraout_ECX_04;" type_identifier (pointer_declarator "*extraout_ECX_04" * identifier) ;) (declaration "stat64 *psVar14;" type_identifier (pointer_declarator "*psVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "undefined *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "undefined *extraout_ECX_05;" type_identifier (pointer_declarator "*extraout_ECX_05" * identifier) ;) (declaration "undefined *extraout_ECX_06;" type_identifier (pointer_declarator "*extraout_ECX_06" * identifier) ;) (declaration "undefined *extraout_ECX_07;" type_identifier (pointer_declarator "*extraout_ECX_07" * identifier) ;) (declaration "undefined *extraout_ECX_08;" type_identifier (pointer_declarator "*extraout_ECX_08" * identifier) ;) (declaration "void **extraout_ECX_09;" primitive_type (pointer_declarator "**extraout_ECX_09" * (pointer_declarator "*extraout_ECX_09" * identifier)) ;) (declaration "undefined4 extraout_ECX_10;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_11;" type_identifier identifier ;) (declaration "undefined *extraout_ECX_12;" type_identifier (pointer_declarator "*extraout_ECX_12" * identifier) ;) (declaration "undefined4 extraout_ECX_13;" type_identifier identifier ;) (declaration "byte bVar17;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_00;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_01;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_02;" type_identifier identifier ;) (declaration "stat64 *extraout_EDX_03;" type_identifier (pointer_declarator "*extraout_EDX_03" * identifier) ;) (declaration "undefined4 extraout_EDX_04;" type_identifier identifier ;) (declaration "uint extraout_EDX_05;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_06;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_07;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_08;" type_identifier identifier ;) (declaration "uint extraout_EDX_09;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_10;" type_identifier identifier ;) (declaration "uint extraout_EDX_11;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_12;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_13;" type_identifier identifier ;) (declaration "stat64 *extraout_EDX_14;" type_identifier (pointer_declarator "*extraout_EDX_14" * identifier) ;) (declaration "undefined4 extraout_EDX_15;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_16;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_17;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_18;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_19;" type_identifier identifier ;) (declaration "void **ppvVar18;" primitive_type (pointer_declarator "**ppvVar18" * (pointer_declarator "*ppvVar18" * identifier)) ;) (declaration "undefined **ppuVar19;" type_identifier (pointer_declarator "**ppuVar19" * (pointer_declarator "*ppuVar19" * identifier)) ;) (declaration "undefined4 uVar20;" type_identifier identifier ;) (declaration "undefined4 *puVar21;" type_identifier (pointer_declarator "*puVar21" * identifier) ;) (declaration "void **ppvVar22;" primitive_type (pointer_declarator "**ppvVar22" * (pointer_declarator "*ppvVar22" * identifier)) ;) (declaration "undefined4 uVar23;" type_identifier identifier ;) (declaration "undefined *puVar24;" type_identifier (pointer_declarator "*puVar24" * identifier) ;) (declaration "uint uVar25;" type_identifier identifier ;) (declaration "char *pcVar26;" primitive_type (pointer_declarator "*pcVar26" * identifier) ;) (declaration "void **ppvVar27;" primitive_type (pointer_declarator "**ppvVar27" * (pointer_declarator "*ppvVar27" * identifier)) ;) (declaration "void **ppvVar28;" primitive_type (pointer_declarator "**ppvVar28" * (pointer_declarator "*ppvVar28" * identifier)) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "byte bVar29;" type_identifier identifier ;) (declaration "longlong lVar30;" type_identifier identifier ;) (declaration "undefined8 uVar31;" type_identifier identifier ;) (declaration "__off64_t _Var32;" type_identifier identifier ;) (declaration "undefined8 uVar33;" type_identifier identifier ;) (declaration "uint uVar34;" type_identifier identifier ;) (declaration "undefined4 uVar35;" type_identifier identifier ;) (declaration "void **ppvVar36;" primitive_type (pointer_declarator "**ppvVar36" * (pointer_declarator "*ppvVar36" * identifier)) ;) (declaration "stat64 *psVar37;" type_identifier (pointer_declarator "*psVar37" * identifier) ;) (declaration "stat64 *psVar38;" type_identifier (pointer_declarator "*psVar38" * identifier) ;) (declaration "char *local_1f0;" primitive_type (pointer_declarator "*local_1f0" * identifier) ;) (declaration "char local_1e9;" primitive_type identifier ;) (declaration "int local_1e8;" primitive_type identifier ;) (declaration "stat64 *local_1e0;" type_identifier (pointer_declarator "*local_1e0" * identifier) ;) (declaration "undefined **local_1dc;" type_identifier (pointer_declarator "**local_1dc" * (pointer_declarator "*local_1dc" * identifier)) ;) (declaration "stat64 *local_1d8;" type_identifier (pointer_declarator "*local_1d8" * identifier) ;) (declaration "stat64 *local_1d4;" type_identifier (pointer_declarator "*local_1d4" * identifier) ;) (declaration "int local_1c4;" primitive_type identifier ;) (declaration "void *local_1c0;" primitive_type (pointer_declarator "*local_1c0" * identifier) ;) (declaration "undefined4 local_1bc;" type_identifier identifier ;) (declaration "void *local_1b8;" primitive_type (pointer_declarator "*local_1b8" * identifier) ;) (declaration "undefined4 local_1b4;" type_identifier identifier ;) (declaration "undefined4 local_1b0;" type_identifier identifier ;) (declaration "char local_1ac;" primitive_type identifier ;) (declaration "void **local_1a8;" primitive_type (pointer_declarator "**local_1a8" * (pointer_declarator "*local_1a8" * identifier)) ;) (declaration "uint local_1a4;" type_identifier identifier ;) (declaration "void **local_1a0;" primitive_type (pointer_declarator "**local_1a0" * (pointer_declarator "*local_1a0" * identifier)) ;) (declaration "undefined *local_19c;" type_identifier (pointer_declarator "*local_19c" * identifier) ;) (declaration "uint local_198;" type_identifier identifier ;) (declaration "uint local_194;" type_identifier identifier ;) (declaration "uint uStack_190;" type_identifier identifier ;) (declaration "void **local_18c;" primitive_type (pointer_declarator "**local_18c" * (pointer_declarator "*local_18c" * identifier)) ;) (declaration "int local_188;" primitive_type identifier ;) (declaration "stat64 local_184;" type_identifier identifier ;) (declaration "stat64 local_124 [2];" type_identifier (array_declarator "local_124 [2]" identifier [ number_literal ]) ;) (declaration "uint local_24;" type_identifier identifier ;) (declaration "undefined4 *local_18;" type_identifier (pointer_declarator "*local_18" * identifier) ;) (expression_statement "psVar14 = param_2;" (assignment_expression "psVar14 = param_2" identifier = identifier) ;) (expression_statement "iVar15 = param_1;" (assignment_expression "iVar15 = param_1" identifier = identifier) ;) (expression_statement "puVar16 = PTR_optarg_00015ffc;" (assignment_expression "puVar16 = PTR_optarg_00015ffc" identifier = identifier) ;) (expression_statement "bVar29 = 0;" (assignment_expression "bVar29 = 0" identifier = number_literal) ;) (expression_statement "local_18 = &param_1;" (assignment_expression "local_18 = &param_1" identifier = (pointer_expression "&param_1" & identifier)) ;) (expression_statement "local_1d4 = param_2;" (assignment_expression "local_1d4 = param_2" identifier = identifier) ;) (expression_statement "local_24 = *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_24 = *(uint *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" * (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_1c0 = (void *)0x0;" (assignment_expression "local_1c0 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1bc = 0;" (assignment_expression "local_1bc = 0" identifier = number_literal) ;) (expression_statement "local_1b8 = (void *)0x0;" (assignment_expression "local_1b8 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1b4 = 0;" (assignment_expression "local_1b4 = 0" identifier = number_literal) ;) (expression_statement "local_1f0 = (char *)0x0;" (assignment_expression "local_1f0 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppvVar18 = (void **)&local_1b0;" (assignment_expression "ppvVar18 = (void **)&local_1b0" identifier = (cast_expression "(void **)&local_1b0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&local_1b0" & identifier))) ;) (for_statement "for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }" for ( (assignment_expression "iVar13 = 0xb" identifier = number_literal) ; (binary_expression "iVar13 != 0" identifier != number_literal) ; (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ) (compound_statement "{\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }" { (expression_statement "*ppvVar18 = (void *)0x0;" (assignment_expression "*ppvVar18 = (void *)0x0" (pointer_expression "*ppvVar18" * identifier) = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppvVar18 = ppvVar18 + 1;" (assignment_expression "ppvVar18 = ppvVar18 + 1" identifier = (binary_expression "ppvVar18 + 1" identifier + number_literal)) ;) })) (expression_statement "psVar37 = &local_184;" (assignment_expression "psVar37 = &local_184" identifier = (pointer_expression "&local_184" & identifier)) ;) (expression_statement "local_1e8 = 0;" (assignment_expression "local_1e8 = 0" identifier = number_literal) ;) (expression_statement "local_1dc = &PTR_DAT_00016160;" (assignment_expression "local_1dc = &PTR_DAT_00016160" identifier = (pointer_expression "&PTR_DAT_00016160" & identifier)) ;) (expression_statement "pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";" (assignment_expression "pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV"" identifier = (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" " string_content ")) ;) (expression_statement "local_1e9 = '\0';" (assignment_expression "local_1e9 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (labeled_statement "code_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );" do (compound_statement "{\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  }" { (expression_statement "local_184.st_dev._0_4_ = 0;" (assignment_expression "local_184.st_dev._0_4_ = 0" (field_expression "local_184.st_dev._0_4_" (field_expression "local_184.st_dev" identifier . field_identifier) . field_identifier) = number_literal) ;) (expression_statement "iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);" (assignment_expression "iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" identifier = (call_expression "getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" identifier (argument_list "(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" ( identifier , identifier , (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" " string_content ") , (pointer_expression "&PTR_DAT_00016160" & identifier) , identifier )))) ;) (expression_statement "puVar3 = PTR_optarg_00015ffc;" (assignment_expression "puVar3 = PTR_optarg_00015ffc" identifier = identifier) ;) (expression_statement "puVar24 = PTR_optind_00015fe8;" (assignment_expression "puVar24 = PTR_optind_00015fe8" identifier = identifier) ;) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_1d8 = psVar37;" (assignment_expression "local_1d8 = psVar37" identifier = identifier) ;) (if_statement "if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }" if (parenthesized_expression "(iVar13 == -1)" ( (binary_expression "iVar13 == -1" identifier == number_literal) )) (compound_statement "{\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }" { (if_statement "if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }" if (parenthesized_expression "(local_1e8 != 0)" ( (binary_expression "local_1e8 != 0" identifier != number_literal) )) (compound_statement "{\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }" { (if_statement "if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" if (parenthesized_expression "(local_1e8 == 1)" ( (binary_expression "local_1e8 == 1" identifier == number_literal) )) (compound_statement "{\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }" { (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" identifier (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) }) (else_clause "else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" else (compound_statement "{\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" { (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" identifier (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement "pr2serr("\n");" (call_expression "pr2serr("\n")" identifier (argument_list "("\n")" ( (string_literal ""\n"" " escape_sequence ") ))) ;) (expression_statement "FUN_00012620();" (call_expression "FUN_00012620()" identifier (argument_list "()" ( ))) ;) }))) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) (expression_statement "iVar13 = *(int *)PTR_optind_00015fe8;" (assignment_expression "iVar13 = *(int *)PTR_optind_00015fe8" identifier = (pointer_expression "*(int *)PTR_optind_00015fe8" * (cast_expression "(int *)PTR_optind_00015fe8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" if (parenthesized_expression "(iVar13 < iVar15)" ( (binary_expression "iVar13 < iVar15" identifier < identifier) )) (compound_statement "{\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" { (expression_statement "local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);" (assignment_expression "local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" identifier = (pointer_expression "*(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" * (cast_expression "(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" ( (type_descriptor "stat64 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)&psVar14->st_dev + iVar13 * 4)" ( (binary_expression "(int)&psVar14->st_dev + iVar13 * 4" (cast_expression "(int)&psVar14->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->st_dev" & (field_expression "psVar14->st_dev" identifier -> field_identifier))) + (binary_expression "iVar13 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)PTR_optind_00015fe8 = iVar13;" (assignment_expression "*(int *)PTR_optind_00015fe8 = iVar13" (pointer_expression "*(int *)PTR_optind_00015fe8" * (cast_expression "(int *)PTR_optind_00015fe8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (if_statement "if (iVar15 <= iVar13) goto LAB_000116cd;" if (parenthesized_expression "(iVar15 <= iVar13)" ( (binary_expression "iVar15 <= iVar13" identifier <= identifier) )) (goto_statement "goto LAB_000116cd;" goto statement_identifier ;)) (do_statement "do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);" do (compound_statement "{\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        }" { (expression_statement "uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);" (assignment_expression "uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" identifier = (pointer_expression "*(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" * (cast_expression "(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->st_dev + iVar13 * 4)" ( (binary_expression "(int)&psVar14->st_dev + iVar13 * 4" (cast_expression "(int)&psVar14->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->st_dev" & (field_expression "psVar14->st_dev" identifier -> field_identifier))) + (binary_expression "iVar13 * 4" identifier * number_literal)) ))))) ;) (expression_statement "psVar37 = local_1e0;" (assignment_expression "psVar37 = local_1e0" identifier = identifier) ;) (expression_statement "psVar38 = local_1e0;" (assignment_expression "psVar38 = local_1e0" identifier = identifier) ;) (expression_statement "pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);" (call_expression "pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0)" identifier (argument_list "("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0)" ( (string_literal ""Unexpected extra argument: %s\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "iVar13 = *(int *)puVar24 + 1;" (assignment_expression "iVar13 = *(int *)puVar24 + 1" identifier = (binary_expression "*(int *)puVar24 + 1" (pointer_expression "*(int *)puVar24" * (cast_expression "(int *)puVar24" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal)) ;) (expression_statement "*(int *)puVar24 = iVar13;" (assignment_expression "*(int *)puVar24 = iVar13" (pointer_expression "*(int *)puVar24" * (cast_expression "(int *)puVar24" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "local_1e0 = extraout_EDX_03;" (assignment_expression "local_1e0 = extraout_EDX_03" identifier = identifier) ;) }) while (parenthesized_expression "(iVar13 < iVar15)" ( (binary_expression "iVar13 < iVar15" identifier < identifier) )) ;) (expression_statement "ppvVar18 = (void **)0x1;" (assignment_expression "ppvVar18 = (void **)0x1" identifier = (cast_expression "(void **)0x1" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);" (call_expression "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38)" identifier (argument_list "("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38)" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";" (assignment_expression "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n"" identifier = (cast_expression "(stat64 *)"Unexpected extra argument: %s\n"" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Unexpected extra argument: %s\n"" " string_content escape_sequence "))) ;) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) (expression_statement "local_1e0 = (stat64 *)0x0;" (assignment_expression "local_1e0 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "psVar14 = extraout_ECX;" (assignment_expression "psVar14 = extraout_ECX" identifier = identifier) ;) (labeled_statement "LAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;" statement_identifier : (if_statement "if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }" { (if_statement "if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }" if (parenthesized_expression "(local_1e9 != '\0')" ( (binary_expression "local_1e9 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }" { (expression_statement "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");" (call_expression "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n")" identifier (argument_list "("Not in DEBUG mode, so \'-vV\' has no special action\n")" ( (string_literal ""Not in DEBUG mode, so \'-vV\' has no special action\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement "psVar14 = extraout_ECX_04;" (assignment_expression "psVar14 = extraout_ECX_04" identifier = identifier) ;) (labeled_statement "LAB_000119bc:\n          ppvVar18 = (void **)0x0;" statement_identifier : (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;)) (expression_statement "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);" (call_expression "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14)" identifier (argument_list "("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14)" ( (string_literal ""sg_ses_microcode: version: %s\n"" " string_content escape_sequence ") , (string_literal ""1.16 20180628"" " string_content ") , identifier , identifier ))) ;) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) }) (else_clause "else if (local_1e9 != '\0') goto LAB_000119bc;" else (if_statement "if (local_1e9 != '\0') goto LAB_000119bc;" if (parenthesized_expression "(local_1e9 != '\0')" ( (binary_expression "local_1e9 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_000119bc;" goto statement_identifier ;))))) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" { (expression_statement "pcVar5 = "missing device name!\n\n";" (assignment_expression "pcVar5 = "missing device name!\n\n"" identifier = (string_literal ""missing device name!\n\n"" " string_content escape_sequence escape_sequence ")) ;) (goto_statement "goto LAB_000115ef;" goto statement_identifier ;) })) (if_statement "if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" if (parenthesized_expression "((int)local_19c < 8)" ( (binary_expression "(int)local_19c < 8" (cast_expression "(int)local_19c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }" { (if_statement "if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" if (parenthesized_expression "((int)local_19c < 6)" ( (binary_expression "(int)local_19c < 6" (cast_expression "(int)local_19c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }" { (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_19c != (undefined *)0x0) goto LAB_0001171b;" if (parenthesized_expression "(local_19c != (undefined *)0x0)" ( (binary_expression "local_19c != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001171b;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" else (compound_statement "{\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" { (labeled_statement "LAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;" statement_identifier : (expression_statement "local_1d4 = (stat64 *)0x1;" (assignment_expression "local_1d4 = (stat64 *)0x1" identifier = (cast_expression "(stat64 *)0x1" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) }))) }) (else_clause "else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" else (if_statement "if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" if (parenthesized_expression "((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff))" ( (binary_expression "(local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)" (parenthesized_expression "(local_19c == (undefined *)0xf)" ( (binary_expression "local_19c == (undefined *)0xf" identifier == (cast_expression "(undefined *)0xf" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(local_19c == (undefined *)0xff)" ( (binary_expression "local_19c == (undefined *)0xff" identifier == (cast_expression "(undefined *)0xff" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n        local_1d4 = (stat64 *)0x0;\n      }" { (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" else (compound_statement "{\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" { (if_statement "if (local_19c == (undefined *)0xe) goto LAB_00011c5b;" if (parenthesized_expression "(local_19c == (undefined *)0xe)" ( (binary_expression "local_19c == (undefined *)0xe" identifier == (cast_expression "(undefined *)0xe" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011c5b;" goto statement_identifier ;)) (labeled_statement "LAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);" statement_identifier : (expression_statement "pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);" (call_expression "pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0)" identifier (argument_list "("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0)" ( (string_literal ""%s: mc_mode=0x%x, continue for now\n"" " string_content escape_sequence ") , (pointer_expression "&DAT_000149dc" & identifier) , identifier , identifier ))) ;)) (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))))) (if_statement "if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }" if (parenthesized_expression "((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8))" ( (binary_expression "(0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)" (parenthesized_expression "(0 < (int)local_1a0)" ( (binary_expression "0 < (int)local_1a0" number_literal < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((int)local_1a0 < (int)local_1a8)" ( (binary_expression "(int)local_1a0 < (int)local_1a8" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }" { (expression_statement "pr2serr("trim chunk size (CS) to be the same as LEN\n");" (call_expression "pr2serr("trim chunk size (CS) to be the same as LEN\n")" identifier (argument_list "("trim chunk size (CS) to be the same as LEN\n")" ( (string_literal ""trim chunk size (CS) to be the same as LEN\n"" " string_content escape_sequence ") ))) ;) (expression_statement "local_1a8 = local_1a0;" (assignment_expression "local_1a8 = local_1a0" identifier = identifier) ;) })) (expression_statement "ppvVar36 = local_1a0;" (assignment_expression "ppvVar36 = local_1a0" identifier = identifier) ;) (if_statement "if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }" if (parenthesized_expression "((0 < (int)local_198) && (0 < (int)local_1a8))" ( (binary_expression "(0 < (int)local_198) && (0 < (int)local_1a8)" (parenthesized_expression "(0 < (int)local_198)" ( (binary_expression "0 < (int)local_198" number_literal < (cast_expression "(int)local_198" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(0 < (int)local_1a8)" ( (binary_expression "0 < (int)local_1a8" number_literal < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }" { (expression_statement "local_198 = 0;" (assignment_expression "local_198 = 0" identifier = number_literal) ;) (expression_statement "ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );" (assignment_expression "ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" identifier = (cast_expression "(void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" identifier (argument_list "(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" ( (string_literal ""WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"" " string_content escape_sequence ") ))))) ;) })) (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "iVar15 = local_188;" (assignment_expression "iVar15 = local_188" identifier = identifier) ;) (expression_statement "local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);" (assignment_expression "local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" identifier = (cast_expression "(undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" identifier (argument_list "(local_1e0,0,local_188,ppvVar36)" ( identifier , number_literal , identifier , identifier ))))) ;) (expression_statement "uVar33 = CONCAT44(iVar15,uVar7);" (assignment_expression "uVar33 = CONCAT44(iVar15,uVar7)" identifier = (call_expression "CONCAT44(iVar15,uVar7)" identifier (argument_list "(iVar15,uVar7)" ( identifier , identifier )))) ;) (if_statement "if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" if (parenthesized_expression "((int)local_1dc < 0)" ( (binary_expression "(int)local_1dc < 0" (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" { (if_statement "if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }" { (expression_statement "uVar7 = safe_strerror(-(int)local_1dc);" (assignment_expression "uVar7 = safe_strerror(-(int)local_1dc)" identifier = (call_expression "safe_strerror(-(int)local_1dc)" identifier (argument_list "(-(int)local_1dc)" ( (unary_expression "-(int)local_1dc" - (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);" (call_expression "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7)" identifier (argument_list "("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7)" ( (string_literal ""sg_ses_microcode: open error: %s: %s\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "local_1d4 = local_1e0;" (assignment_expression "local_1d4 = local_1e0" identifier = identifier) ;) })) (expression_statement "lVar30 = sg_convert_errno(-(int)local_1dc);" (assignment_expression "lVar30 = sg_convert_errno(-(int)local_1dc)" identifier = (call_expression "sg_convert_errno(-(int)local_1dc)" identifier (argument_list "(-(int)local_1dc)" ( (unary_expression "-(int)local_1dc" - (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);" (assignment_expression "bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" identifier = (binary_expression "local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" (binary_expression "local_1f0 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) & (parenthesized_expression "((byte)local_1d4 ^ 1)" ( (binary_expression "(byte)local_1d4 ^ 1" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) ^ number_literal) )))) ;) (expression_statement "uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);" (assignment_expression "uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17)" identifier = (call_expression "CONCAT31((int3)((uint)local_1e0 >> 8),bVar17)" identifier (argument_list "((int3)((uint)local_1e0 >> 8),bVar17)" ( (call_expression "(int3)((uint)local_1e0 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "((uint)local_1e0 >> 8)" ( (binary_expression "(uint)local_1e0 >> 8" (cast_expression "(uint)local_1e0" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) ))) , identifier )))) ;) (if_statement "if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" if (parenthesized_expression "(bVar17 != 0)" ( (binary_expression "bVar17 != 0" identifier != number_literal) )) (compound_statement "{\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" { (expression_statement "pr2serr("ignoring --in=FILE option\n");" (call_expression "pr2serr("ignoring --in=FILE option\n")" identifier (argument_list "("ignoring --in=FILE option\n")" ( (string_literal ""ignoring --in=FILE option\n"" " string_content escape_sequence ") ))) ;) (expression_statement "uVar33 = CONCAT44(iVar15,uVar7);" (assignment_expression "uVar33 = CONCAT44(iVar15,uVar7)" identifier = (call_expression "CONCAT44(iVar15,uVar7)" identifier (argument_list "(iVar15,uVar7)" ( identifier , identifier )))) ;) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00011a5c;" goto statement_identifier ;) })) (if_statement "if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }" if (parenthesized_expression "(local_1f0 == (char *)0x0)" ( (binary_expression "local_1f0 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }" { (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((byte)local_1d4 == 0) goto LAB_00011a5c;" if (parenthesized_expression "((byte)local_1d4 == 0)" ( (binary_expression "(byte)local_1d4 == 0" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) == number_literal) )) (goto_statement "goto LAB_00011a5c;" goto statement_identifier ;)) (expression_statement "pr2serr("need --in=FILE option with given mode\n");" (call_expression "pr2serr("need --in=FILE option with given mode\n")" identifier (argument_list "("need --in=FILE option with given mode\n")" ( (string_literal ""need --in=FILE option with given mode\n"" " string_content escape_sequence ") ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_08,0x1f);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_08,0x1f)" identifier = (call_expression "CONCAT44(extraout_EDX_08,0x1f)" identifier (argument_list "(extraout_EDX_08,0x1f)" ( identifier , number_literal )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "local_1e0 = (stat64 *)strcmp(local_1f0,"-");" (assignment_expression "local_1e0 = (stat64 *)strcmp(local_1f0,"-")" identifier = (cast_expression "(stat64 *)strcmp(local_1f0,"-")" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "strcmp(local_1f0,"-")" identifier (argument_list "(local_1f0,"-")" ( identifier , (string_literal ""-"" " string_content ") ))))) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }" { (expression_statement "uVar25 = 0;" (assignment_expression "uVar25 = 0" identifier = number_literal) ;) (expression_statement "uVar7 = extraout_ECX_00;" (assignment_expression "uVar7 = extraout_ECX_00" identifier = identifier) ;) }) (else_clause "else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" else (compound_statement "{\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" { (expression_statement "uVar25 = open64(local_1f0,0,local_1e0,local_1e0);" (assignment_expression "uVar25 = open64(local_1f0,0,local_1e0,local_1e0)" identifier = (call_expression "open64(local_1f0,0,local_1e0,local_1e0)" identifier (argument_list "(local_1f0,0,local_1e0,local_1e0)" ( identifier , number_literal , identifier , identifier )))) ;) (if_statement "if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }" if (parenthesized_expression "((int)uVar25 < 0)" ( (binary_expression "(int)uVar25 < 0" (cast_expression "(int)uVar25" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }" { (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar7 = sg_convert_errno(*piVar9);" (assignment_expression "uVar7 = sg_convert_errno(*piVar9)" identifier = (call_expression "sg_convert_errno(*piVar9)" identifier (argument_list "(*piVar9)" ( (pointer_expression "*piVar9" * identifier) )))) ;) (expression_statement "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);" (call_expression "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" identifier (argument_list "(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" ( identifier , number_literal , number_literal , number_literal , (string_literal ""sg_ses_microcode: could not open %s for reading"" " string_content ") , identifier ))) ;) (expression_statement "perror((char *)local_124);" (call_expression "perror((char *)local_124)" identifier (argument_list "((char *)local_124)" ( (cast_expression "(char *)local_124" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_12,uVar7);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_12,uVar7)" identifier = (call_expression "CONCAT44(extraout_EDX_12,uVar7)" identifier (argument_list "(extraout_EDX_12,uVar7)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "iVar15 = sg_set_binary_mode(uVar25);" (assignment_expression "iVar15 = sg_set_binary_mode(uVar25)" identifier = (call_expression "sg_set_binary_mode(uVar25)" identifier (argument_list "(uVar25)" ( identifier )))) ;) (expression_statement "uVar7 = extraout_ECX_01;" (assignment_expression "uVar7 = extraout_ECX_01" identifier = identifier) ;) (if_statement "if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }" if (parenthesized_expression "(iVar15 < 0)" ( (binary_expression "iVar15 < 0" identifier < number_literal) )) (compound_statement "{\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }" { (expression_statement "perror("sg_set_binary_mode");" (call_expression "perror("sg_set_binary_mode")" identifier (argument_list "("sg_set_binary_mode")" ( (string_literal ""sg_set_binary_mode"" " string_content ") ))) ;) (expression_statement "uVar7 = extraout_ECX_11;" (assignment_expression "uVar7 = extraout_ECX_11" identifier = identifier) ;) })) }))) (expression_statement "uVar34 = uVar25;" (assignment_expression "uVar34 = uVar25" identifier = identifier) ;) (expression_statement "iVar15 = __fxstat64(3,uVar25,psVar37);" (assignment_expression "iVar15 = __fxstat64(3,uVar25,psVar37)" identifier = (call_expression "__fxstat64(3,uVar25,psVar37)" identifier (argument_list "(3,uVar25,psVar37)" ( number_literal , identifier , identifier )))) ;) (if_statement "if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" if (parenthesized_expression "((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000))" ( (binary_expression "(iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)" (parenthesized_expression "(iVar15 == 0)" ( (binary_expression "iVar15 == 0" identifier == number_literal) )) && (parenthesized_expression "((local_184.st_mode & 0xf000) == 0x8000)" ( (binary_expression "(local_184.st_mode & 0xf000) == 0x8000" (parenthesized_expression "(local_184.st_mode & 0xf000)" ( (binary_expression "local_184.st_mode & 0xf000" (field_expression "local_184.st_mode" identifier . field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }" { (if_statement "if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" if (parenthesized_expression "(local_1a0 == (void **)0x0)" ( (binary_expression "local_1a0 == (void **)0x0" identifier == (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }" { (expression_statement "iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;" (assignment_expression "iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_" identifier = (binary_expression "((int)local_194 >> 0x1f) - local_184.st_size._4_4_" (parenthesized_expression "((int)local_194 >> 0x1f)" ( (binary_expression "(int)local_194 >> 0x1f" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) - (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" identifier . field_identifier) . field_identifier))) ;) (if_statement "if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }" if (parenthesized_expression "((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0)" ( (binary_expression "(SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0" (parenthesized_expression "(SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size)))" ( (binary_expression "SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))" (call_expression "SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_)" identifier (argument_list "((int)local_194 >> 0x1f,local_184.st_size._4_4_)" ( (binary_expression "(int)local_194 >> 0x1f" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) , (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" identifier . field_identifier) . field_identifier) ))) != (call_expression "SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))" identifier (argument_list "(iVar15,(uint)(local_194 < (uint)local_184.st_size))" ( identifier , (call_expression "(uint)(local_194 < (uint)local_184.st_size)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(local_194 < (uint)local_184.st_size)" ( (binary_expression "local_194 < (uint)local_184.st_size" identifier < (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier))) ))) )))) )) != (binary_expression "(int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0" (cast_expression "(int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar15 - (uint)(local_194 < (uint)local_184.st_size))" ( (binary_expression "iVar15 - (uint)(local_194 < (uint)local_184.st_size)" identifier - (call_expression "(uint)(local_194 < (uint)local_184.st_size)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(local_194 < (uint)local_184.st_size)" ( (binary_expression "local_194 < (uint)local_184.st_size" identifier < (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier))) )))) ))) < number_literal)) )) (compound_statement "{\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }" { (expression_statement "local_1a0 = (void **)((uint)local_184.st_size - local_194);" (assignment_expression "local_1a0 = (void **)((uint)local_184.st_size - local_194)" identifier = (cast_expression "(void **)((uint)local_184.st_size - local_194)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((uint)local_184.st_size - local_194)" ( (binary_expression "(uint)local_184.st_size - local_194" (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier)) - identifier) )))) ;) (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00011e31;" goto statement_identifier ;) })) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);" (call_expression "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" identifier (argument_list "("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" ( (string_literal ""skip exceeds file size of %d bytes\n"" " string_content escape_sequence ") , (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier)) , identifier , identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_19;" (assignment_expression "uVar7 = extraout_EDX_19" identifier = identifier) ;) }) (else_clause "else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" else (compound_statement "{\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" { (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" identifier = number_literal) ;) (labeled_statement "LAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;" statement_identifier : (if_statement "if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;" if (parenthesized_expression "((int)local_1a0 < 0x8000001)" ( (binary_expression "(int)local_1a0 < 0x8000001" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_0001185d;" goto statement_identifier ;))) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);" (call_expression "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23)" identifier (argument_list "("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23)" ( (string_literal ""file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n"" " string_content escape_sequence ") , identifier , number_literal , identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_06;" (assignment_expression "uVar7 = extraout_EDX_06" identifier = identifier) ;) }))) }) (else_clause "else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" else (compound_statement "{\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" { (if_statement "if (local_1a0 != (void **)0x0) goto LAB_00011e31;" if (parenthesized_expression "(local_1a0 != (void **)0x0)" ( (binary_expression "local_1a0 != (void **)0x0" identifier != (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00011e31;" goto statement_identifier ;)) (expression_statement "local_1a0 = (void **)0x800000;" (assignment_expression "local_1a0 = (void **)0x800000" identifier = (cast_expression "(void **)0x800000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (labeled_statement "LAB_0001185d:\n        ppvVar18 = local_1a0;" statement_identifier : (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" identifier = identifier) ;)) (expression_statement "local_1d8 = (stat64 *)malloc((size_t)local_1a0);" (assignment_expression "local_1d8 = (stat64 *)malloc((size_t)local_1a0)" identifier = (cast_expression "(stat64 *)malloc((size_t)local_1a0)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc((size_t)local_1a0)" identifier (argument_list "((size_t)local_1a0)" ( (cast_expression "(size_t)local_1a0" ( (type_descriptor "size_t" primitive_type) ) identifier) ))))) ;) (if_statement "if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" if (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" ( (binary_expression "local_1d8 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" { (expression_statement "uVar35 = 0xff;" (assignment_expression "uVar35 = 0xff" identifier = number_literal) ;) (expression_statement "uVar7 = extraout_ECX_02;" (assignment_expression "uVar7 = extraout_ECX_02" identifier = identifier) ;) (expression_statement "memset(local_1d8,0xff,(size_t)ppvVar18);" (call_expression "memset(local_1d8,0xff,(size_t)ppvVar18)" identifier (argument_list "(local_1d8,0xff,(size_t)ppvVar18)" ( identifier , number_literal , (cast_expression "(size_t)ppvVar18" ( (type_descriptor "size_t" primitive_type) ) identifier) ))) ;) (expression_statement "ppvVar36 = extraout_ECX_03;" (assignment_expression "ppvVar36 = extraout_ECX_03" identifier = identifier) ;) (if_statement "if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" if (parenthesized_expression "((int)local_194 < 1)" ( (binary_expression "(int)local_194 < 1" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }" { (labeled_statement "LAB_00011f46:\n            psVar14 = local_1d8;" statement_identifier : (expression_statement "psVar14 = local_1d8;" (assignment_expression "psVar14 = local_1d8" identifier = identifier) ;)) (expression_statement "ppvVar6 = local_1a0;" (assignment_expression "ppvVar6 = local_1a0" identifier = identifier) ;) (expression_statement "ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);" (assignment_expression "ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0)" identifier = (cast_expression "(void **)read(uVar25,local_1d8,(size_t)local_1a0)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "read(uVar25,local_1d8,(size_t)local_1a0)" identifier (argument_list "(uVar25,local_1d8,(size_t)local_1a0)" ( identifier , identifier , (cast_expression "(size_t)local_1a0" ( (type_descriptor "size_t" primitive_type) ) identifier) ))))) ;) (if_statement "if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }" if (parenthesized_expression "(-1 < (int)ppvVar18)" ( (binary_expression "-1 < (int)ppvVar18" number_literal < (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }" { (expression_statement "ppvVar27 = local_1a0;" (assignment_expression "ppvVar27 = local_1a0" identifier = identifier) ;) (expression_statement "uVar33 = CONCAT44(ppvVar6,psVar14);" (assignment_expression "uVar33 = CONCAT44(ppvVar6,psVar14)" identifier = (call_expression "CONCAT44(ppvVar6,psVar14)" identifier (argument_list "(ppvVar6,psVar14)" ( identifier , identifier )))) ;) (if_statement "if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;" if (parenthesized_expression "((int)local_1a0 <= (int)ppvVar18)" ( (binary_expression "(int)local_1a0 <= (int)ppvVar18" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;)) (if_statement "if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }" if (parenthesized_expression "(local_1ac == '\0')" ( (binary_expression "local_1ac == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }" { (expression_statement "ppvVar27 = ppvVar18;" (assignment_expression "ppvVar27 = ppvVar18" identifier = identifier) ;) (expression_statement "uVar33 = CONCAT44(ppvVar6,psVar14);" (assignment_expression "uVar33 = CONCAT44(ppvVar6,psVar14)" identifier = (call_expression "CONCAT44(ppvVar6,psVar14)" identifier (argument_list "(ppvVar6,psVar14)" ( identifier , identifier )))) ;) (if_statement "if (local_188 == 0) goto LAB_00011f90;" if (parenthesized_expression "(local_188 == 0)" ( (binary_expression "local_188 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;)) (expression_statement "ppvVar36 = ppvVar18;" (assignment_expression "ppvVar36 = ppvVar18" identifier = identifier) ;) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18)" identifier (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18)" ( (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "ppvVar6 = ppvVar18;" (assignment_expression "ppvVar6 = ppvVar18" identifier = identifier) ;) (expression_statement "pr2serr("will send %d bytes",ppvVar18);" (call_expression "pr2serr("will send %d bytes",ppvVar18)" identifier (argument_list "("will send %d bytes",ppvVar18)" ( (string_literal ""will send %d bytes"" " string_content ") , identifier ))) ;) (expression_statement "uVar33 = CONCAT44(extraout_EDX_18,local_1a8);" (assignment_expression "uVar33 = CONCAT44(extraout_EDX_18,local_1a8)" identifier = (call_expression "CONCAT44(extraout_EDX_18,local_1a8)" identifier (argument_list "(extraout_EDX_18,local_1a8)" ( identifier , identifier )))) ;) (if_statement "if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;" if (parenthesized_expression "((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0))" ( (binary_expression "(0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)" (parenthesized_expression "(0 < (int)local_1a8)" ( (binary_expression "0 < (int)local_1a8" number_literal < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((int)local_1a8 < (int)local_1a0)" ( (binary_expression "(int)local_1a8 < (int)local_1a0" (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (goto_statement "goto LAB_00012469;" goto statement_identifier ;)) (expression_statement "pr2serr("\n",ppvVar6,local_1f0,ppvVar36);" (call_expression "pr2serr("\n",ppvVar6,local_1f0,ppvVar36)" identifier (argument_list "("\n",ppvVar6,local_1f0,ppvVar36)" ( (string_literal ""\n"" " escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "uVar33 = CONCAT44(local_1f0,ppvVar6);" (assignment_expression "uVar33 = CONCAT44(local_1f0,ppvVar6)" identifier = (call_expression "CONCAT44(local_1f0,ppvVar6)" identifier (argument_list "(local_1f0,ppvVar6)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;) })) (expression_statement "ppvVar6 = local_1a0;" (assignment_expression "ppvVar6 = local_1a0" identifier = identifier) ;) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)" identifier (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)" ( (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "pr2serr("pad with 0xff bytes and continue\n");" (call_expression "pr2serr("pad with 0xff bytes and continue\n")" identifier (argument_list "("pad with 0xff bytes and continue\n")" ( (string_literal ""pad with 0xff bytes and continue\n"" " string_content escape_sequence ") ))) ;) (expression_statement "ppvVar36 = ppvVar18;" (assignment_expression "ppvVar36 = ppvVar18" identifier = identifier) ;) (expression_statement "ppvVar27 = local_1a0;" (assignment_expression "ppvVar27 = local_1a0" identifier = identifier) ;) (expression_statement "uVar33 = CONCAT44(local_1f0,ppvVar6);" (assignment_expression "uVar33 = CONCAT44(local_1f0,ppvVar6)" identifier = (call_expression "CONCAT44(local_1f0,ppvVar6)" identifier (argument_list "(local_1f0,ppvVar6)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;) })) (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar20 = sg_convert_errno(*piVar9);" (assignment_expression "uVar20 = sg_convert_errno(*piVar9)" identifier = (call_expression "sg_convert_errno(*piVar9)" identifier (argument_list "(*piVar9)" ( (pointer_expression "*piVar9" * identifier) )))) ;) (expression_statement "pcVar10 = "sg_ses_microcode: couldn\'t read from %s";" (assignment_expression "pcVar10 = "sg_ses_microcode: couldn\'t read from %s"" identifier = (string_literal ""sg_ses_microcode: couldn\'t read from %s"" " string_content escape_sequence string_content ")) ;) }) (else_clause "else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" else (compound_statement "{\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" { (if_statement "if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }" if (parenthesized_expression "((char)uVar23 == '\0')" ( (binary_expression "(char)uVar23 == '\0'" (cast_expression "(char)uVar23" ( (type_descriptor "char" primitive_type) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }" { (if_statement "if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }" { (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);" (call_expression "pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7)" identifier (argument_list "("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7)" ( (string_literal ""Can\'t skip on stdin\n"" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_000118d4;" goto statement_identifier ;) })) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);" (call_expression "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7)" identifier (argument_list "("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7)" ( (string_literal ""sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_00011e75;" goto statement_identifier ;) })) (expression_statement "_Var32 = lseek64(uVar25,(longlong)(int)local_194,0);" (assignment_expression "_Var32 = lseek64(uVar25,(longlong)(int)local_194,0)" identifier = (call_expression "lseek64(uVar25,(longlong)(int)local_194,0)" identifier (argument_list "(uVar25,(longlong)(int)local_194,0)" ( identifier , (cast_expression "(longlong)(int)local_194" ( (type_descriptor "longlong" type_identifier) ) (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier)) , number_literal )))) ;) (expression_statement "ppvVar36 = extraout_ECX_09;" (assignment_expression "ppvVar36 = extraout_ECX_09" identifier = identifier) ;) (if_statement "if (-1 < _Var32) goto LAB_00011f46;" if (parenthesized_expression "(-1 < _Var32)" ( (binary_expression "-1 < _Var32" number_literal < identifier) )) (goto_statement "goto LAB_00011f46;" goto statement_identifier ;)) (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar20 = sg_convert_errno(*piVar9);" (assignment_expression "uVar20 = sg_convert_errno(*piVar9)" identifier = (call_expression "sg_convert_errno(*piVar9)" identifier (argument_list "(*piVar9)" ( (pointer_expression "*piVar9" * identifier) )))) ;) (expression_statement "pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";" (assignment_expression "pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s"" identifier = (string_literal ""sg_ses_microcode: couldn\'t skip to required position on %s"" " string_content escape_sequence string_content ")) ;) }))) (expression_statement "local_1d4 = local_124;" (assignment_expression "local_1d4 = local_124" identifier = identifier) ;) (expression_statement "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);" (call_expression "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0)" identifier (argument_list "(local_1d4,0x100,1,0x100,pcVar10,local_1f0)" ( identifier , number_literal , number_literal , number_literal , identifier , identifier ))) ;) (expression_statement "perror((char *)local_1d4);" (call_expression "perror((char *)local_1d4)" identifier (argument_list "((char *)local_1d4)" ( (cast_expression "(char *)local_1d4" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000118d4;" goto statement_identifier ;)) (goto_statement "goto LAB_00011e75;" goto statement_identifier ;) })) (expression_statement "uVar20 = 99;" (assignment_expression "uVar20 = 99" identifier = number_literal) ;) (expression_statement "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);" (call_expression "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7)" identifier (argument_list "("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7)" ( (string_literal ""sg_ses_microcode: out of memory to hold microcode read from FILE\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_16;" (assignment_expression "uVar7 = extraout_EDX_16" identifier = identifier) ;) }))) (expression_statement "lVar30 = CONCAT44(uVar7,uVar20);" (assignment_expression "lVar30 = CONCAT44(uVar7,uVar20)" identifier = (call_expression "CONCAT44(uVar7,uVar20)" identifier (argument_list "(uVar7,uVar20)" ( identifier , identifier )))) ;) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;)) (labeled_statement "LAB_00011e75:\n      close(uVar25);" statement_identifier : (expression_statement "close(uVar25);" (call_expression "close(uVar25)" identifier (argument_list "(uVar25)" ( identifier ))) ;)) (expression_statement "lVar30 = CONCAT44(extraout_EDX_07,uVar20);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_07,uVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_07,uVar20)" identifier (argument_list "(extraout_EDX_07,uVar20)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;) })) (switch_statement "switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }" switch (parenthesized_expression "(iVar13)" ( identifier )) (compound_statement "{\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }" { (case_statement "case 0x3f:" case number_literal :) (case_statement "case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;" case number_literal : (expression_statement "local_1e8 = local_1e8 + 1;" (assignment_expression "local_1e8 = local_1e8 + 1" identifier = (binary_expression "local_1e8 + 1" identifier + number_literal)) ;) (break_statement "break;" break ;)) (case_statement "default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;" default : (expression_statement "pcVar5 = "unrecognised option code 0x%x ??\n";" (assignment_expression "pcVar5 = "unrecognised option code 0x%x ??\n"" identifier = (string_literal ""unrecognised option code 0x%x ??\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_000115ef:\n      pr2serr(pcVar5);" statement_identifier : (expression_statement "pr2serr(pcVar5);" (call_expression "pr2serr(pcVar5)" identifier (argument_list "(pcVar5)" ( identifier ))) ;)) (expression_statement "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );" (call_expression "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" identifier (argument_list "(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;)) (case_statement "case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;" case number_literal : (expression_statement "local_1f0 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "local_1f0 = *(char **)PTR_optarg_00015ffc" identifier = (pointer_expression "*(char **)PTR_optarg_00015ffc" * (cast_expression "(char **)PTR_optarg_00015ffc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;" case number_literal : (expression_statement "local_1b0._2_1_ = '\x01';" (assignment_expression "local_1b0._2_1_ = '\x01'" (field_expression "local_1b0._2_1_" identifier . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "uStack_190 = func_0x00011130(*(undefined4 *)puVar16);" (assignment_expression "uStack_190 = func_0x00011130(*(undefined4 *)puVar16)" identifier = (call_expression "func_0x00011130(*(undefined4 *)puVar16)" identifier (argument_list "(*(undefined4 *)puVar16)" ( (pointer_expression "*(undefined4 *)puVar16" * (cast_expression "(undefined4 *)puVar16" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "(0xff < uStack_190)" ( (binary_expression "0xff < uStack_190" number_literal < identifier) )) (compound_statement "{\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");" (call_expression "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n")" identifier (argument_list "("expected argument to \'--subenc\' to be 0 to 255\n")" ( (string_literal ""expected argument to \'--subenc\' to be 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x56:\n      local_1e9 = '\x01';\n      break;" case number_literal : (expression_statement "local_1e9 = '\x01';" (assignment_expression "local_1e9 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;" case number_literal : (expression_statement "local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (cast_expression "(void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;) (if_statement "if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_1a8 < 0)" ( (binary_expression "(int)local_1a8 < 0" (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("argument to \'--bpw\' should be in a positive number\n");" (call_expression "pr2serr("argument to \'--bpw\' should be in a positive number\n")" identifier (argument_list "("argument to \'--bpw\' should be in a positive number\n")" ( (string_literal ""argument to \'--bpw\' should be in a positive number\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (expression_statement "iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);" (assignment_expression "iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" identifier = (call_expression "func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" identifier (argument_list "(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" ( (pointer_expression "*(undefined4 *)puVar3" * (cast_expression "(undefined4 *)puVar3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , number_literal , identifier , identifier )))) ;) (if_statement "if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }" if (parenthesized_expression "((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0))" ( (binary_expression "(iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)" (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) && (parenthesized_expression "(iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)" ( (comma_expression "iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0" (assignment_expression "iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3)" identifier = (call_expression "func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3)" identifier (argument_list "(&UNK_000146c9,iVar13 + 1,3,puVar3)" ( (pointer_expression "&UNK_000146c9" & identifier) , (binary_expression "iVar13 + 1" identifier + number_literal) , number_literal , identifier )))) , (binary_expression "iVar13 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n        local_1b0._3_1_ = '\x01';\n      }" { (expression_statement "local_1b0._3_1_ = '\x01';" (assignment_expression "local_1b0._3_1_ = '\x01'" (field_expression "local_1b0._3_1_" identifier . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) })) (break_statement "break;" break ;)) (case_statement "case 100:\n      local_1b0._0_1_ = '\x01';\n      break;" case number_literal : (expression_statement "local_1b0._0_1_ = '\x01';" (assignment_expression "local_1b0._0_1_ = '\x01'" (field_expression "local_1b0._0_1_" identifier . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x65:\n      local_1b0._1_1_ = 1;\n      break;" case number_literal : (expression_statement "local_1b0._1_1_ = 1;" (assignment_expression "local_1b0._1_1_ = 1" (field_expression "local_1b0._1_1_" identifier . field_identifier) = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (call_expression "func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "(0xff < local_1a4)" ( (binary_expression "0xff < local_1a4" number_literal < identifier) )) (compound_statement "{\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("argument to \'--id\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--id\' should be in the range 0 to 255\n")" identifier (argument_list "("argument to \'--id\' should be in the range 0 to 255\n")" ( (string_literal ""argument to \'--id\' should be in the range 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;" case number_literal : (expression_statement "local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (cast_expression "(void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;) (if_statement "if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_1a0 < 0)" ( (binary_expression "(int)local_1a0 < 0" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--length\'\n");" (call_expression "pr2serr("bad argument to \'--length\'\n")" identifier (argument_list "("bad argument to \'--length\'\n")" ( (string_literal ""bad argument to \'--length\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (expression_statement "local_1ac = '\x01';" (assignment_expression "local_1ac = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;" case number_literal : (expression_statement "piVar9 = (int *)func_0x00011240();" (assignment_expression "piVar9 = (int *)func_0x00011240()" identifier = (cast_expression "(int *)func_0x00011240()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "func_0x00011240()" identifier (argument_list "()" ( ))))) ;) (expression_statement "pcVar5 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "pcVar5 = *(char **)PTR_optarg_00015ffc" identifier = (pointer_expression "*(char **)PTR_optarg_00015ffc" * (cast_expression "(char **)PTR_optarg_00015ffc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (if_statement "if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" if (parenthesized_expression "((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0)" ( (binary_expression "(*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0" (parenthesized_expression "(*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8)" ( (binary_expression "*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8" (pointer_expression "*(byte *)(*piVar9 + 1 + *pcVar5 * 2)" * (cast_expression "(byte *)(*piVar9 + 1 + *pcVar5 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar9 + 1 + *pcVar5 * 2)" ( (binary_expression "*piVar9 + 1 + *pcVar5 * 2" (binary_expression "*piVar9 + 1" (pointer_expression "*piVar9" * identifier) + number_literal) + (binary_expression "*pcVar5 * 2" (pointer_expression "*pcVar5" * identifier) * number_literal)) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }" { (expression_statement "uVar25 = 0xffffffff;" (assignment_expression "uVar25 = 0xffffffff" identifier = number_literal) ;) (expression_statement "pcVar26 = pcVar5;" (assignment_expression "pcVar26 = pcVar5" identifier = identifier) ;) (do_statement "do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');" do (compound_statement "{\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        }" { (if_statement "if (uVar25 == 0) break;" if (parenthesized_expression "(uVar25 == 0)" ( (binary_expression "uVar25 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar25 = uVar25 - 1;" (assignment_expression "uVar25 = uVar25 - 1" identifier = (binary_expression "uVar25 - 1" identifier - number_literal)) ;) (expression_statement "cVar4 = *pcVar26;" (assignment_expression "cVar4 = *pcVar26" identifier = (pointer_expression "*pcVar26" * identifier)) ;) (expression_statement "pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;" (assignment_expression "pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1" identifier = (binary_expression "pcVar26 + (uint)bVar29 * -2 + 1" (binary_expression "pcVar26 + (uint)bVar29 * -2" identifier + (binary_expression "(uint)bVar29 * -2" (cast_expression "(uint)bVar29" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar4 != '\0')" ( (binary_expression "cVar4 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (if_statement "if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }" if (parenthesized_expression "(PTR_s_dmc_status_00016100 == (undefined *)0x0)" ( (binary_expression "PTR_s_dmc_status_00016100 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }" { (labeled_statement "code_r0x00011fdc:\n          FUN_00012620();" statement_identifier : (expression_statement "FUN_00012620();" (call_expression "FUN_00012620()" identifier (argument_list "()" ( ))) ;)) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (expression_statement "ppuVar19 = &PTR_s_dmc_status_00016100;" (assignment_expression "ppuVar19 = &PTR_s_dmc_status_00016100" identifier = (pointer_expression "&PTR_s_dmc_status_00016100" & identifier)) ;) (expression_statement "puVar24 = PTR_s_dmc_status_00016100;" (assignment_expression "puVar24 = PTR_s_dmc_status_00016100" identifier = identifier) ;) (while_statement "while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }" while (parenthesized_expression "(iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0)" ( (comma_expression "iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0" (assignment_expression "iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1)" identifier = (call_expression "func_0x00011200(puVar24,pcVar5,~uVar25 - 1)" identifier (argument_list "(puVar24,pcVar5,~uVar25 - 1)" ( identifier , identifier , (binary_expression "~uVar25 - 1" (unary_expression "~uVar25" ~ identifier) - number_literal) )))) , (binary_expression "iVar13 != 0" identifier != number_literal)) )) (compound_statement "{\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }" { (expression_statement "ppuVar19 = ppuVar19 + 3;" (assignment_expression "ppuVar19 = ppuVar19 + 3" identifier = (binary_expression "ppuVar19 + 3" identifier + number_literal)) ;) (expression_statement "puVar24 = *ppuVar19;" (assignment_expression "puVar24 = *ppuVar19" identifier = (pointer_expression "*ppuVar19" * identifier)) ;) (if_statement "if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;" if (parenthesized_expression "(puVar24 == (undefined *)0x0)" ( (binary_expression "puVar24 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto code_r0x00011fdc;" goto statement_identifier ;)) })) (expression_statement "local_19c = ppuVar19[1];" (assignment_expression "local_19c = ppuVar19[1]" identifier = (subscript_expression "ppuVar19[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" else (compound_statement "{\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" { (expression_statement "local_19c = (undefined *)func_0x00011130(pcVar5);" (assignment_expression "local_19c = (undefined *)func_0x00011130(pcVar5)" identifier = (cast_expression "(undefined *)func_0x00011130(pcVar5)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "func_0x00011130(pcVar5)" identifier (argument_list "(pcVar5)" ( identifier ))))) ;) (if_statement "if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }" if (parenthesized_expression "((undefined *)0xff < local_19c)" ( (binary_expression "(undefined *)0xff < local_19c" (cast_expression "(undefined *)0xff" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) < identifier) )) (compound_statement "{\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }" { (expression_statement "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n")" identifier (argument_list "("argument to \'--mode\' should be in the range 0 to 255\n")" ( (string_literal ""argument to \'--mode\' should be in the range 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) }))) (break_statement "break;" break ;)) (case_statement "case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_198 < 0)" ( (binary_expression "(int)local_198 < 0" (cast_expression "(int)local_198" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--offset\'\n");" (call_expression "pr2serr("bad argument to \'--offset\'\n")" identifier (argument_list "("bad argument to \'--offset\'\n")" ( (string_literal ""bad argument to \'--offset\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (if_statement "if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((local_198 & 3) != 0)" ( (binary_expression "(local_198 & 3) != 0" (parenthesized_expression "(local_198 & 3)" ( (binary_expression "local_198 & 3" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("\'--offset\' value needs to be a multiple of 4\n");" (call_expression "pr2serr("\'--offset\' value needs to be a multiple of 4\n")" identifier (argument_list "("\'--offset\' value needs to be a multiple of 4\n")" ( (string_literal ""\'--offset\' value needs to be a multiple of 4\n"" " escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_194 < 0)" ( (binary_expression "(int)local_194 < 0" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--skip\'\n");" (call_expression "pr2serr("bad argument to \'--skip\'\n")" identifier (argument_list "("bad argument to \'--skip\'\n")" ( (string_literal ""bad argument to \'--skip\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x74:\n      goto code_r0x000113fe;" case number_literal : (goto_statement "goto code_r0x000113fe;" goto statement_identifier ;)) (case_statement "case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;" case number_literal : (expression_statement "local_188 = local_188 + 1;" (assignment_expression "local_188 = local_188 + 1" identifier = (binary_expression "local_188 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;)) })) }) while (parenthesized_expression "( true )" ( true )) ;)) (labeled_statement "code_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);" statement_identifier : (expression_statement "local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);" (assignment_expression "local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16)" identifier = (cast_expression "(void **)func_0x000111e0(*(undefined4 *)puVar16)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "func_0x000111e0(*(undefined4 *)puVar16)" identifier (argument_list "(*(undefined4 *)puVar16)" ( (pointer_expression "*(undefined4 *)puVar16" * (cast_expression "(undefined4 *)puVar16" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;)) (if_statement "if ((int)local_18c < 0) goto code_r0x0001141f;" if (parenthesized_expression "((int)local_18c < 0)" ( (binary_expression "(int)local_18c < 0" (cast_expression "(int)local_18c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto code_r0x0001141f;" goto statement_identifier ;)) (goto_statement "goto code_r0x00011330;" goto statement_identifier ;) (labeled_statement "code_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");" statement_identifier : (expression_statement "pr2serr("bad argument to \'--tlength\'\n");" (call_expression "pr2serr("bad argument to \'--tlength\'\n")" identifier (argument_list "("bad argument to \'--tlength\'\n")" ( (string_literal ""bad argument to \'--tlength\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;)) (labeled_statement "code_r0x00011606:\n  ppvVar18 = (void **)0x1;" statement_identifier : (expression_statement "ppvVar18 = (void **)0x1;" (assignment_expression "ppvVar18 = (void **)0x1" identifier = (cast_expression "(void **)0x1" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;)) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (labeled_statement "LAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );" do (compound_statement "{\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  }" { (expression_statement "uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" identifier = (binary_expression "local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" identifier ^ (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" * (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) )))))) ;) (if_statement "if (uVar25 == 0) {\n      return ppvVar18;\n    }" if (parenthesized_expression "(uVar25 == 0)" ( (binary_expression "uVar25 == 0" identifier == number_literal) )) (compound_statement "{\n      return ppvVar18;\n    }" { (return_statement "return ppvVar18;" return identifier ;) })) (expression_statement "uVar33 = FUN_00012f60();" (assignment_expression "uVar33 = FUN_00012f60()" identifier = (call_expression "FUN_00012f60()" identifier (argument_list "()" ( )))) ;) (labeled_statement "LAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);" statement_identifier : (expression_statement "ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);" (assignment_expression "ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20)" identifier = (cast_expression "(void **)((ulonglong)uVar33 >> 0x20)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((ulonglong)uVar33 >> 0x20)" ( (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);" (call_expression "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36)" identifier (argument_list "(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36)" ( (string_literal "", %d bytes per WRITE BUFFER command\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "ppvVar27 = ppvVar18;" (assignment_expression "ppvVar27 = ppvVar18" identifier = identifier) ;) (labeled_statement "LAB_00011f90:\n    local_1a0 = ppvVar27;" statement_identifier : (expression_statement "local_1a0 = ppvVar27;" (assignment_expression "local_1a0 = ppvVar27" identifier = identifier) ;)) (if_statement "if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }" if (parenthesized_expression "(local_1e0 != (stat64 *)0x0)" ( (binary_expression "local_1e0 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      close(uVar25);\n    }" { (expression_statement "close(uVar25);" (call_expression "close(uVar25)" identifier (argument_list "(uVar25)" ( identifier ))) ;) })) (labeled_statement "LAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }" statement_identifier : (if_statement "if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }" if (parenthesized_expression "((int)local_18c < (int)local_1a0)" ( (binary_expression "(int)local_18c < (int)local_1a0" (cast_expression "(int)local_18c" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      local_18c = local_1a0;\n    }" { (expression_statement "local_18c = local_1a0;" (assignment_expression "local_18c = local_1a0" identifier = identifier) ;) }))) (if_statement "if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" if (parenthesized_expression "((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0))" ( (binary_expression "(local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)" (parenthesized_expression "(local_1b0._2_1_ == '\0')" ( (binary_expression "local_1b0._2_1_ == '\0'" (field_expression "local_1b0._2_1_" identifier . field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(local_19c != (undefined *)0x0)" ( (binary_expression "local_19c != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }" { (expression_statement "ppvVar6 = (void **)(uint)(3 < local_188);" (assignment_expression "ppvVar6 = (void **)(uint)(3 < local_188)" identifier = (cast_expression "(void **)(uint)(3 < local_188)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "(uint)(3 < local_188)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(3 < local_188)" ( (binary_expression "3 < local_188" number_literal < identifier) ))))) ;) (expression_statement "ppvVar18 = &local_1c0;" (assignment_expression "ppvVar18 = &local_1c0" identifier = (pointer_expression "&local_1c0" & identifier)) ;) (expression_statement "ppvVar36 = (void **)0x0;" (assignment_expression "ppvVar36 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);" (assignment_expression "lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6)" identifier = (call_expression "sg_memalign(0x2000,0,ppvVar18,ppvVar6)" identifier (argument_list "(0x2000,0,ppvVar18,ppvVar6)" ( number_literal , number_literal , identifier , identifier )))) ;) (expression_statement "local_1e0 = (stat64 *)lVar30;" (assignment_expression "local_1e0 = (stat64 *)lVar30" identifier = (cast_expression "(stat64 *)lVar30" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }" { (expression_statement "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");" (call_expression "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n")" identifier (argument_list "("sg_ses_microcode: out of memory (data-in buffer)\n")" ( (string_literal ""sg_ses_microcode: out of memory (data-in buffer)\n"" " string_content escape_sequence ") ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_17,99);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_17,99)" identifier = (call_expression "CONCAT44(extraout_EDX_17,99)" identifier (argument_list "(extraout_EDX_17,99)" ( identifier , number_literal )))) ;) }) (else_clause "else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" else (compound_statement "{\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" { (if_statement "if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" if (parenthesized_expression "((char)local_1b0 == '\0')" ( (binary_expression "(char)local_1b0 == '\0'" (cast_expression "(char)local_1b0" ( (type_descriptor "char" primitive_type) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }" { (expression_statement "iVar15 = 1;" (assignment_expression "iVar15 = 1" identifier = number_literal) ;) (if_statement "if (0 < local_188) {\n            iVar15 = local_188;\n          }" if (parenthesized_expression "(0 < local_188)" ( (binary_expression "0 < local_188" number_literal < identifier) )) (compound_statement "{\n            iVar15 = local_188;\n          }" { (expression_statement "iVar15 = local_188;" (assignment_expression "iVar15 = local_188" identifier = identifier) ;) })) (expression_statement "lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);" (assignment_expression "lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" identifier = (call_expression "sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" identifier (argument_list "(local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" ( identifier , number_literal , number_literal , identifier , number_literal , number_literal , (pointer_expression "&local_1c4" & identifier) , number_literal , (binary_expression "iVar15 + -1" identifier + number_literal) )))) ;) (expression_statement "ppvVar27 = (void **)lVar30;" (assignment_expression "ppvVar27 = (void **)lVar30" identifier = (cast_expression "(void **)lVar30" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (if_statement "if (ppvVar27 != (void **)0x0) goto LAB_00011e81;" if (parenthesized_expression "(ppvVar27 != (void **)0x0)" ( (binary_expression "ppvVar27 != (void **)0x0" identifier != (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2)" identifier = (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" * (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 2)" ( (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar22 = (void **)(0x2000 - local_1c4);" (assignment_expression "ppvVar22 = (void **)(0x2000 - local_1c4)" identifier = (cast_expression "(void **)(0x2000 - local_1c4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(0x2000 - local_1c4)" ( (binary_expression "0x2000 - local_1c4" number_literal - identifier) )))) ;) (expression_statement "ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);" (assignment_expression "ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" identifier = (cast_expression "(void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (binary_expression "(ushort)(uVar1 << 8 | uVar1 >> 8) + 4" (call_expression "(ushort)(uVar1 << 8 | uVar1 >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) ))) + number_literal) )))) ;) (expression_statement "puVar16 = extraout_ECX_05;" (assignment_expression "puVar16 = extraout_ECX_05" identifier = identifier) ;) (expression_statement "ppvVar28 = ppvVar8;" (assignment_expression "ppvVar28 = ppvVar8" identifier = identifier) ;) (if_statement "if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;" if (parenthesized_expression "(ppvVar8 < (void **)0x2001)" ( (binary_expression "ppvVar8 < (void **)0x2001" identifier < (cast_expression "(void **)0x2001" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00011b07;" goto statement_identifier ;)) (expression_statement "ppvVar28 = (void **)0x2000;" (assignment_expression "ppvVar28 = (void **)0x2000" identifier = (cast_expression "(void **)0x2000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "ppvVar36 = (void **)0x2000;" (assignment_expression "ppvVar36 = (void **)0x2000" identifier = (cast_expression "(void **)0x2000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);" (assignment_expression "uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" identifier = (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" identifier (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" ( (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" " string_content escape_sequence ") , number_literal , identifier , number_literal )))) ;) (expression_statement "uVar25 = (uint)((ulonglong)uVar33 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)uVar33 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar33 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar33 >> 0x20)" ( (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "ppvVar12 = (void **)uVar33;" (assignment_expression "ppvVar12 = (void **)uVar33" identifier = (cast_expression "(void **)uVar33" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "puVar16 = extraout_ECX_06;" (assignment_expression "puVar16 = extraout_ECX_06" identifier = identifier) ;) (if_statement "if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;" if (parenthesized_expression "((int)ppvVar22 < 0x2000)" ( (binary_expression "(int)ppvVar22 < 0x2000" (cast_expression "(int)ppvVar22" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_00011ddf;" goto statement_identifier ;)) }) (else_clause "else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" else (compound_statement "{\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" { (expression_statement "puVar21 = &DAT_00016020;" (assignment_expression "puVar21 = &DAT_00016020" identifier = (pointer_expression "&DAT_00016020" & identifier)) ;) (expression_statement "psVar14 = local_1e0;" (assignment_expression "psVar14 = local_1e0" identifier = identifier) ;) (for_statement "for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }" for ( (assignment_expression "iVar15 = 0x12" identifier = number_literal) ; (binary_expression "iVar15 != 0" identifier != number_literal) ; (assignment_expression "iVar15 = iVar15 + -1" identifier = (binary_expression "iVar15 + -1" identifier + number_literal)) ) (compound_statement "{\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }" { (expression_statement "*(undefined4 *)&psVar14->st_dev = *puVar21;" (assignment_expression "*(undefined4 *)&psVar14->st_dev = *puVar21" (pointer_expression "*(undefined4 *)&psVar14->st_dev" * (cast_expression "(undefined4 *)&psVar14->st_dev" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->st_dev" & (field_expression "psVar14->st_dev" identifier -> field_identifier)))) = (pointer_expression "*puVar21" * identifier)) ;) (expression_statement "puVar21 = puVar21 + (uint)bVar29 * -2 + 1;" (assignment_expression "puVar21 = puVar21 + (uint)bVar29 * -2 + 1" identifier = (binary_expression "puVar21 + (uint)bVar29 * -2 + 1" (binary_expression "puVar21 + (uint)bVar29 * -2" identifier + (binary_expression "(uint)bVar29 * -2" (cast_expression "(uint)bVar29" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);" (assignment_expression "psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4)" identifier = (cast_expression "(stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar14 + (uint)bVar29 * -8 + 4)" ( (binary_expression "(int)psVar14 + (uint)bVar29 * -8 + 4" (binary_expression "(int)psVar14 + (uint)bVar29 * -8" (cast_expression "(int)psVar14" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uint)bVar29 * -8" (cast_expression "(uint)bVar29" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) })) (expression_statement "ppvVar22 = (void **)0x48;" (assignment_expression "ppvVar22 = (void **)0x48" identifier = (cast_expression "(void **)0x48" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "local_1c4 = 0x1fb8;" (assignment_expression "local_1c4 = 0x1fb8" identifier = number_literal) ;) (expression_statement "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2)" identifier = (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" * (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 2)" ( (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);" (assignment_expression "ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" identifier = (cast_expression "(void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (binary_expression "(ushort)(uVar1 << 8 | uVar1 >> 8) + 4" (call_expression "(ushort)(uVar1 << 8 | uVar1 >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) ))) + number_literal) )))) ;) (expression_statement "puVar16 = (undefined *)0x0;" (assignment_expression "puVar16 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppvVar28 = ppvVar27;" (assignment_expression "ppvVar28 = ppvVar27" identifier = identifier) ;) (if_statement "if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" if (parenthesized_expression "(ppvVar27 < (void **)0x2001)" ( (binary_expression "ppvVar27 < (void **)0x2001" identifier < (cast_expression "(void **)0x2001" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }" { (labeled_statement "LAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" statement_identifier : (expression_statement "uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)lVar30 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar30 >> 0x20)" ( (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "ppvVar12 = (void **)lVar30;" (assignment_expression "ppvVar12 = (void **)lVar30" identifier = (cast_expression "(void **)lVar30" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "ppvVar8 = ppvVar18;" (assignment_expression "ppvVar8 = ppvVar18" identifier = identifier) ;) (expression_statement "ppvVar27 = ppvVar6;" (assignment_expression "ppvVar27 = ppvVar6" identifier = identifier) ;) (if_statement "if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;" if (parenthesized_expression "((int)ppvVar22 < (int)ppvVar28)" ( (binary_expression "(int)ppvVar22 < (int)ppvVar28" (cast_expression "(int)ppvVar22" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00011ddf;" goto statement_identifier ;)) }) (else_clause "else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" else (compound_statement "{\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" { (expression_statement "ppvVar28 = (void **)0x2000;" (assignment_expression "ppvVar28 = (void **)0x2000" identifier = (cast_expression "(void **)0x2000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);" (assignment_expression "ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" identifier = (cast_expression "(void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" identifier (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" ( (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" " string_content escape_sequence ") , number_literal , identifier , identifier ))))) ;) (labeled_statement "LAB_00011ddf:\n            ppvVar36 = ppvVar22;" statement_identifier : (expression_statement "ppvVar36 = ppvVar22;" (assignment_expression "ppvVar36 = ppvVar22" identifier = identifier) ;)) (expression_statement "ppvVar8 = ppvVar28;" (assignment_expression "ppvVar8 = ppvVar28" identifier = identifier) ;) (expression_statement "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);" (call_expression "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12)" identifier (argument_list "("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12)" ( (string_literal ""<<< warning response too short [actually got %d but need %d]>>>\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "puVar16 = extraout_ECX_07;" (assignment_expression "puVar16 = extraout_ECX_07" identifier = identifier) ;) (expression_statement "uVar25 = extraout_EDX_05;" (assignment_expression "uVar25 = extraout_EDX_05" identifier = identifier) ;) (expression_statement "ppvVar28 = ppvVar22;" (assignment_expression "ppvVar28 = ppvVar22" identifier = identifier) ;) (expression_statement "ppvVar27 = ppvVar12;" (assignment_expression "ppvVar27 = ppvVar12" identifier = identifier) ;) }))) (if_statement "if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }" if (parenthesized_expression "((int)ppvVar28 < 8)" ( (binary_expression "(int)ppvVar28 < 8" (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }" { (expression_statement "pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);" (call_expression "pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27)" identifier (argument_list "("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27)" ( (string_literal ""Download microcode status dpage too short\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_10,99);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_10,99)" identifier = (call_expression "CONCAT44(extraout_EDX_10,99)" identifier (argument_list "(extraout_EDX_10,99)" ( identifier , number_literal )))) ;) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;) })) }))) (if_statement "if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }" if (parenthesized_expression "((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0))))" ( (binary_expression "(2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))" (parenthesized_expression "(2 < local_188)" ( (binary_expression "2 < local_188" number_literal < identifier) )) || (parenthesized_expression "(((char)local_1b0 != '\0' && (local_188 != 0)))" ( (parenthesized_expression "((char)local_1b0 != '\0' && (local_188 != 0))" ( (binary_expression "(char)local_1b0 != '\0' && (local_188 != 0)" (binary_expression "(char)local_1b0 != '\0'" (cast_expression "(char)local_1b0" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) && (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) ))) )) ))) )) (compound_statement "{\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }" { (expression_statement "uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar25 = *(uint *)((int)&local_1e0->st_dev + 4)" identifier = (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" * (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 4)" ( (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);" (assignment_expression "ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" identifier = (cast_expression "(void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" ( (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" ( (binary_expression "uVar25 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" ( (binary_expression "uVar25 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar25 << 0x18" identifier << number_literal)) )))) ;) (expression_statement "ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);" (assignment_expression "ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" identifier = (binary_expression "(void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" (cast_expression "(void **)(uint)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)((int)&local_1e0->st_dev + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 1)" ( (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar36 = ppvVar28;" (assignment_expression "ppvVar36 = ppvVar28" identifier = identifier) ;) (expression_statement "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);" (call_expression "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27)" identifier (argument_list "("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27)" ( (string_literal ""rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "puVar16 = extraout_ECX_08;" (assignment_expression "puVar16 = extraout_ECX_08" identifier = identifier) ;) (expression_statement "uVar25 = extraout_EDX_09;" (assignment_expression "uVar25 = extraout_EDX_09" identifier = identifier) ;) })) (expression_statement "uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar34 = *(uint *)((int)&local_1e0->st_dev + 4)" identifier = (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" * (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 4)" ( (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (if_statement "if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" if (parenthesized_expression "(local_19c == (undefined *)0x0)" ( (binary_expression "local_19c == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }" { (expression_statement "puts("Download microcode status diagnostic page:");" (call_expression "puts("Download microcode status diagnostic page:")" identifier (argument_list "("Download microcode status diagnostic page:")" ( (string_literal ""Download microcode status diagnostic page:"" " string_content ") ))) ;) (expression_statement "cVar4 = *(char *)((int)&local_1e0->st_dev + 1);" (assignment_expression "cVar4 = *(char *)((int)&local_1e0->st_dev + 1)" identifier = (pointer_expression "*(char *)((int)&local_1e0->st_dev + 1)" * (cast_expression "(char *)((int)&local_1e0->st_dev + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 1)" ( (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar28 = ppvVar28 + -2;" (assignment_expression "ppvVar28 = ppvVar28 + -2" identifier = (binary_expression "ppvVar28 + -2" identifier + number_literal)) ;) (expression_statement "uVar7 = extraout_ECX_10;" (assignment_expression "uVar7 = extraout_ECX_10" identifier = identifier) ;) (if_statement "if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }" if (parenthesized_expression "(((uint)ppvVar28 & 0xf) != 0)" ( (binary_expression "((uint)ppvVar28 & 0xf) != 0" (parenthesized_expression "((uint)ppvVar28 & 0xf)" ( (binary_expression "(uint)ppvVar28 & 0xf" (cast_expression "(uint)ppvVar28" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }" { (expression_statement "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);" (call_expression "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28)" identifier (argument_list "("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28)" ( (string_literal ""Found %d Download microcode status descriptors, but there is residual\n"" " string_content escape_sequence ") , (binary_expression "(int)ppvVar28 >> 4" (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) , identifier , identifier ))) ;) (expression_statement "uVar7 = extraout_ECX_13;" (assignment_expression "uVar7 = extraout_ECX_13" identifier = identifier) ;) })) (expression_statement "__printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);" (call_expression "__printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7)" identifier (argument_list "(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7)" ( number_literal , (string_literal ""  number of secondary subenclosures: %d\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "__printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);" (call_expression "__printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18)" identifier (argument_list "(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18)" ( number_literal , (string_literal ""  generation code: 0x%x\n"" " string_content escape_sequence ") , (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18" (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8" (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8" (binary_expression "uVar34 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar34 & 0xff0000) >> 8" (parenthesized_expression "(uVar34 & 0xff0000)" ( (binary_expression "uVar34 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar34 & 0xff00) << 8" (parenthesized_expression "(uVar34 & 0xff00)" ( (binary_expression "uVar34 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar34 << 0x18" identifier << number_literal)) ))) ;) (expression_statement "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);" (assignment_expression "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" identifier = (cast_expression "(stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" ( (binary_expression "&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2" (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier)) + (binary_expression "((int)ppvVar28 >> 4) * 2" (parenthesized_expression "((int)ppvVar28 >> 4)" ( (binary_expression "(int)ppvVar28 >> 4" (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) * number_literal)) )))) ;) (for_statement "for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }" for ( (assignment_expression "psVar14 = local_1e0" identifier = identifier) ; (comma_expression "lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14" (assignment_expression "lVar30 = ZEXT48(local_1e0) << 0x20" identifier = (binary_expression "ZEXT48(local_1e0) << 0x20" (call_expression "ZEXT48(local_1e0)" identifier (argument_list "(local_1e0)" ( identifier ))) << number_literal)) , (comma_expression "local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14" (assignment_expression "local_1e0 = (stat64 *)" [primary]"" identifier = (cast_expression "(stat64 *)" [primary]"" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "" [primary]"" " string_content "))) , (binary_expression "local_1d4 != psVar14" identifier != identifier))) ; (assignment_expression "psVar14 = (stat64 *)&psVar14->st_mode" identifier = (cast_expression "(stat64 *)&psVar14->st_mode" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->st_mode" & (field_expression "psVar14->st_mode" identifier -> field_identifier)))) ) (compound_statement "{\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }" { (expression_statement "cVar4 = *(char *)((int)&psVar14->__pad1 + 1);" (assignment_expression "cVar4 = *(char *)((int)&psVar14->__pad1 + 1)" identifier = (pointer_expression "*(char *)((int)&psVar14->__pad1 + 1)" * (cast_expression "(char *)((int)&psVar14->__pad1 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 1)" ( (binary_expression "(int)&psVar14->__pad1 + 1" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "pcVar10 = "";" (assignment_expression "pcVar10 = """ identifier = (string_literal """" " ")) ;) (if_statement "if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              pcVar10 = " [primary]";\n            }" { (expression_statement "pcVar10 = " [primary]";" (assignment_expression "pcVar10 = " [primary]"" identifier = (string_literal "" [primary]"" " string_content ")) ;) })) (expression_statement "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);" (call_expression "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10)" identifier (argument_list "(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10)" ( number_literal , (string_literal ""   subenclosure identifier: %d%s\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);" (assignment_expression "uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2)" identifier = (binary_expression "(uint)*(byte *)((int)&psVar14->__pad1 + 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)((int)&psVar14->__pad1 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 2)" ( (binary_expression "(int)&psVar14->__pad1 + 2" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) ))))) ;) (for_statement "for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" for ( (assignment_expression "puVar11 = &DAT_00016080" identifier = (pointer_expression "&DAT_00016080" & identifier)) ; (comma_expression "pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0" (assignment_expression "pcVar10 = (char *)puVar11[1]" identifier = (cast_expression "(char *)puVar11[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar11[1]" identifier [ number_literal ]))) , (binary_expression "pcVar10 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ; (assignment_expression "puVar11 = puVar11 + 2" identifier = (binary_expression "puVar11 + 2" identifier + number_literal)) ) (compound_statement "{\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" { (if_statement "if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" if (parenthesized_expression "(uVar25 == *puVar11)" ( (binary_expression "uVar25 == *puVar11" identifier == (pointer_expression "*puVar11" * identifier)) )) (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" { (if_statement "if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }" if (parenthesized_expression "(*pcVar10 != '\0')" ( (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }" { (expression_statement "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);" (call_expression "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25)" identifier (argument_list "(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25)" ( number_literal , (string_literal ""     download microcode status: %s [0x%x]\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3))" identifier (argument_list "(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3))" ( number_literal , (string_literal ""     download microcode additional status: 0x%x\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined1 *)((int)&psVar14->__pad1 + 3)" * (cast_expression "(undefined1 *)((int)&psVar14->__pad1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 3)" ( (binary_expression "(int)&psVar14->__pad1 + 3" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar7 = extraout_EDX_15;" (assignment_expression "uVar7 = extraout_EDX_15" identifier = identifier) ;) (goto_statement "goto LAB_0001225d;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) })) (expression_statement "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3))" identifier (argument_list "(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3))" ( number_literal , (string_literal ""     download microcode status: 0x%x [additional status: 0x%x]\n"" " string_content escape_sequence ") , identifier , (pointer_expression "*(undefined1 *)((int)&psVar14->__pad1 + 3)" * (cast_expression "(undefined1 *)((int)&psVar14->__pad1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 3)" ( (binary_expression "(int)&psVar14->__pad1 + 3" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar7 = extraout_EDX_13;" (assignment_expression "uVar7 = extraout_EDX_13" identifier = identifier) ;) (labeled_statement "LAB_0001225d:\n            uVar25 = psVar14->__st_ino;" statement_identifier : (expression_statement "uVar25 = psVar14->__st_ino;" (assignment_expression "uVar25 = psVar14->__st_ino" identifier = (field_expression "psVar14->__st_ino" identifier -> field_identifier)) ;)) (expression_statement "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);" (call_expression "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7)" identifier (argument_list "(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7)" ( number_literal , (string_literal ""     download microcode maximum size: %u bytes\n"" " string_content escape_sequence ") , (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" ( (binary_expression "uVar25 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" ( (binary_expression "uVar25 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar25 << 0x18" identifier << number_literal)) , identifier ))) ;) (expression_statement "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));" (call_expression "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3))" identifier (argument_list "(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3))" ( number_literal , (string_literal ""     download microcode expected buffer id: 0x%x\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined1 *)((int)&psVar14->st_mode + 3)" * (cast_expression "(undefined1 *)((int)&psVar14->st_mode + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->st_mode + 3)" ( (binary_expression "(int)&psVar14->st_mode + 3" (cast_expression "(int)&psVar14->st_mode" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->st_mode" & (field_expression "psVar14->st_mode" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar25 = psVar14->st_nlink;" (assignment_expression "uVar25 = psVar14->st_nlink" identifier = (field_expression "psVar14->st_nlink" identifier -> field_identifier)) ;) (expression_statement "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);" (call_expression "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18)" identifier (argument_list "(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18)" ( number_literal , (string_literal ""     download microcode expected buffer id offset: %u\n"" " string_content escape_sequence ") , (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" ( (binary_expression "uVar25 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" ( (binary_expression "uVar25 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar25 << 0x18" identifier << number_literal)) ))) ;) (expression_statement "local_1e0 = extraout_EDX_14;" (assignment_expression "local_1e0 = extraout_EDX_14" identifier = identifier) ;) })) }) (else_clause "else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" else (compound_statement "{\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" { (expression_statement "puVar24 = local_19c;" (assignment_expression "puVar24 = local_19c" identifier = identifier) ;) (if_statement "if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" if (parenthesized_expression "((byte)local_1d4 == '\0')" ( (binary_expression "(byte)local_1d4 == '\0'" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }" { (labeled_statement "LAB_0001201a:\n            psVar14 = (stat64 *)0x0;" statement_identifier : (expression_statement "psVar14 = (stat64 *)0x0;" (assignment_expression "psVar14 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "puVar16 = puVar24;" (assignment_expression "puVar16 = puVar24" identifier = identifier) ;) }) (else_clause "else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" else (compound_statement "{\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (if_statement "if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }" if (parenthesized_expression "(0 < (int)local_1a8)" ( (binary_expression "0 < (int)local_1a8" number_literal < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }" { (for_statement "for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }" for ( ; (binary_expression "iVar15 < (int)local_1a0" identifier < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) ; (assignment_expression "iVar15 = (int)ppvVar18 + iVar15" identifier = (binary_expression "(int)ppvVar18 + iVar15" (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier) + identifier)) ) (compound_statement "{\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }" { (expression_statement "ppvVar8 = local_1a8;" (assignment_expression "ppvVar8 = local_1a8" identifier = identifier) ;) (expression_statement "ppvVar18 = local_1a8;" (assignment_expression "ppvVar18 = local_1a8" identifier = identifier) ;) (if_statement "if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }" if (parenthesized_expression "((int)local_1a0 - iVar15 <= (int)local_1a8)" ( (binary_expression "(int)local_1a0 - iVar15 <= (int)local_1a8" (binary_expression "(int)local_1a0 - iVar15" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) <= (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }" { (expression_statement "local_1e9 = (byte)local_1d4;" (assignment_expression "local_1e9 = (byte)local_1d4" identifier = (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "ppvVar8 = (void **)((uint)local_1d4 & 0xff);" (assignment_expression "ppvVar8 = (void **)((uint)local_1d4 & 0xff)" identifier = (cast_expression "(void **)((uint)local_1d4 & 0xff)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((uint)local_1d4 & 0xff)" ( (binary_expression "(uint)local_1d4 & 0xff" (cast_expression "(uint)local_1d4" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "ppvVar18 = (void **)((int)local_1a0 - iVar15);" (assignment_expression "ppvVar18 = (void **)((int)local_1a0 - iVar15)" identifier = (cast_expression "(void **)((int)local_1a0 - iVar15)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)local_1a0 - iVar15)" ( (binary_expression "(int)local_1a0 - iVar15" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) )))) ;) })) (if_statement "if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }" { (expression_statement "ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);" (assignment_expression "ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" identifier = (cast_expression "(void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" identifier (argument_list "("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" ( (string_literal ""bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"" " string_content escape_sequence ") , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))))) ;) })) (expression_statement "ppvVar36 = (void **)&local_1b0;" (assignment_expression "ppvVar36 = (void **)&local_1b0" identifier = (cast_expression "(void **)&local_1b0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&local_1b0" & identifier))) ;) (expression_statement "ppvVar27 = ppvVar8;" (assignment_expression "ppvVar27 = ppvVar8" identifier = identifier) ;) (expression_statement "lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);" (assignment_expression "lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" identifier = (call_expression "FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" identifier (argument_list "((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" ( (binary_expression "(int)&local_1d8->st_dev + iVar15" (cast_expression "(int)&local_1d8->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1d8->st_dev" & (field_expression "local_1d8->st_dev" identifier -> field_identifier))) + identifier) , identifier , (pointer_expression "&local_1bc" & identifier) , identifier , identifier )))) ;) (expression_statement "uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)lVar30 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar30 >> 0x20)" ( (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)lVar30 != 0) goto LAB_00011e81;" if (parenthesized_expression "((int)lVar30 != 0)" ( (binary_expression "(int)lVar30 != 0" (cast_expression "(int)lVar30" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) })) (expression_statement "puVar24 = (undefined *)0x0;" (assignment_expression "puVar24 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "lVar30 = (ulonglong)uVar25 << 0x20;" (assignment_expression "lVar30 = (ulonglong)uVar25 << 0x20" identifier = (binary_expression "(ulonglong)uVar25 << 0x20" (cast_expression "(ulonglong)uVar25" ( (type_descriptor "ulonglong" type_identifier) ) identifier) << number_literal)) ;) (if_statement "if (local_1b0._3_1_ == '\0') goto LAB_00011e81;" if (parenthesized_expression "(local_1b0._3_1_ == '\0')" ( (binary_expression "local_1b0._3_1_ == '\0'" (field_expression "local_1b0._3_1_" identifier . field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "local_19c = (undefined *)0xf;" (assignment_expression "local_19c = (undefined *)0xf" identifier = (cast_expression "(undefined *)0xf" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }" { (expression_statement "pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);" (call_expression "pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27)" identifier (argument_list "("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27)" ( (string_literal ""sending Activate deferred microcode [0xf]\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) })) (goto_statement "goto LAB_0001201a;" goto statement_identifier ;) })) (expression_statement "psVar14 = local_1d8;" (assignment_expression "psVar14 = local_1d8" identifier = identifier) ;) (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" identifier = identifier) ;) (if_statement "if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }" { (expression_statement "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);" (call_expression "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0)" identifier (argument_list "("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0)" ( (string_literal ""single: mode=0x%x, id=%d, offset=%d, len=%d\n"" " string_content escape_sequence ") , identifier , identifier , identifier , identifier ))) ;) (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" identifier = identifier) ;) (expression_statement "puVar16 = extraout_ECX_12;" (assignment_expression "puVar16 = extraout_ECX_12" identifier = identifier) ;) })) }))) (expression_statement "lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);" (assignment_expression "lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" identifier = (call_expression "FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" identifier (argument_list "(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" ( identifier , identifier , (pointer_expression "&local_1bc" & identifier) , identifier , number_literal , (pointer_expression "&local_1b0" & identifier) , identifier , identifier )))) ;) }))) }))) }) (else_clause "else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" else (compound_statement "{\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" { (expression_statement "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);" (call_expression "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36)" identifier (argument_list "("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36)" ( (string_literal ""Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "lVar30 = (ulonglong)extraout_EDX_11 << 0x20;" (assignment_expression "lVar30 = (ulonglong)extraout_EDX_11 << 0x20" identifier = (binary_expression "(ulonglong)extraout_EDX_11 << 0x20" (cast_expression "(ulonglong)extraout_EDX_11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) << number_literal)) ;) }))) (labeled_statement "LAB_00011e81:\n    uVar20 = (undefined4)lVar30;" statement_identifier : (expression_statement "uVar20 = (undefined4)lVar30;" (assignment_expression "uVar20 = (undefined4)lVar30" identifier = (cast_expression "(undefined4)lVar30" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;)) (if_statement "if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }" if (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" ( (binary_expression "local_1d8 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }" { (labeled_statement "LAB_000118d4:\n      free(local_1d8);" statement_identifier : (expression_statement "free(local_1d8);" (call_expression "free(local_1d8)" identifier (argument_list "(local_1d8)" ( identifier ))) ;)) (expression_statement "lVar30 = CONCAT44(extraout_EDX_00,uVar20);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_00,uVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_00,uVar20)" identifier (argument_list "(extraout_EDX_00,uVar20)" ( identifier , identifier )))) ;) })) (labeled_statement "LAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);" statement_identifier : (expression_statement "uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20)" identifier = (call_expression "(undefined4)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(undefined4)" ( identifier )) (argument_list "((ulonglong)lVar30 >> 0x20)" ( (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "iVar15 = (int)lVar30;" (assignment_expression "iVar15 = (int)lVar30" identifier = (cast_expression "(int)lVar30" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }" if (parenthesized_expression "(local_1b8 != (void *)0x0)" ( (binary_expression "local_1b8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }" { (expression_statement "free(local_1b8);" (call_expression "free(local_1b8)" identifier (argument_list "(local_1b8)" ( identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_01;" (assignment_expression "uVar7 = extraout_EDX_01" identifier = identifier) ;) })) (if_statement "if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }" if (parenthesized_expression "(local_1c0 != (void *)0x0)" ( (binary_expression "local_1c0 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }" { (expression_statement "free(local_1c0);" (call_expression "free(local_1c0)" identifier (argument_list "(local_1c0)" ( identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_02;" (assignment_expression "uVar7 = extraout_EDX_02" identifier = identifier) ;) })) (expression_statement "uVar33 = CONCAT44(uVar7,iVar15);" (assignment_expression "uVar33 = CONCAT44(uVar7,iVar15)" identifier = (call_expression "CONCAT44(uVar7,iVar15)" identifier (argument_list "(uVar7,iVar15)" ( identifier , identifier )))) ;) (if_statement "if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }" if (parenthesized_expression "(-1 < (int)local_1dc)" ( (binary_expression "-1 < (int)local_1dc" number_literal < (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }" { (expression_statement "uVar31 = sg_cmds_close_device(local_1dc);" (assignment_expression "uVar31 = sg_cmds_close_device(local_1dc)" identifier = (call_expression "sg_cmds_close_device(local_1dc)" identifier (argument_list "(local_1dc)" ( identifier )))) ;) (expression_statement "uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);" (assignment_expression "uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15)" identifier = (call_expression "CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15)" identifier (argument_list "((int)((ulonglong)uVar31 >> 0x20),iVar15)" ( (cast_expression "(int)((ulonglong)uVar31 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar31 >> 0x20)" ( (binary_expression "(ulonglong)uVar31 >> 0x20" (cast_expression "(ulonglong)uVar31" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , identifier )))) ;) (if_statement "if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }" if (parenthesized_expression "((int)uVar31 < 0)" ( (binary_expression "(int)uVar31 < 0" (cast_expression "(int)uVar31" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }" { (expression_statement "iVar13 = -(int)uVar31;" (assignment_expression "iVar13 = -(int)uVar31" identifier = (unary_expression "-(int)uVar31" - (cast_expression "(int)uVar31" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar7 = safe_strerror(iVar13);" (assignment_expression "uVar7 = safe_strerror(iVar13)" identifier = (call_expression "safe_strerror(iVar13)" identifier (argument_list "(iVar13)" ( identifier )))) ;) (expression_statement "pr2serr("close error: %s\n",uVar7);" (call_expression "pr2serr("close error: %s\n",uVar7)" identifier (argument_list "("close error: %s\n",uVar7)" ( (string_literal ""close error: %s\n"" " string_content escape_sequence ") , identifier ))) ;) (expression_statement "uVar33 = CONCAT44(extraout_EDX_04,iVar15);" (assignment_expression "uVar33 = CONCAT44(extraout_EDX_04,iVar15)" identifier = (call_expression "CONCAT44(extraout_EDX_04,iVar15)" identifier (argument_list "(extraout_EDX_04,iVar15)" ( identifier , identifier )))) ;) (if_statement "if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }" if (parenthesized_expression "(iVar15 == 0)" ( (binary_expression "iVar15 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar33 = sg_convert_errno(iVar13);\n        }" { (expression_statement "uVar33 = sg_convert_errno(iVar13);" (assignment_expression "uVar33 = sg_convert_errno(iVar13)" identifier = (call_expression "sg_convert_errno(iVar13)" identifier (argument_list "(iVar13)" ( identifier )))) ;) })) })) })) (expression_statement "ppvVar18 = (void **)uVar33;" (assignment_expression "ppvVar18 = (void **)uVar33" identifier = (cast_expression "(void **)uVar33" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (if_statement "if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" if (parenthesized_expression "((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0'))" ( (binary_expression "(local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')" (parenthesized_expression "(local_188 == 0)" ( (binary_expression "local_188 == 0" identifier == number_literal) )) && (parenthesized_expression "(cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')" ( (comma_expression "cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0'" (assignment_expression "cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" identifier = (call_expression "sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" identifier (argument_list "("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" ( (string_literal ""sg_ses_mocrocode failed: "" " string_content ") , identifier , (cast_expression "(int)((ulonglong)uVar33 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar33 >> 0x20)" ( (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) )))) , (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" { (expression_statement "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");" (call_expression "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" identifier (argument_list "("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" ( (string_literal ""Some error occurred, try again with \'-v\' or \'-vv\' for more information\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) })) (if_statement "if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }" if (parenthesized_expression "((int)ppvVar18 < 0)" ( (binary_expression "(int)ppvVar18 < 0" (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      ppvVar18 = (void **)0x63;\n    }" { (expression_statement "ppvVar18 = (void **)0x63;" (assignment_expression "ppvVar18 = (void **)0x63" identifier = (cast_expression "(void **)0x63" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint main(int argc,char **argv)\n\n{\n  uint8_t uVar1;\n  ushort uVar2;\n  bool bVar3;\n  undefined *puVar4;\n  undefined *puVar5;\n  undefined *puVar6;\n  char cVar7;\n  ushort **ppuVar8;\n  char *pcVar9;\n  char *pcVar10;\n  opts_t *poVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  opts_t *op;\n  int *piVar14;\n  char *pcVar15;\n  diag_page_code *pdVar16;\n  opts_t *poVar17;\n  int iVar18;\n  char **extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  opts_t *extraout_ECX_03;\n  char **extraout_ECX_04;\n  char **ppcVar19;\n  int iVar20;\n  opts_t *op_00;\n  opts_t *extraout_ECX_05;\n  opts_t *extraout_ECX_06;\n  opts_t *extraout_ECX_07;\n  opts_t *extraout_ECX_08;\n  opts_t *extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  opts_t *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar21;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  uint extraout_EDX_04;\n  undefined4 extraout_EDX_05;\n  uint extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  undefined4 extraout_EDX_09;\n  uint extraout_EDX_10;\n  undefined4 extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  uint extraout_EDX_13;\n  undefined4 extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  stat64 *extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  undefined4 extraout_EDX_20;\n  undefined4 extraout_EDX_21;\n  opts_t *poVar22;\n  mode_s *pmVar23;\n  undefined4 uVar24;\n  uint8_t *puVar25;\n  opts_t *poVar26;\n  undefined4 uVar27;\n  uint uVar28;\n  opts_t *poVar29;\n  _Bool *off_off;\n  stat64 *psVar30;\n  opts_t *poVar31;\n  int in_GS_OFFSET;\n  byte bVar32;\n  longlong lVar33;\n  undefined8 uVar34;\n  __off64_t _Var35;\n  undefined8 uVar36;\n  _Bool last;\n  undefined4 uVar37;\n  opts_t *poVar38;\n  stat64 *psVar39;\n  char *local_1f0;\n  byte local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  option *local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  dout_buff_t local_1bc;\n  opts_t local_1b0;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  int *local_18;\n  \n  ppcVar19 = argv;\n  iVar20 = argc;\n  puVar5 = PTR_optarg_00015ffc;\n  bVar32 = 0;\n  local_18 = &argc;\n  local_1d4 = (stat64 *)argv;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc.doutp = (uint8_t *)0x0;\n  local_1bc.free_doutp = (uint8_t *)0x0;\n  local_1bc.dout_len = 0;\n  local_1f0 = (char *)0x0;\n  poVar22 = &local_1b0;\n  for (iVar18 = 0xb; iVar18 != 0; iVar18 = iVar18 + -1) {\n    poVar22->dry_run = false;\n    poVar22->ealsd = false;\n    poVar22->mc_non = false;\n    poVar22->bpw_then_activate = false;\n    poVar22 = (opts_t *)&poVar22->mc_len_given;\n  }\n  psVar30 = &local_184;\n  local_1e8 = 0;\n  local_1dc = long_options;\n  pcVar15 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = 0;\n  bVar3 = false;\nLAB_00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);\n    puVar6 = PTR_optarg_00015ffc;\n    puVar4 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar15;\n    local_1d8 = psVar30;\n    if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }\n    switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }\n  } while( true );\n_L157:\n  local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5);\n  if (local_1b0.mc_tlen < 0) goto code_r0x0001141f;\n  goto LAB_00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\nLAB_00011606:\n  poVar22 = (opts_t *)0x1;\n  local_1e0 = (stat64 *)pcVar15;\nLAB_0001160b:\n  do {\n    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar28 == 0) {\n      return (int)poVar22;\n    }\n    uVar36 = __stack_chk_fail_local();\nLAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);\n    poVar29 = poVar22;\nLAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }\nLAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }\n    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }\nLAB_00011e81:\n    uVar24 = (undefined4)lVar33;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }\nLAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);\n    iVar20 = (int)lVar33;\n    if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }\n    uVar36 = CONCAT44(uVar13,iVar20);\n    if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }\n    poVar22 = (opts_t *)uVar36;\n    if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }\n  } while( true );\n}\n\n" comment (function_definition "int main(int argc,char **argv)\n\n{\n  uint8_t uVar1;\n  ushort uVar2;\n  bool bVar3;\n  undefined *puVar4;\n  undefined *puVar5;\n  undefined *puVar6;\n  char cVar7;\n  ushort **ppuVar8;\n  char *pcVar9;\n  char *pcVar10;\n  opts_t *poVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  opts_t *op;\n  int *piVar14;\n  char *pcVar15;\n  diag_page_code *pdVar16;\n  opts_t *poVar17;\n  int iVar18;\n  char **extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  opts_t *extraout_ECX_03;\n  char **extraout_ECX_04;\n  char **ppcVar19;\n  int iVar20;\n  opts_t *op_00;\n  opts_t *extraout_ECX_05;\n  opts_t *extraout_ECX_06;\n  opts_t *extraout_ECX_07;\n  opts_t *extraout_ECX_08;\n  opts_t *extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  opts_t *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar21;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  uint extraout_EDX_04;\n  undefined4 extraout_EDX_05;\n  uint extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  undefined4 extraout_EDX_09;\n  uint extraout_EDX_10;\n  undefined4 extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  uint extraout_EDX_13;\n  undefined4 extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  stat64 *extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  undefined4 extraout_EDX_20;\n  undefined4 extraout_EDX_21;\n  opts_t *poVar22;\n  mode_s *pmVar23;\n  undefined4 uVar24;\n  uint8_t *puVar25;\n  opts_t *poVar26;\n  undefined4 uVar27;\n  uint uVar28;\n  opts_t *poVar29;\n  _Bool *off_off;\n  stat64 *psVar30;\n  opts_t *poVar31;\n  int in_GS_OFFSET;\n  byte bVar32;\n  longlong lVar33;\n  undefined8 uVar34;\n  __off64_t _Var35;\n  undefined8 uVar36;\n  _Bool last;\n  undefined4 uVar37;\n  opts_t *poVar38;\n  stat64 *psVar39;\n  char *local_1f0;\n  byte local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  option *local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  dout_buff_t local_1bc;\n  opts_t local_1b0;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  int *local_18;\n  \n  ppcVar19 = argv;\n  iVar20 = argc;\n  puVar5 = PTR_optarg_00015ffc;\n  bVar32 = 0;\n  local_18 = &argc;\n  local_1d4 = (stat64 *)argv;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc.doutp = (uint8_t *)0x0;\n  local_1bc.free_doutp = (uint8_t *)0x0;\n  local_1bc.dout_len = 0;\n  local_1f0 = (char *)0x0;\n  poVar22 = &local_1b0;\n  for (iVar18 = 0xb; iVar18 != 0; iVar18 = iVar18 + -1) {\n    poVar22->dry_run = false;\n    poVar22->ealsd = false;\n    poVar22->mc_non = false;\n    poVar22->bpw_then_activate = false;\n    poVar22 = (opts_t *)&poVar22->mc_len_given;\n  }\n  psVar30 = &local_184;\n  local_1e8 = 0;\n  local_1dc = long_options;\n  pcVar15 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = 0;\n  bVar3 = false;\nLAB_00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);\n    puVar6 = PTR_optarg_00015ffc;\n    puVar4 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar15;\n    local_1d8 = psVar30;\n    if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }\n    switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }\n  } while( true );\n_L157:\n  local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5);\n  if (local_1b0.mc_tlen < 0) goto code_r0x0001141f;\n  goto LAB_00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\nLAB_00011606:\n  poVar22 = (opts_t *)0x1;\n  local_1e0 = (stat64 *)pcVar15;\nLAB_0001160b:\n  do {\n    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar28 == 0) {\n      return (int)poVar22;\n    }\n    uVar36 = __stack_chk_fail_local();\nLAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);\n    poVar29 = poVar22;\nLAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }\nLAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }\n    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }\nLAB_00011e81:\n    uVar24 = (undefined4)lVar33;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }\nLAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);\n    iVar20 = (int)lVar33;\n    if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }\n    uVar36 = CONCAT44(uVar13,iVar20);\n    if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }\n    poVar22 = (opts_t *)uVar36;\n    if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }\n  } while( true );\n}" primitive_type (function_declarator "main(int argc,char **argv)" identifier (parameter_list "(int argc,char **argv)" ( (parameter_declaration "int argc" primitive_type identifier) , (parameter_declaration "char **argv" primitive_type (pointer_declarator "**argv" * (pointer_declarator "*argv" * identifier))) ))) (compound_statement "{\n  uint8_t uVar1;\n  ushort uVar2;\n  bool bVar3;\n  undefined *puVar4;\n  undefined *puVar5;\n  undefined *puVar6;\n  char cVar7;\n  ushort **ppuVar8;\n  char *pcVar9;\n  char *pcVar10;\n  opts_t *poVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  opts_t *op;\n  int *piVar14;\n  char *pcVar15;\n  diag_page_code *pdVar16;\n  opts_t *poVar17;\n  int iVar18;\n  char **extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  opts_t *extraout_ECX_03;\n  char **extraout_ECX_04;\n  char **ppcVar19;\n  int iVar20;\n  opts_t *op_00;\n  opts_t *extraout_ECX_05;\n  opts_t *extraout_ECX_06;\n  opts_t *extraout_ECX_07;\n  opts_t *extraout_ECX_08;\n  opts_t *extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  opts_t *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar21;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  uint extraout_EDX_04;\n  undefined4 extraout_EDX_05;\n  uint extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  undefined4 extraout_EDX_09;\n  uint extraout_EDX_10;\n  undefined4 extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  uint extraout_EDX_13;\n  undefined4 extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  stat64 *extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  undefined4 extraout_EDX_20;\n  undefined4 extraout_EDX_21;\n  opts_t *poVar22;\n  mode_s *pmVar23;\n  undefined4 uVar24;\n  uint8_t *puVar25;\n  opts_t *poVar26;\n  undefined4 uVar27;\n  uint uVar28;\n  opts_t *poVar29;\n  _Bool *off_off;\n  stat64 *psVar30;\n  opts_t *poVar31;\n  int in_GS_OFFSET;\n  byte bVar32;\n  longlong lVar33;\n  undefined8 uVar34;\n  __off64_t _Var35;\n  undefined8 uVar36;\n  _Bool last;\n  undefined4 uVar37;\n  opts_t *poVar38;\n  stat64 *psVar39;\n  char *local_1f0;\n  byte local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  option *local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  dout_buff_t local_1bc;\n  opts_t local_1b0;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  int *local_18;\n  \n  ppcVar19 = argv;\n  iVar20 = argc;\n  puVar5 = PTR_optarg_00015ffc;\n  bVar32 = 0;\n  local_18 = &argc;\n  local_1d4 = (stat64 *)argv;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc.doutp = (uint8_t *)0x0;\n  local_1bc.free_doutp = (uint8_t *)0x0;\n  local_1bc.dout_len = 0;\n  local_1f0 = (char *)0x0;\n  poVar22 = &local_1b0;\n  for (iVar18 = 0xb; iVar18 != 0; iVar18 = iVar18 + -1) {\n    poVar22->dry_run = false;\n    poVar22->ealsd = false;\n    poVar22->mc_non = false;\n    poVar22->bpw_then_activate = false;\n    poVar22 = (opts_t *)&poVar22->mc_len_given;\n  }\n  psVar30 = &local_184;\n  local_1e8 = 0;\n  local_1dc = long_options;\n  pcVar15 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = 0;\n  bVar3 = false;\nLAB_00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);\n    puVar6 = PTR_optarg_00015ffc;\n    puVar4 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar15;\n    local_1d8 = psVar30;\n    if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }\n    switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }\n  } while( true );\n_L157:\n  local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5);\n  if (local_1b0.mc_tlen < 0) goto code_r0x0001141f;\n  goto LAB_00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\nLAB_00011606:\n  poVar22 = (opts_t *)0x1;\n  local_1e0 = (stat64 *)pcVar15;\nLAB_0001160b:\n  do {\n    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar28 == 0) {\n      return (int)poVar22;\n    }\n    uVar36 = __stack_chk_fail_local();\nLAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);\n    poVar29 = poVar22;\nLAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }\nLAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }\n    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }\nLAB_00011e81:\n    uVar24 = (undefined4)lVar33;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }\nLAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);\n    iVar20 = (int)lVar33;\n    if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }\n    uVar36 = CONCAT44(uVar13,iVar20);\n    if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }\n    poVar22 = (opts_t *)uVar36;\n    if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }\n  } while( true );\n}" { (declaration "uint8_t uVar1;" primitive_type identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "char cVar7;" primitive_type identifier ;) (declaration "ushort **ppuVar8;" type_identifier (pointer_declarator "**ppuVar8" * (pointer_declarator "*ppuVar8" * identifier)) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "opts_t *poVar11;" type_identifier (pointer_declarator "*poVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined4 uVar13;" type_identifier identifier ;) (declaration "opts_t *op;" type_identifier (pointer_declarator "*op" * identifier) ;) (declaration "int *piVar14;" primitive_type (pointer_declarator "*piVar14" * identifier) ;) (declaration "char *pcVar15;" primitive_type (pointer_declarator "*pcVar15" * identifier) ;) (declaration "diag_page_code *pdVar16;" type_identifier (pointer_declarator "*pdVar16" * identifier) ;) (declaration "opts_t *poVar17;" type_identifier (pointer_declarator "*poVar17" * identifier) ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "char **extraout_ECX;" primitive_type (pointer_declarator "**extraout_ECX" * (pointer_declarator "*extraout_ECX" * identifier)) ;) (declaration "undefined4 extraout_ECX_00;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_01;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_02;" type_identifier identifier ;) (declaration "opts_t *extraout_ECX_03;" type_identifier (pointer_declarator "*extraout_ECX_03" * identifier) ;) (declaration "char **extraout_ECX_04;" primitive_type (pointer_declarator "**extraout_ECX_04" * (pointer_declarator "*extraout_ECX_04" * identifier)) ;) (declaration "char **ppcVar19;" primitive_type (pointer_declarator "**ppcVar19" * (pointer_declarator "*ppcVar19" * identifier)) ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "opts_t *op_00;" type_identifier (pointer_declarator "*op_00" * identifier) ;) (declaration "opts_t *extraout_ECX_05;" type_identifier (pointer_declarator "*extraout_ECX_05" * identifier) ;) (declaration "opts_t *extraout_ECX_06;" type_identifier (pointer_declarator "*extraout_ECX_06" * identifier) ;) (declaration "opts_t *extraout_ECX_07;" type_identifier (pointer_declarator "*extraout_ECX_07" * identifier) ;) (declaration "opts_t *extraout_ECX_08;" type_identifier (pointer_declarator "*extraout_ECX_08" * identifier) ;) (declaration "opts_t *extraout_ECX_09;" type_identifier (pointer_declarator "*extraout_ECX_09" * identifier) ;) (declaration "undefined4 extraout_ECX_10;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_11;" type_identifier identifier ;) (declaration "opts_t *extraout_ECX_12;" type_identifier (pointer_declarator "*extraout_ECX_12" * identifier) ;) (declaration "undefined4 extraout_ECX_13;" type_identifier identifier ;) (declaration "byte bVar21;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_00;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_01;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_02;" type_identifier identifier ;) (declaration "stat64 *extraout_EDX_03;" type_identifier (pointer_declarator "*extraout_EDX_03" * identifier) ;) (declaration "uint extraout_EDX_04;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_05;" type_identifier identifier ;) (declaration "uint extraout_EDX_06;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_07;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_08;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_09;" type_identifier identifier ;) (declaration "uint extraout_EDX_10;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_11;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_12;" type_identifier identifier ;) (declaration "uint extraout_EDX_13;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_14;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_15;" type_identifier identifier ;) (declaration "stat64 *extraout_EDX_16;" type_identifier (pointer_declarator "*extraout_EDX_16" * identifier) ;) (declaration "undefined4 extraout_EDX_17;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_18;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_19;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_20;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_21;" type_identifier identifier ;) (declaration "opts_t *poVar22;" type_identifier (pointer_declarator "*poVar22" * identifier) ;) (declaration "mode_s *pmVar23;" type_identifier (pointer_declarator "*pmVar23" * identifier) ;) (declaration "undefined4 uVar24;" type_identifier identifier ;) (declaration "uint8_t *puVar25;" primitive_type (pointer_declarator "*puVar25" * identifier) ;) (declaration "opts_t *poVar26;" type_identifier (pointer_declarator "*poVar26" * identifier) ;) (declaration "undefined4 uVar27;" type_identifier identifier ;) (declaration "uint uVar28;" type_identifier identifier ;) (declaration "opts_t *poVar29;" type_identifier (pointer_declarator "*poVar29" * identifier) ;) (declaration "_Bool *off_off;" type_identifier (pointer_declarator "*off_off" * identifier) ;) (declaration "stat64 *psVar30;" type_identifier (pointer_declarator "*psVar30" * identifier) ;) (declaration "opts_t *poVar31;" type_identifier (pointer_declarator "*poVar31" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "byte bVar32;" type_identifier identifier ;) (declaration "longlong lVar33;" type_identifier identifier ;) (declaration "undefined8 uVar34;" type_identifier identifier ;) (declaration "__off64_t _Var35;" type_identifier identifier ;) (declaration "undefined8 uVar36;" type_identifier identifier ;) (declaration "_Bool last;" type_identifier identifier ;) (declaration "undefined4 uVar37;" type_identifier identifier ;) (declaration "opts_t *poVar38;" type_identifier (pointer_declarator "*poVar38" * identifier) ;) (declaration "stat64 *psVar39;" type_identifier (pointer_declarator "*psVar39" * identifier) ;) (declaration "char *local_1f0;" primitive_type (pointer_declarator "*local_1f0" * identifier) ;) (declaration "byte local_1e9;" type_identifier identifier ;) (declaration "int local_1e8;" primitive_type identifier ;) (declaration "stat64 *local_1e0;" type_identifier (pointer_declarator "*local_1e0" * identifier) ;) (declaration "option *local_1dc;" type_identifier (pointer_declarator "*local_1dc" * identifier) ;) (declaration "stat64 *local_1d8;" type_identifier (pointer_declarator "*local_1d8" * identifier) ;) (declaration "stat64 *local_1d4;" type_identifier (pointer_declarator "*local_1d4" * identifier) ;) (declaration "int local_1c4;" primitive_type identifier ;) (declaration "void *local_1c0;" primitive_type (pointer_declarator "*local_1c0" * identifier) ;) (declaration "dout_buff_t local_1bc;" type_identifier identifier ;) (declaration "opts_t local_1b0;" type_identifier identifier ;) (declaration "stat64 local_184;" type_identifier identifier ;) (declaration "stat64 local_124 [2];" type_identifier (array_declarator "local_124 [2]" identifier [ number_literal ]) ;) (declaration "uint local_24;" type_identifier identifier ;) (declaration "int *local_18;" primitive_type (pointer_declarator "*local_18" * identifier) ;) (expression_statement "ppcVar19 = argv;" (assignment_expression "ppcVar19 = argv" identifier = identifier) ;) (expression_statement "iVar20 = argc;" (assignment_expression "iVar20 = argc" identifier = identifier) ;) (expression_statement "puVar5 = PTR_optarg_00015ffc;" (assignment_expression "puVar5 = PTR_optarg_00015ffc" identifier = identifier) ;) (expression_statement "bVar32 = 0;" (assignment_expression "bVar32 = 0" identifier = number_literal) ;) (expression_statement "local_18 = &argc;" (assignment_expression "local_18 = &argc" identifier = (pointer_expression "&argc" & identifier)) ;) (expression_statement "local_1d4 = (stat64 *)argv;" (assignment_expression "local_1d4 = (stat64 *)argv" identifier = (cast_expression "(stat64 *)argv" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_24 = *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_24 = *(uint *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" * (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_1c0 = (void *)0x0;" (assignment_expression "local_1c0 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1bc.doutp = (uint8_t *)0x0;" (assignment_expression "local_1bc.doutp = (uint8_t *)0x0" (field_expression "local_1bc.doutp" identifier . field_identifier) = (cast_expression "(uint8_t *)0x0" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1bc.free_doutp = (uint8_t *)0x0;" (assignment_expression "local_1bc.free_doutp = (uint8_t *)0x0" (field_expression "local_1bc.free_doutp" identifier . field_identifier) = (cast_expression "(uint8_t *)0x0" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1bc.dout_len = 0;" (assignment_expression "local_1bc.dout_len = 0" (field_expression "local_1bc.dout_len" identifier . field_identifier) = number_literal) ;) (expression_statement "local_1f0 = (char *)0x0;" (assignment_expression "local_1f0 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "poVar22 = &local_1b0;" (assignment_expression "poVar22 = &local_1b0" identifier = (pointer_expression "&local_1b0" & identifier)) ;) (for_statement "for (iVar18 = 0xb; iVar18 != 0; iVar18 = iVar18 + -1) {\n    poVar22->dry_run = false;\n    poVar22->ealsd = false;\n    poVar22->mc_non = false;\n    poVar22->bpw_then_activate = false;\n    poVar22 = (opts_t *)&poVar22->mc_len_given;\n  }" for ( (assignment_expression "iVar18 = 0xb" identifier = number_literal) ; (binary_expression "iVar18 != 0" identifier != number_literal) ; (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ) (compound_statement "{\n    poVar22->dry_run = false;\n    poVar22->ealsd = false;\n    poVar22->mc_non = false;\n    poVar22->bpw_then_activate = false;\n    poVar22 = (opts_t *)&poVar22->mc_len_given;\n  }" { (expression_statement "poVar22->dry_run = false;" (assignment_expression "poVar22->dry_run = false" (field_expression "poVar22->dry_run" identifier -> field_identifier) = false) ;) (expression_statement "poVar22->ealsd = false;" (assignment_expression "poVar22->ealsd = false" (field_expression "poVar22->ealsd" identifier -> field_identifier) = false) ;) (expression_statement "poVar22->mc_non = false;" (assignment_expression "poVar22->mc_non = false" (field_expression "poVar22->mc_non" identifier -> field_identifier) = false) ;) (expression_statement "poVar22->bpw_then_activate = false;" (assignment_expression "poVar22->bpw_then_activate = false" (field_expression "poVar22->bpw_then_activate" identifier -> field_identifier) = false) ;) (expression_statement "poVar22 = (opts_t *)&poVar22->mc_len_given;" (assignment_expression "poVar22 = (opts_t *)&poVar22->mc_len_given" identifier = (cast_expression "(opts_t *)&poVar22->mc_len_given" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&poVar22->mc_len_given" & (field_expression "poVar22->mc_len_given" identifier -> field_identifier)))) ;) })) (expression_statement "psVar30 = &local_184;" (assignment_expression "psVar30 = &local_184" identifier = (pointer_expression "&local_184" & identifier)) ;) (expression_statement "local_1e8 = 0;" (assignment_expression "local_1e8 = 0" identifier = number_literal) ;) (expression_statement "local_1dc = long_options;" (assignment_expression "local_1dc = long_options" identifier = identifier) ;) (expression_statement "pcVar15 = "b:dehi:I:l:m:No:s:S:t:vV";" (assignment_expression "pcVar15 = "b:dehi:I:l:m:No:s:S:t:vV"" identifier = (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" " string_content ")) ;) (expression_statement "local_1e9 = 0;" (assignment_expression "local_1e9 = 0" identifier = number_literal) ;) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) (labeled_statement "LAB_00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);\n    puVar6 = PTR_optarg_00015ffc;\n    puVar4 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar15;\n    local_1d8 = psVar30;\n    if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }\n    switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    local_184.st_dev._0_4_ = 0;\n    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);\n    puVar6 = PTR_optarg_00015ffc;\n    puVar4 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar15;\n    local_1d8 = psVar30;\n    if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }\n    switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }\n  } while( true );" do (compound_statement "{\n    local_184.st_dev._0_4_ = 0;\n    iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);\n    puVar6 = PTR_optarg_00015ffc;\n    puVar4 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar15;\n    local_1d8 = psVar30;\n    if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }\n    switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }\n  }" { (expression_statement "local_184.st_dev._0_4_ = 0;" (assignment_expression "local_184.st_dev._0_4_ = 0" (field_expression "local_184.st_dev._0_4_" (field_expression "local_184.st_dev" identifier . field_identifier) . field_identifier) = number_literal) ;) (expression_statement "iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30);" (assignment_expression "iVar18 = getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30)" identifier = (call_expression "getopt_long(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30)" identifier (argument_list "(iVar20,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,psVar30)" ( identifier , identifier , (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" " string_content ") , identifier , identifier )))) ;) (expression_statement "puVar6 = PTR_optarg_00015ffc;" (assignment_expression "puVar6 = PTR_optarg_00015ffc" identifier = identifier) ;) (expression_statement "puVar4 = PTR_optind_00015fe8;" (assignment_expression "puVar4 = PTR_optind_00015fe8" identifier = identifier) ;) (expression_statement "local_1e0 = (stat64 *)pcVar15;" (assignment_expression "local_1e0 = (stat64 *)pcVar15" identifier = (cast_expression "(stat64 *)pcVar15" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_1d8 = psVar30;" (assignment_expression "local_1d8 = psVar30" identifier = identifier) ;) (if_statement "if (iVar18 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }" if (parenthesized_expression "(iVar18 == -1)" ( (binary_expression "iVar18 == -1" identifier == number_literal) )) (compound_statement "{\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }\n      iVar18 = *(int *)PTR_optind_00015fe8;\n      if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      ppcVar19 = extraout_ECX;\nLAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }\n      poVar38 = (opts_t *)local_1b0.mc_len;\n      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }\n      uVar13 = 0;\n      iVar20 = local_1b0.verbose;\n      local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);\n      uVar36 = CONCAT44(iVar20,uVar13);\n      if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);\n      if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }\n      uVar12 = uVar28;\n      iVar20 = __fxstat64(3,uVar28,psVar30);\n      if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }\n      lVar33 = CONCAT44(uVar13,uVar24);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar28);\n      lVar33 = CONCAT44(extraout_EDX_08,uVar24);\n      goto LAB_00011e81;\n    }" { (if_statement "if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }" if (parenthesized_expression "(local_1e8 != 0)" ( (binary_expression "local_1e8 != 0" identifier != number_literal) )) (compound_statement "{\n        if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }\n        goto LAB_0001160b;\n      }" { (if_statement "if (local_1e8 == 1) {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }" if (parenthesized_expression "(local_1e8 == 1)" ( (binary_expression "local_1e8 == 1" identifier == number_literal) )) (compound_statement "{\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }" { (expression_statement "poVar22 = (opts_t *)0x0;" (assignment_expression "poVar22 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" identifier (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) }) (else_clause "else {\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }" else (compound_statement "{\n          poVar22 = (opts_t *)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          print_modes();\n        }" { (expression_statement "poVar22 = (opts_t *)0x0;" (assignment_expression "poVar22 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" identifier (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement "pr2serr("\n");" (call_expression "pr2serr("\n")" identifier (argument_list "("\n")" ( (string_literal ""\n"" " escape_sequence ") ))) ;) (expression_statement "print_modes();" (call_expression "print_modes()" identifier (argument_list "()" ( ))) ;) }))) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) (expression_statement "iVar18 = *(int *)PTR_optind_00015fe8;" (assignment_expression "iVar18 = *(int *)PTR_optind_00015fe8" identifier = (pointer_expression "*(int *)PTR_optind_00015fe8" * (cast_expression "(int *)PTR_optind_00015fe8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (iVar18 < iVar20) {\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" if (parenthesized_expression "(iVar18 < iVar20)" ( (binary_expression "iVar18 < iVar20" identifier < identifier) )) (compound_statement "{\n        local_1e0 = (stat64 *)ppcVar19[iVar18];\n        iVar18 = iVar18 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar18;\n        if (iVar20 <= iVar18) goto LAB_000116cd;\n        do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);\n        poVar22 = (opts_t *)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);\n        local_1e0 = (stat64 *)pcVar15;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" { (expression_statement "local_1e0 = (stat64 *)ppcVar19[iVar18];" (assignment_expression "local_1e0 = (stat64 *)ppcVar19[iVar18]" identifier = (cast_expression "(stat64 *)ppcVar19[iVar18]" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "ppcVar19[iVar18]" identifier [ identifier ]))) ;) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)PTR_optind_00015fe8 = iVar18;" (assignment_expression "*(int *)PTR_optind_00015fe8 = iVar18" (pointer_expression "*(int *)PTR_optind_00015fe8" * (cast_expression "(int *)PTR_optind_00015fe8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (if_statement "if (iVar20 <= iVar18) goto LAB_000116cd;" if (parenthesized_expression "(iVar20 <= iVar18)" ( (binary_expression "iVar20 <= iVar18" identifier <= identifier) )) (goto_statement "goto LAB_000116cd;" goto statement_identifier ;)) (do_statement "do {\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar18 < iVar20);" do (compound_statement "{\n          pcVar9 = ppcVar19[iVar18];\n          psVar30 = local_1e0;\n          psVar39 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);\n          iVar18 = *(int *)puVar4 + 1;\n          *(int *)puVar4 = iVar18;\n          local_1e0 = extraout_EDX_03;\n        }" { (expression_statement "pcVar9 = ppcVar19[iVar18];" (assignment_expression "pcVar9 = ppcVar19[iVar18]" identifier = (subscript_expression "ppcVar19[iVar18]" identifier [ identifier ])) ;) (expression_statement "psVar30 = local_1e0;" (assignment_expression "psVar30 = local_1e0" identifier = identifier) ;) (expression_statement "psVar39 = local_1e0;" (assignment_expression "psVar39 = local_1e0" identifier = identifier) ;) (expression_statement "pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0);" (call_expression "pr2serr("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0)" identifier (argument_list "("Unexpected extra argument: %s\n",pcVar9,local_1e0,local_1e0)" ( (string_literal ""Unexpected extra argument: %s\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "iVar18 = *(int *)puVar4 + 1;" (assignment_expression "iVar18 = *(int *)puVar4 + 1" identifier = (binary_expression "*(int *)puVar4 + 1" (pointer_expression "*(int *)puVar4" * (cast_expression "(int *)puVar4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal)) ;) (expression_statement "*(int *)puVar4 = iVar18;" (assignment_expression "*(int *)puVar4 = iVar18" (pointer_expression "*(int *)puVar4" * (cast_expression "(int *)puVar4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "local_1e0 = extraout_EDX_03;" (assignment_expression "local_1e0 = extraout_EDX_03" identifier = identifier) ;) }) while (parenthesized_expression "(iVar18 < iVar20)" ( (binary_expression "iVar18 < iVar20" identifier < identifier) )) ;) (expression_statement "poVar22 = (opts_t *)0x1;" (assignment_expression "poVar22 = (opts_t *)0x1" identifier = (cast_expression "(opts_t *)0x1" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39);" (call_expression "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39)" identifier (argument_list "("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,pcVar9,psVar30,psVar39)" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "local_1e0 = (stat64 *)pcVar15;" (assignment_expression "local_1e0 = (stat64 *)pcVar15" identifier = (cast_expression "(stat64 *)pcVar15" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";" (assignment_expression "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n"" identifier = (cast_expression "(stat64 *)"Unexpected extra argument: %s\n"" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Unexpected extra argument: %s\n"" " string_content escape_sequence "))) ;) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) (expression_statement "local_1e0 = (stat64 *)0x0;" (assignment_expression "local_1e0 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppcVar19 = extraout_ECX;" (assignment_expression "ppcVar19 = extraout_ECX" identifier = identifier) ;) (labeled_statement "LAB_000116cd:\n      if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;" statement_identifier : (if_statement "if (bVar3) {\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != 0) goto LAB_000119bc;" if (parenthesized_expression "(bVar3)" ( identifier )) (compound_statement "{\n        if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }\n      }" { (if_statement "if (local_1e9 != 0) {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }" if (parenthesized_expression "(local_1e9 != 0)" ( (binary_expression "local_1e9 != 0" identifier != number_literal) )) (compound_statement "{\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          ppcVar19 = extraout_ECX_04;\nLAB_000119bc:\n          poVar22 = (opts_t *)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);\n          local_1e0 = (stat64 *)pcVar15;\n          goto LAB_0001160b;\n        }" { (expression_statement "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");" (call_expression "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n")" identifier (argument_list "("Not in DEBUG mode, so \'-vV\' has no special action\n")" ( (string_literal ""Not in DEBUG mode, so \'-vV\' has no special action\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement "ppcVar19 = extraout_ECX_04;" (assignment_expression "ppcVar19 = extraout_ECX_04" identifier = identifier) ;) (labeled_statement "LAB_000119bc:\n          poVar22 = (opts_t *)0x0;" statement_identifier : (expression_statement "poVar22 = (opts_t *)0x0;" (assignment_expression "poVar22 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);" (call_expression "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19)" identifier (argument_list "("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19)" ( (string_literal ""sg_ses_microcode: version: %s\n"" " string_content escape_sequence ") , (string_literal ""1.16 20180628"" " string_content ") , identifier , identifier ))) ;) (expression_statement "local_1e0 = (stat64 *)pcVar15;" (assignment_expression "local_1e0 = (stat64 *)pcVar15" identifier = (cast_expression "(stat64 *)pcVar15" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) }) (else_clause "else if (local_1e9 != 0) goto LAB_000119bc;" else (if_statement "if (local_1e9 != 0) goto LAB_000119bc;" if (parenthesized_expression "(local_1e9 != 0)" ( (binary_expression "local_1e9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000119bc;" goto statement_identifier ;))))) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar9 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" { (expression_statement "pcVar9 = "missing device name!\n\n";" (assignment_expression "pcVar9 = "missing device name!\n\n"" identifier = (string_literal ""missing device name!\n\n"" " string_content escape_sequence escape_sequence ")) ;) (goto_statement "goto LAB_000115ef;" goto statement_identifier ;) })) (if_statement "if (local_1b0.mc_mode < 8) {\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" if (parenthesized_expression "(local_1b0.mc_mode < 8)" ( (binary_expression "local_1b0.mc_mode < 8" (field_expression "local_1b0.mc_mode" identifier . field_identifier) < number_literal) )) (compound_statement "{\n        if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }" { (if_statement "if (local_1b0.mc_mode < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" if (parenthesized_expression "(local_1b0.mc_mode < 6)" ( (binary_expression "local_1b0.mc_mode < 6" (field_expression "local_1b0.mc_mode" identifier . field_identifier) < number_literal) )) (compound_statement "{\n          local_1d4 = (stat64 *)0x0;\n          if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;\n        }" { (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0) goto LAB_0001171b;" if (parenthesized_expression "((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)" ( (binary_expression "(opts_t *)local_1b0.mc_mode != (opts_t *)0x0" (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier)) != (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001171b;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" else (compound_statement "{\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" { (labeled_statement "LAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;" statement_identifier : (expression_statement "local_1d4 = (stat64 *)0x1;" (assignment_expression "local_1d4 = (stat64 *)0x1" identifier = (cast_expression "(stat64 *)0x1" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) }))) }) (else_clause "else if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" else (if_statement "if (((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" if (parenthesized_expression "(((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff))" ( (binary_expression "((opts_t *)local_1b0.mc_mode == (opts_t *)0xf) ||\n              ((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)" (parenthesized_expression "((opts_t *)local_1b0.mc_mode == (opts_t *)0xf)" ( (binary_expression "(opts_t *)local_1b0.mc_mode == (opts_t *)0xf" (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier)) == (cast_expression "(opts_t *)0xf" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "((opts_t *)local_1b0.mc_mode == (opts_t *)0xff)" ( (binary_expression "(opts_t *)local_1b0.mc_mode == (opts_t *)0xff" (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier)) == (cast_expression "(opts_t *)0xff" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n        local_1d4 = (stat64 *)0x0;\n      }" { (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" else (compound_statement "{\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" { (if_statement "if ((opts_t *)local_1b0.mc_mode == (opts_t *)0xe) goto LAB_00011c5b;" if (parenthesized_expression "((opts_t *)local_1b0.mc_mode == (opts_t *)0xe)" ( (binary_expression "(opts_t *)local_1b0.mc_mode == (opts_t *)0xe" (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier)) == (cast_expression "(opts_t *)0xe" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011c5b;" goto statement_identifier ;)) (labeled_statement "LAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);" statement_identifier : (expression_statement "pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0);" (call_expression "pr2serr("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0)" identifier (argument_list "("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,local_1e0)" ( (string_literal ""%s: mc_mode=0x%x, continue for now\n"" " string_content escape_sequence ") , (string_literal ""main"" " string_content ") , (field_expression "local_1b0.mc_mode" identifier . field_identifier) , identifier ))) ;)) (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))))) (if_statement "if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }" if (parenthesized_expression "((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw))" ( (binary_expression "(0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)" (parenthesized_expression "(0 < local_1b0.mc_len)" ( (binary_expression "0 < local_1b0.mc_len" number_literal < (field_expression "local_1b0.mc_len" identifier . field_identifier)) )) && (parenthesized_expression "(local_1b0.mc_len < local_1b0.bpw)" ( (binary_expression "local_1b0.mc_len < local_1b0.bpw" (field_expression "local_1b0.mc_len" identifier . field_identifier) < (field_expression "local_1b0.bpw" identifier . field_identifier)) ))) )) (compound_statement "{\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1b0.bpw = local_1b0.mc_len;\n      }" { (expression_statement "pr2serr("trim chunk size (CS) to be the same as LEN\n");" (call_expression "pr2serr("trim chunk size (CS) to be the same as LEN\n")" identifier (argument_list "("trim chunk size (CS) to be the same as LEN\n")" ( (string_literal ""trim chunk size (CS) to be the same as LEN\n"" " string_content escape_sequence ") ))) ;) (expression_statement "local_1b0.bpw = local_1b0.mc_len;" (assignment_expression "local_1b0.bpw = local_1b0.mc_len" (field_expression "local_1b0.bpw" identifier . field_identifier) = (field_expression "local_1b0.mc_len" identifier . field_identifier)) ;) })) (expression_statement "poVar38 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar38 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (if_statement "if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }" if (parenthesized_expression "((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw))" ( (binary_expression "(0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)" (parenthesized_expression "(0 < local_1b0.mc_offset)" ( (binary_expression "0 < local_1b0.mc_offset" number_literal < (field_expression "local_1b0.mc_offset" identifier . field_identifier)) )) && (parenthesized_expression "(0 < local_1b0.bpw)" ( (binary_expression "0 < local_1b0.bpw" number_literal < (field_expression "local_1b0.bpw" identifier . field_identifier)) ))) )) (compound_statement "{\n        local_1b0.mc_offset = 0;\n        poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );\n      }" { (expression_statement "local_1b0.mc_offset = 0;" (assignment_expression "local_1b0.mc_offset = 0" (field_expression "local_1b0.mc_offset" identifier . field_identifier) = number_literal) ;) (expression_statement "poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         );" (assignment_expression "poVar38 = (opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         )" identifier = (cast_expression "(opts_t *)\n                  pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         )" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "pr2serr(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         )" identifier (argument_list "(\n                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                         )" ( (string_literal ""WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"" " string_content escape_sequence ") ))))) ;) })) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "iVar20 = local_1b0.verbose;" (assignment_expression "iVar20 = local_1b0.verbose" identifier = (field_expression "local_1b0.verbose" identifier . field_identifier)) ;) (expression_statement "local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38);" (assignment_expression "local_1dc = (option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38)" identifier = (cast_expression "(option *)sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38)" ( (type_descriptor "option *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sg_cmds_open_device(local_1e0,0,local_1b0.verbose,poVar38)" identifier (argument_list "(local_1e0,0,local_1b0.verbose,poVar38)" ( identifier , number_literal , (field_expression "local_1b0.verbose" identifier . field_identifier) , identifier ))))) ;) (expression_statement "uVar36 = CONCAT44(iVar20,uVar13);" (assignment_expression "uVar36 = CONCAT44(iVar20,uVar13)" identifier = (call_expression "CONCAT44(iVar20,uVar13)" identifier (argument_list "(iVar20,uVar13)" ( identifier , identifier )))) ;) (if_statement "if ((int)local_1dc < 0) {\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" if (parenthesized_expression "((int)local_1dc < 0)" ( (binary_expression "(int)local_1dc < 0" (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }\n        lVar33 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" { (if_statement "if (local_1b0.verbose != 0) {\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }" if (parenthesized_expression "(local_1b0.verbose != 0)" ( (binary_expression "local_1b0.verbose != 0" (field_expression "local_1b0.verbose" identifier . field_identifier) != number_literal) )) (compound_statement "{\n          uVar13 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);\n          local_1d4 = local_1e0;\n        }" { (expression_statement "uVar13 = safe_strerror(-(int)local_1dc);" (assignment_expression "uVar13 = safe_strerror(-(int)local_1dc)" identifier = (call_expression "safe_strerror(-(int)local_1dc)" identifier (argument_list "(-(int)local_1dc)" ( (unary_expression "-(int)local_1dc" - (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13);" (call_expression "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13)" identifier (argument_list "("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar13)" ( (string_literal ""sg_ses_microcode: open error: %s: %s\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "local_1d4 = local_1e0;" (assignment_expression "local_1d4 = local_1e0" identifier = identifier) ;) })) (expression_statement "lVar33 = sg_convert_errno(-(int)local_1dc);" (assignment_expression "lVar33 = sg_convert_errno(-(int)local_1dc)" identifier = (call_expression "sg_convert_errno(-(int)local_1dc)" identifier (argument_list "(-(int)local_1dc)" ( (unary_expression "-(int)local_1dc" - (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);" (assignment_expression "bVar21 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" identifier = (binary_expression "local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" (binary_expression "local_1f0 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) & (parenthesized_expression "((byte)local_1d4 ^ 1)" ( (binary_expression "(byte)local_1d4 ^ 1" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) ^ number_literal) )))) ;) (expression_statement "uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21);" (assignment_expression "uVar27 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar21)" identifier = (call_expression "CONCAT31((int3)((uint)local_1e0 >> 8),bVar21)" identifier (argument_list "((int3)((uint)local_1e0 >> 8),bVar21)" ( (call_expression "(int3)((uint)local_1e0 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "((uint)local_1e0 >> 8)" ( (binary_expression "(uint)local_1e0 >> 8" (cast_expression "(uint)local_1e0" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) ))) , identifier )))) ;) (if_statement "if (bVar21 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" if (parenthesized_expression "(bVar21 != 0)" ( (binary_expression "bVar21 != 0" identifier != number_literal) )) (compound_statement "{\n        pr2serr("ignoring --in=FILE option\n");\n        uVar36 = CONCAT44(iVar20,uVar13);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" { (expression_statement "pr2serr("ignoring --in=FILE option\n");" (call_expression "pr2serr("ignoring --in=FILE option\n")" identifier (argument_list "("ignoring --in=FILE option\n")" ( (string_literal ""ignoring --in=FILE option\n"" " string_content escape_sequence ") ))) ;) (expression_statement "uVar36 = CONCAT44(iVar20,uVar13);" (assignment_expression "uVar36 = CONCAT44(iVar20,uVar13)" identifier = (call_expression "CONCAT44(iVar20,uVar13)" identifier (argument_list "(iVar20,uVar13)" ( identifier , identifier )))) ;) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00011a5c;" goto statement_identifier ;) })) (if_statement "if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }" if (parenthesized_expression "(local_1f0 == (char *)0x0)" ( (binary_expression "local_1f0 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar33 = CONCAT44(extraout_EDX_09,0x1f);\n        goto LAB_000118e5;\n      }" { (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((byte)local_1d4 == 0) goto LAB_00011a5c;" if (parenthesized_expression "((byte)local_1d4 == 0)" ( (binary_expression "(byte)local_1d4 == 0" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) == number_literal) )) (goto_statement "goto LAB_00011a5c;" goto statement_identifier ;)) (expression_statement "pr2serr("need --in=FILE option with given mode\n");" (call_expression "pr2serr("need --in=FILE option with given mode\n")" identifier (argument_list "("need --in=FILE option with given mode\n")" ( (string_literal ""need --in=FILE option with given mode\n"" " string_content escape_sequence ") ))) ;) (expression_statement "lVar33 = CONCAT44(extraout_EDX_09,0x1f);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_09,0x1f)" identifier = (call_expression "CONCAT44(extraout_EDX_09,0x1f)" identifier (argument_list "(extraout_EDX_09,0x1f)" ( identifier , number_literal )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "local_1e0 = (stat64 *)strcmp(local_1f0,"-");" (assignment_expression "local_1e0 = (stat64 *)strcmp(local_1f0,"-")" identifier = (cast_expression "(stat64 *)strcmp(local_1f0,"-")" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "strcmp(local_1f0,"-")" identifier (argument_list "(local_1f0,"-")" ( identifier , (string_literal ""-"" " string_content ") ))))) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }\n      else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar28 = 0;\n        uVar13 = extraout_ECX_00;\n      }" { (expression_statement "uVar28 = 0;" (assignment_expression "uVar28 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = extraout_ECX_00;" (assignment_expression "uVar13 = extraout_ECX_00" identifier = identifier) ;) }) (else_clause "else {\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }" else (compound_statement "{\n        uVar28 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }\n        iVar20 = sg_set_binary_mode(uVar28);\n        uVar13 = extraout_ECX_01;\n        if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }\n      }" { (expression_statement "uVar28 = open64(local_1f0,0,local_1e0,local_1e0);" (assignment_expression "uVar28 = open64(local_1f0,0,local_1e0,local_1e0)" identifier = (call_expression "open64(local_1f0,0,local_1e0,local_1e0)" identifier (argument_list "(local_1f0,0,local_1e0,local_1e0)" ( identifier , number_literal , identifier , identifier )))) ;) (if_statement "if ((int)uVar28 < 0) {\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }" if (parenthesized_expression "((int)uVar28 < 0)" ( (binary_expression "(int)uVar28 < 0" (cast_expression "(int)uVar28" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          piVar14 = __errno_location();\n          uVar13 = sg_convert_errno(*piVar14);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar33 = CONCAT44(extraout_EDX_14,uVar13);\n          goto LAB_000118e5;\n        }" { (expression_statement "piVar14 = __errno_location();" (assignment_expression "piVar14 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar13 = sg_convert_errno(*piVar14);" (assignment_expression "uVar13 = sg_convert_errno(*piVar14)" identifier = (call_expression "sg_convert_errno(*piVar14)" identifier (argument_list "(*piVar14)" ( (pointer_expression "*piVar14" * identifier) )))) ;) (expression_statement "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);" (call_expression "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" identifier (argument_list "(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" ( identifier , number_literal , number_literal , number_literal , (string_literal ""sg_ses_microcode: could not open %s for reading"" " string_content ") , identifier ))) ;) (expression_statement "perror((char *)local_124);" (call_expression "perror((char *)local_124)" identifier (argument_list "((char *)local_124)" ( (cast_expression "(char *)local_124" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "lVar33 = CONCAT44(extraout_EDX_14,uVar13);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_14,uVar13)" identifier = (call_expression "CONCAT44(extraout_EDX_14,uVar13)" identifier (argument_list "(extraout_EDX_14,uVar13)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "iVar20 = sg_set_binary_mode(uVar28);" (assignment_expression "iVar20 = sg_set_binary_mode(uVar28)" identifier = (call_expression "sg_set_binary_mode(uVar28)" identifier (argument_list "(uVar28)" ( identifier )))) ;) (expression_statement "uVar13 = extraout_ECX_01;" (assignment_expression "uVar13 = extraout_ECX_01" identifier = identifier) ;) (if_statement "if (iVar20 < 0) {\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }" if (parenthesized_expression "(iVar20 < 0)" ( (binary_expression "iVar20 < 0" identifier < number_literal) )) (compound_statement "{\n          perror("sg_set_binary_mode");\n          uVar13 = extraout_ECX_11;\n        }" { (expression_statement "perror("sg_set_binary_mode");" (call_expression "perror("sg_set_binary_mode")" identifier (argument_list "("sg_set_binary_mode")" ( (string_literal ""sg_set_binary_mode"" " string_content ") ))) ;) (expression_statement "uVar13 = extraout_ECX_11;" (assignment_expression "uVar13 = extraout_ECX_11" identifier = identifier) ;) })) }))) (expression_statement "uVar12 = uVar28;" (assignment_expression "uVar12 = uVar28" identifier = identifier) ;) (expression_statement "iVar20 = __fxstat64(3,uVar28,psVar30);" (assignment_expression "iVar20 = __fxstat64(3,uVar28,psVar30)" identifier = (call_expression "__fxstat64(3,uVar28,psVar30)" identifier (argument_list "(3,uVar28,psVar30)" ( number_literal , identifier , identifier )))) ;) (if_statement "if ((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }\n      else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }" if (parenthesized_expression "((iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000))" ( (binary_expression "(iVar20 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)" (parenthesized_expression "(iVar20 == 0)" ( (binary_expression "iVar20 == 0" identifier == number_literal) )) && (parenthesized_expression "((local_184.st_mode & 0xf000) == 0x8000)" ( (binary_expression "(local_184.st_mode & 0xf000) == 0x8000" (parenthesized_expression "(local_184.st_mode & 0xf000)" ( (binary_expression "local_184.st_mode & 0xf000" (field_expression "local_184.st_mode" identifier . field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }\n      }" { (if_statement "if ((opts_t *)local_1b0.mc_len == (opts_t *)0x0) {\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }\n        else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }" if (parenthesized_expression "((opts_t *)local_1b0.mc_len == (opts_t *)0x0)" ( (binary_expression "(opts_t *)local_1b0.mc_len == (opts_t *)0x0" (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier)) == (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }\n          uVar24 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar13 = extraout_EDX_21;\n        }" { (expression_statement "iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;" (assignment_expression "iVar20 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_" identifier = (binary_expression "(local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_" (parenthesized_expression "(local_1b0.mc_skip >> 0x1f)" ( (binary_expression "local_1b0.mc_skip >> 0x1f" (field_expression "local_1b0.mc_skip" identifier . field_identifier) >> number_literal) )) - (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" identifier . field_identifier) . field_identifier))) ;) (if_statement "if ((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0) {\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }" if (parenthesized_expression "((SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0)" ( (binary_expression "(SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))) !=\n              (int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0" (parenthesized_expression "(SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)))" ( (binary_expression "SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))" (call_expression "SBORROW4(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_)" identifier (argument_list "(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_)" ( (binary_expression "local_1b0.mc_skip >> 0x1f" (field_expression "local_1b0.mc_skip" identifier . field_identifier) >> number_literal) , (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" identifier . field_identifier) . field_identifier) ))) != (call_expression "SBORROW4(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))" identifier (argument_list "(iVar20,(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))" ( identifier , (call_expression "(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)local_1b0.mc_skip < (uint)local_184.st_size)" ( (binary_expression "(uint)local_1b0.mc_skip < (uint)local_184.st_size" (cast_expression "(uint)local_1b0.mc_skip" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_1b0.mc_skip" identifier . field_identifier)) < (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier))) ))) )))) )) != (binary_expression "(int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)) < 0" (cast_expression "(int)(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size))" ( (binary_expression "iVar20 - (uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)" identifier - (call_expression "(uint)((uint)local_1b0.mc_skip < (uint)local_184.st_size)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)local_1b0.mc_skip < (uint)local_184.st_size)" ( (binary_expression "(uint)local_1b0.mc_skip < (uint)local_184.st_size" (cast_expression "(uint)local_1b0.mc_skip" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_1b0.mc_skip" identifier . field_identifier)) < (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier))) )))) ))) < number_literal)) )) (compound_statement "{\n            local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;\n            uVar27 = 1;\n            goto LAB_00011e31;\n          }" { (expression_statement "local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip;" (assignment_expression "local_1b0.mc_len = (uint)local_184.st_size - local_1b0.mc_skip" (field_expression "local_1b0.mc_len" identifier . field_identifier) = (binary_expression "(uint)local_184.st_size - local_1b0.mc_skip" (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier)) - (field_expression "local_1b0.mc_skip" identifier . field_identifier))) ;) (expression_statement "uVar27 = 1;" (assignment_expression "uVar27 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00011e31;" goto statement_identifier ;) })) (expression_statement "uVar24 = 0xf;" (assignment_expression "uVar24 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);" (call_expression "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" identifier (argument_list "("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" ( (string_literal ""skip exceeds file size of %d bytes\n"" " string_content escape_sequence ") , (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier)) , identifier , identifier ))) ;) (expression_statement "uVar13 = extraout_EDX_21;" (assignment_expression "uVar13 = extraout_EDX_21" identifier = identifier) ;) }) (else_clause "else {\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }" else (compound_statement "{\n          uVar27 = 1;\nLAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;\n          uVar24 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);\n          uVar13 = extraout_EDX_07;\n        }" { (expression_statement "uVar27 = 1;" (assignment_expression "uVar27 = 1" identifier = number_literal) ;) (labeled_statement "LAB_00011e31:\n          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;" statement_identifier : (if_statement "if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;" if (parenthesized_expression "(local_1b0.mc_len < 0x8000001)" ( (binary_expression "local_1b0.mc_len < 0x8000001" (field_expression "local_1b0.mc_len" identifier . field_identifier) < number_literal) )) (goto_statement "goto LAB_0001185d;" goto statement_identifier ;))) (expression_statement "uVar24 = 0xf;" (assignment_expression "uVar24 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27);" (call_expression "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27)" identifier (argument_list "("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",\n                  local_1b0.mc_len,0x8000000,uVar27)" ( (string_literal ""file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n"" " string_content escape_sequence ") , (field_expression "local_1b0.mc_len" identifier . field_identifier) , number_literal , identifier ))) ;) (expression_statement "uVar13 = extraout_EDX_07;" (assignment_expression "uVar13 = extraout_EDX_07" identifier = identifier) ;) }))) }) (else_clause "else {\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }" else (compound_statement "{\n        if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;\n        local_1b0.mc_len = 0x800000;\nLAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;\n        local_1d8 = (stat64 *)malloc(local_1b0.mc_len);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar24 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);\n        uVar13 = extraout_EDX_18;\n      }" { (if_statement "if ((opts_t *)local_1b0.mc_len != (opts_t *)0x0) goto LAB_00011e31;" if (parenthesized_expression "((opts_t *)local_1b0.mc_len != (opts_t *)0x0)" ( (binary_expression "(opts_t *)local_1b0.mc_len != (opts_t *)0x0" (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier)) != (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011e31;" goto statement_identifier ;)) (expression_statement "local_1b0.mc_len = 0x800000;" (assignment_expression "local_1b0.mc_len = 0x800000" (field_expression "local_1b0.mc_len" identifier . field_identifier) = number_literal) ;) (labeled_statement "LAB_0001185d:\n        poVar22 = (opts_t *)local_1b0.mc_len;" statement_identifier : (expression_statement "poVar22 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar22 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;)) (expression_statement "local_1d8 = (stat64 *)malloc(local_1b0.mc_len);" (assignment_expression "local_1d8 = (stat64 *)malloc(local_1b0.mc_len)" identifier = (cast_expression "(stat64 *)malloc(local_1b0.mc_len)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(local_1b0.mc_len)" identifier (argument_list "(local_1b0.mc_len)" ( (field_expression "local_1b0.mc_len" identifier . field_identifier) ))))) ;) (if_statement "if (local_1d8 != (stat64 *)0x0) {\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" if (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" ( (binary_expression "local_1d8 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar37 = 0xff;\n          uVar13 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)poVar22);\n          poVar38 = extraout_ECX_03;\n          if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" { (expression_statement "uVar37 = 0xff;" (assignment_expression "uVar37 = 0xff" identifier = number_literal) ;) (expression_statement "uVar13 = extraout_ECX_02;" (assignment_expression "uVar13 = extraout_ECX_02" identifier = identifier) ;) (expression_statement "memset(local_1d8,0xff,(size_t)poVar22);" (call_expression "memset(local_1d8,0xff,(size_t)poVar22)" identifier (argument_list "(local_1d8,0xff,(size_t)poVar22)" ( identifier , number_literal , (cast_expression "(size_t)poVar22" ( (type_descriptor "size_t" primitive_type) ) identifier) ))) ;) (expression_statement "poVar38 = extraout_ECX_03;" (assignment_expression "poVar38 = extraout_ECX_03" identifier = identifier) ;) (if_statement "if (local_1b0.mc_skip < 1) {\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" if (parenthesized_expression "(local_1b0.mc_skip < 1)" ( (binary_expression "local_1b0.mc_skip < 1" (field_expression "local_1b0.mc_skip" identifier . field_identifier) < number_literal) )) (compound_statement "{\nLAB_00011f46:\n            psVar30 = local_1d8;\n            poVar11 = (opts_t *)local_1b0.mc_len;\n            poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);\n            if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t read from %s";\n          }" { (labeled_statement "LAB_00011f46:\n            psVar30 = local_1d8;" statement_identifier : (expression_statement "psVar30 = local_1d8;" (assignment_expression "psVar30 = local_1d8" identifier = identifier) ;)) (expression_statement "poVar11 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar11 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (expression_statement "poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len);" (assignment_expression "poVar22 = (opts_t *)read(uVar28,local_1d8,local_1b0.mc_len)" identifier = (cast_expression "(opts_t *)read(uVar28,local_1d8,local_1b0.mc_len)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "read(uVar28,local_1d8,local_1b0.mc_len)" identifier (argument_list "(uVar28,local_1d8,local_1b0.mc_len)" ( identifier , identifier , (field_expression "local_1b0.mc_len" identifier . field_identifier) ))))) ;) (if_statement "if (-1 < (int)poVar22) {\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }" if (parenthesized_expression "(-1 < (int)poVar22)" ( (binary_expression "-1 < (int)poVar22" number_literal < (cast_expression "(int)poVar22" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(poVar11,psVar30);\n              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;\n              if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }\n              poVar11 = (opts_t *)local_1b0.mc_len;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);\n              pr2serr("pad with 0xff bytes and continue\n");\n              poVar38 = poVar22;\n              poVar29 = (opts_t *)local_1b0.mc_len;\n              uVar36 = CONCAT44(local_1f0,poVar11);\n              goto LAB_00011f90;\n            }" { (expression_statement "poVar29 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar29 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (expression_statement "uVar36 = CONCAT44(poVar11,psVar30);" (assignment_expression "uVar36 = CONCAT44(poVar11,psVar30)" identifier = (call_expression "CONCAT44(poVar11,psVar30)" identifier (argument_list "(poVar11,psVar30)" ( identifier , identifier )))) ;) (if_statement "if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;" if (parenthesized_expression "(local_1b0.mc_len <= (int)poVar22)" ( (binary_expression "local_1b0.mc_len <= (int)poVar22" (field_expression "local_1b0.mc_len" identifier . field_identifier) <= (cast_expression "(int)poVar22" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;)) (if_statement "if (local_1b0.mc_len_given == false) {\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }" if (parenthesized_expression "(local_1b0.mc_len_given == false)" ( (binary_expression "local_1b0.mc_len_given == false" (field_expression "local_1b0.mc_len_given" identifier . field_identifier) == false) )) (compound_statement "{\n                poVar29 = poVar22;\n                uVar36 = CONCAT44(poVar11,psVar30);\n                if (local_1b0.verbose == 0) goto LAB_00011f90;\n                poVar38 = poVar22;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);\n                poVar11 = poVar22;\n                pr2serr("will send %d bytes",poVar22);\n                uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);\n                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;\n                pr2serr("\n",poVar11,local_1f0,poVar38);\n                uVar36 = CONCAT44(local_1f0,poVar11);\n                goto LAB_00011f90;\n              }" { (expression_statement "poVar29 = poVar22;" (assignment_expression "poVar29 = poVar22" identifier = identifier) ;) (expression_statement "uVar36 = CONCAT44(poVar11,psVar30);" (assignment_expression "uVar36 = CONCAT44(poVar11,psVar30)" identifier = (call_expression "CONCAT44(poVar11,psVar30)" identifier (argument_list "(poVar11,psVar30)" ( identifier , identifier )))) ;) (if_statement "if (local_1b0.verbose == 0) goto LAB_00011f90;" if (parenthesized_expression "(local_1b0.verbose == 0)" ( (binary_expression "local_1b0.verbose == 0" (field_expression "local_1b0.verbose" identifier . field_identifier) == number_literal) )) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;)) (expression_statement "poVar38 = poVar22;" (assignment_expression "poVar38 = poVar22" identifier = identifier) ;) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22);" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22)" identifier (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                        poVar22)" ( (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" " string_content escape_sequence ") , (field_expression "local_1b0.mc_len" identifier . field_identifier) , identifier , identifier ))) ;) (expression_statement "poVar11 = poVar22;" (assignment_expression "poVar11 = poVar22" identifier = identifier) ;) (expression_statement "pr2serr("will send %d bytes",poVar22);" (call_expression "pr2serr("will send %d bytes",poVar22)" identifier (argument_list "("will send %d bytes",poVar22)" ( (string_literal ""will send %d bytes"" " string_content ") , identifier ))) ;) (expression_statement "uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw);" (assignment_expression "uVar36 = CONCAT44(extraout_EDX_20,local_1b0.bpw)" identifier = (call_expression "CONCAT44(extraout_EDX_20,local_1b0.bpw)" identifier (argument_list "(extraout_EDX_20,local_1b0.bpw)" ( identifier , (field_expression "local_1b0.bpw" identifier . field_identifier) )))) ;) (if_statement "if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;" if (parenthesized_expression "((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len))" ( (binary_expression "(0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)" (parenthesized_expression "(0 < local_1b0.bpw)" ( (binary_expression "0 < local_1b0.bpw" number_literal < (field_expression "local_1b0.bpw" identifier . field_identifier)) )) && (parenthesized_expression "(local_1b0.bpw < local_1b0.mc_len)" ( (binary_expression "local_1b0.bpw < local_1b0.mc_len" (field_expression "local_1b0.bpw" identifier . field_identifier) < (field_expression "local_1b0.mc_len" identifier . field_identifier)) ))) )) (goto_statement "goto LAB_00012469;" goto statement_identifier ;)) (expression_statement "pr2serr("\n",poVar11,local_1f0,poVar38);" (call_expression "pr2serr("\n",poVar11,local_1f0,poVar38)" identifier (argument_list "("\n",poVar11,local_1f0,poVar38)" ( (string_literal ""\n"" " escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "uVar36 = CONCAT44(local_1f0,poVar11);" (assignment_expression "uVar36 = CONCAT44(local_1f0,poVar11)" identifier = (call_expression "CONCAT44(local_1f0,poVar11)" identifier (argument_list "(local_1f0,poVar11)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;) })) (expression_statement "poVar11 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar11 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22);" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22)" identifier (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,local_1f0,\n                      poVar22)" ( (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" " string_content escape_sequence ") , (field_expression "local_1b0.mc_len" identifier . field_identifier) , identifier , identifier ))) ;) (expression_statement "pr2serr("pad with 0xff bytes and continue\n");" (call_expression "pr2serr("pad with 0xff bytes and continue\n")" identifier (argument_list "("pad with 0xff bytes and continue\n")" ( (string_literal ""pad with 0xff bytes and continue\n"" " string_content escape_sequence ") ))) ;) (expression_statement "poVar38 = poVar22;" (assignment_expression "poVar38 = poVar22" identifier = identifier) ;) (expression_statement "poVar29 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar29 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (expression_statement "uVar36 = CONCAT44(local_1f0,poVar11);" (assignment_expression "uVar36 = CONCAT44(local_1f0,poVar11)" identifier = (call_expression "CONCAT44(local_1f0,poVar11)" identifier (argument_list "(local_1f0,poVar11)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;) })) (expression_statement "piVar14 = __errno_location();" (assignment_expression "piVar14 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar24 = sg_convert_errno(*piVar14);" (assignment_expression "uVar24 = sg_convert_errno(*piVar14)" identifier = (call_expression "sg_convert_errno(*piVar14)" identifier (argument_list "(*piVar14)" ( (pointer_expression "*piVar14" * identifier) )))) ;) (expression_statement "pcVar15 = "sg_ses_microcode: couldn\'t read from %s";" (assignment_expression "pcVar15 = "sg_ses_microcode: couldn\'t read from %s"" identifier = (string_literal ""sg_ses_microcode: couldn\'t read from %s"" " string_content escape_sequence string_content ")) ;) }) (else_clause "else {\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" else (compound_statement "{\n            if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }\n            _Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);\n            poVar38 = extraout_ECX_09;\n            if (-1 < _Var35) goto LAB_00011f46;\n            piVar14 = __errno_location();\n            uVar24 = sg_convert_errno(*piVar14);\n            pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" { (if_statement "if ((char)uVar27 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }" if (parenthesized_expression "((char)uVar27 == '\0')" ( (binary_expression "(char)uVar27 == '\0'" (cast_expression "(char)uVar27" ( (type_descriptor "char" primitive_type) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }\n              uVar24 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);\n              goto LAB_00011e75;\n            }" { (if_statement "if (local_1e0 == (stat64 *)0x0) {\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                uVar24 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);\n                goto LAB_000118d4;\n              }" { (expression_statement "uVar24 = 0xf;" (assignment_expression "uVar24 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);" (call_expression "pr2serr("Can\'t skip on stdin\n",uVar37,poVar22,uVar13)" identifier (argument_list "("Can\'t skip on stdin\n",uVar37,poVar22,uVar13)" ( (string_literal ""Can\'t skip on stdin\n"" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_000118d4;" goto statement_identifier ;) })) (expression_statement "uVar24 = 0xf;" (assignment_expression "uVar24 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13);" (call_expression "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13)" identifier (argument_list "("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,\n                      poVar22,uVar13)" ( (string_literal ""sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_00011e75;" goto statement_identifier ;) })) (expression_statement "_Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0);" (assignment_expression "_Var35 = lseek64(uVar28,(longlong)local_1b0.mc_skip,0)" identifier = (call_expression "lseek64(uVar28,(longlong)local_1b0.mc_skip,0)" identifier (argument_list "(uVar28,(longlong)local_1b0.mc_skip,0)" ( identifier , (cast_expression "(longlong)local_1b0.mc_skip" ( (type_descriptor "longlong" type_identifier) ) (field_expression "local_1b0.mc_skip" identifier . field_identifier)) , number_literal )))) ;) (expression_statement "poVar38 = extraout_ECX_09;" (assignment_expression "poVar38 = extraout_ECX_09" identifier = identifier) ;) (if_statement "if (-1 < _Var35) goto LAB_00011f46;" if (parenthesized_expression "(-1 < _Var35)" ( (binary_expression "-1 < _Var35" number_literal < identifier) )) (goto_statement "goto LAB_00011f46;" goto statement_identifier ;)) (expression_statement "piVar14 = __errno_location();" (assignment_expression "piVar14 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar24 = sg_convert_errno(*piVar14);" (assignment_expression "uVar24 = sg_convert_errno(*piVar14)" identifier = (call_expression "sg_convert_errno(*piVar14)" identifier (argument_list "(*piVar14)" ( (pointer_expression "*piVar14" * identifier) )))) ;) (expression_statement "pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s";" (assignment_expression "pcVar15 = "sg_ses_microcode: couldn\'t skip to required position on %s"" identifier = (string_literal ""sg_ses_microcode: couldn\'t skip to required position on %s"" " string_content escape_sequence string_content ")) ;) }))) (expression_statement "local_1d4 = local_124;" (assignment_expression "local_1d4 = local_124" identifier = identifier) ;) (expression_statement "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0);" (call_expression "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar15,local_1f0)" identifier (argument_list "(local_1d4,0x100,1,0x100,pcVar15,local_1f0)" ( identifier , number_literal , number_literal , number_literal , identifier , identifier ))) ;) (expression_statement "perror((char *)local_1d4);" (call_expression "perror((char *)local_1d4)" identifier (argument_list "((char *)local_1d4)" ( (cast_expression "(char *)local_1d4" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000118d4;" goto statement_identifier ;)) (goto_statement "goto LAB_00011e75;" goto statement_identifier ;) })) (expression_statement "uVar24 = 99;" (assignment_expression "uVar24 = 99" identifier = number_literal) ;) (expression_statement "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13);" (call_expression "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13)" identifier (argument_list "("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar12,psVar30,\n                uVar13)" ( (string_literal ""sg_ses_microcode: out of memory to hold microcode read from FILE\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "uVar13 = extraout_EDX_18;" (assignment_expression "uVar13 = extraout_EDX_18" identifier = identifier) ;) }))) (expression_statement "lVar33 = CONCAT44(uVar13,uVar24);" (assignment_expression "lVar33 = CONCAT44(uVar13,uVar24)" identifier = (call_expression "CONCAT44(uVar13,uVar24)" identifier (argument_list "(uVar13,uVar24)" ( identifier , identifier )))) ;) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;)) (labeled_statement "LAB_00011e75:\n      close(uVar28);" statement_identifier : (expression_statement "close(uVar28);" (call_expression "close(uVar28)" identifier (argument_list "(uVar28)" ( identifier ))) ;)) (expression_statement "lVar33 = CONCAT44(extraout_EDX_08,uVar24);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_08,uVar24)" identifier = (call_expression "CONCAT44(extraout_EDX_08,uVar24)" identifier (argument_list "(extraout_EDX_08,uVar24)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;) })) (switch_statement "switch(iVar18) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }" switch (parenthesized_expression "(iVar18)" ( identifier )) (compound_statement "{\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0.mc_non = true;\n      break;\n    case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = 1;\n      break;\n    case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;\n    case 100:\n      local_1b0.dry_run = true;\n      break;\n    case 0x65:\n      local_1b0.ealsd = true;\n      break;\n    case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;\n    case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;\n    case 0x74:\n      goto _L157;\n    case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;\n    }" { (case_statement "case 0x3f:" case number_literal :) (case_statement "case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;" case number_literal : (expression_statement "local_1e8 = local_1e8 + 1;" (assignment_expression "local_1e8 = local_1e8 + 1" identifier = (binary_expression "local_1e8 + 1" identifier + number_literal)) ;) (break_statement "break;" break ;)) (case_statement "default:\n      pcVar9 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar9);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto LAB_00011606;" default : (expression_statement "pcVar9 = "unrecognised option code 0x%x ??\n";" (assignment_expression "pcVar9 = "unrecognised option code 0x%x ??\n"" identifier = (string_literal ""unrecognised option code 0x%x ??\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_000115ef:\n      pr2serr(pcVar9);" statement_identifier : (expression_statement "pr2serr(pcVar9);" (call_expression "pr2serr(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier ))) ;)) (expression_statement "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );" (call_expression "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" identifier (argument_list "(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;)) (case_statement "case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;" case number_literal : (expression_statement "local_1f0 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "local_1f0 = *(char **)PTR_optarg_00015ffc" identifier = (pointer_expression "*(char **)PTR_optarg_00015ffc" * (cast_expression "(char **)PTR_optarg_00015ffc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 0x4e:\n      local_1b0.mc_non = true;\n      break;" case number_literal : (expression_statement "local_1b0.mc_non = true;" (assignment_expression "local_1b0.mc_non = true" (field_expression "local_1b0.mc_non" identifier . field_identifier) = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x53:\n      local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);\n      if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;" case number_literal : (expression_statement "local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5);" (assignment_expression "local_1b0.mc_subenc = sg_get_num_nomult(*(undefined4 *)puVar5)" (field_expression "local_1b0.mc_subenc" identifier . field_identifier) = (call_expression "sg_get_num_nomult(*(undefined4 *)puVar5)" identifier (argument_list "(*(undefined4 *)puVar5)" ( (pointer_expression "*(undefined4 *)puVar5" * (cast_expression "(undefined4 *)puVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (0xff < (uint)local_1b0.mc_subenc) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "(0xff < (uint)local_1b0.mc_subenc)" ( (binary_expression "0xff < (uint)local_1b0.mc_subenc" number_literal < (cast_expression "(uint)local_1b0.mc_subenc" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_1b0.mc_subenc" identifier . field_identifier))) )) (compound_statement "{\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");" (call_expression "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n")" identifier (argument_list "("expected argument to \'--subenc\' to be 0 to 255\n")" ( (string_literal ""expected argument to \'--subenc\' to be 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x56:\n      local_1e9 = 1;\n      break;" case number_literal : (expression_statement "local_1e9 = 1;" (assignment_expression "local_1e9 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 0x62:\n      local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }\n      pcVar9 = strchr(*(char **)puVar6,0x2c);\n      if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }\n      break;" case number_literal : (expression_statement "local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1b0.bpw = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" (field_expression "local_1b0.bpw" identifier . field_identifier) = (call_expression "sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (local_1b0.bpw < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "(local_1b0.bpw < 0)" ( (binary_expression "local_1b0.bpw < 0" (field_expression "local_1b0.bpw" identifier . field_identifier) < number_literal) )) (compound_statement "{\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("argument to \'--bpw\' should be in a positive number\n");" (call_expression "pr2serr("argument to \'--bpw\' should be in a positive number\n")" identifier (argument_list "("argument to \'--bpw\' should be in a positive number\n")" ( (string_literal ""argument to \'--bpw\' should be in a positive number\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (expression_statement "pcVar9 = strchr(*(char **)puVar6,0x2c);" (assignment_expression "pcVar9 = strchr(*(char **)puVar6,0x2c)" identifier = (call_expression "strchr(*(char **)puVar6,0x2c)" identifier (argument_list "(*(char **)puVar6,0x2c)" ( (pointer_expression "*(char **)puVar6" * (cast_expression "(char **)puVar6" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) , number_literal )))) ;) (if_statement "if ((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)) {\n        local_1b0.bpw_then_activate = true;\n      }" if (parenthesized_expression "((pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0))" ( (binary_expression "(pcVar9 != (char *)0x0) && (iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)" (parenthesized_expression "(pcVar9 != (char *)0x0)" ( (binary_expression "pcVar9 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0)" ( (comma_expression "iVar18 = strncmp("act",pcVar9 + 1,3), iVar18 == 0" (assignment_expression "iVar18 = strncmp("act",pcVar9 + 1,3)" identifier = (call_expression "strncmp("act",pcVar9 + 1,3)" identifier (argument_list "("act",pcVar9 + 1,3)" ( (string_literal ""act"" " string_content ") , (binary_expression "pcVar9 + 1" identifier + number_literal) , number_literal )))) , (binary_expression "iVar18 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n        local_1b0.bpw_then_activate = true;\n      }" { (expression_statement "local_1b0.bpw_then_activate = true;" (assignment_expression "local_1b0.bpw_then_activate = true" (field_expression "local_1b0.bpw_then_activate" identifier . field_identifier) = true) ;) })) (break_statement "break;" break ;)) (case_statement "case 100:\n      local_1b0.dry_run = true;\n      break;" case number_literal : (expression_statement "local_1b0.dry_run = true;" (assignment_expression "local_1b0.dry_run = true" (field_expression "local_1b0.dry_run" identifier . field_identifier) = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x65:\n      local_1b0.ealsd = true;\n      break;" case number_literal : (expression_statement "local_1b0.ealsd = true;" (assignment_expression "local_1b0.ealsd = true" (field_expression "local_1b0.ealsd" identifier . field_identifier) = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x69:\n      local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }\n      break;" case number_literal : (expression_statement "local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1b0.mc_id = sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc)" (field_expression "local_1b0.mc_id" identifier . field_identifier) = (call_expression "sg_get_num_nomult(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (0xff < (uint)local_1b0.mc_id) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "(0xff < (uint)local_1b0.mc_id)" ( (binary_expression "0xff < (uint)local_1b0.mc_id" number_literal < (cast_expression "(uint)local_1b0.mc_id" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_1b0.mc_id" identifier . field_identifier))) )) (compound_statement "{\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("argument to \'--id\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--id\' should be in the range 0 to 255\n")" identifier (argument_list "("argument to \'--id\' should be in the range 0 to 255\n")" ( (string_literal ""argument to \'--id\' should be in the range 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x6c:\n      local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }\n      local_1b0.mc_len_given = true;\n      break;" case number_literal : (expression_statement "local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1b0.mc_len = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" (field_expression "local_1b0.mc_len" identifier . field_identifier) = (call_expression "sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (local_1b0.mc_len < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "(local_1b0.mc_len < 0)" ( (binary_expression "local_1b0.mc_len < 0" (field_expression "local_1b0.mc_len" identifier . field_identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--length\'\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--length\'\n");" (call_expression "pr2serr("bad argument to \'--length\'\n")" identifier (argument_list "("bad argument to \'--length\'\n")" ( (string_literal ""bad argument to \'--length\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (expression_statement "local_1b0.mc_len_given = true;" (assignment_expression "local_1b0.mc_len_given = true" (field_expression "local_1b0.mc_len_given" identifier . field_identifier) = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x6d:\n      ppuVar8 = __ctype_b_loc();\n      pcVar9 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }\n      break;" case number_literal : (expression_statement "ppuVar8 = __ctype_b_loc();" (assignment_expression "ppuVar8 = __ctype_b_loc()" identifier = (call_expression "__ctype_b_loc()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar9 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "pcVar9 = *(char **)PTR_optarg_00015ffc" identifier = (pointer_expression "*(char **)PTR_optarg_00015ffc" * (cast_expression "(char **)PTR_optarg_00015ffc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (if_statement "if ((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0) {\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }\n      else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }" if (parenthesized_expression "((*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0)" ( (binary_expression "(*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8) == 0" (parenthesized_expression "(*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8)" ( (binary_expression "*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1) & 8" (pointer_expression "*(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1)" * (cast_expression "(byte *)((int)*ppuVar8 + *pcVar9 * 2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)*ppuVar8 + *pcVar9 * 2 + 1)" ( (binary_expression "(int)*ppuVar8 + *pcVar9 * 2 + 1" (binary_expression "(int)*ppuVar8 + *pcVar9 * 2" (cast_expression "(int)*ppuVar8" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*ppuVar8" * identifier)) + (binary_expression "*pcVar9 * 2" (pointer_expression "*pcVar9" * identifier) * number_literal)) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar28 = 0xffffffff;\n        pcVar10 = pcVar9;\n        do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');\n        if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }\n        pmVar23 = mode_arr;\n        pcVar10 = mode_arr[0].mode_string;\n        while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }\n        local_1b0.mc_mode = pmVar23->mode;\n      }" { (expression_statement "uVar28 = 0xffffffff;" (assignment_expression "uVar28 = 0xffffffff" identifier = number_literal) ;) (expression_statement "pcVar10 = pcVar9;" (assignment_expression "pcVar10 = pcVar9" identifier = identifier) ;) (do_statement "do {\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        } while (cVar7 != '\0');" do (compound_statement "{\n          if (uVar28 == 0) break;\n          uVar28 = uVar28 - 1;\n          cVar7 = *pcVar10;\n          pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;\n        }" { (if_statement "if (uVar28 == 0) break;" if (parenthesized_expression "(uVar28 == 0)" ( (binary_expression "uVar28 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar28 = uVar28 - 1;" (assignment_expression "uVar28 = uVar28 - 1" identifier = (binary_expression "uVar28 - 1" identifier - number_literal)) ;) (expression_statement "cVar7 = *pcVar10;" (assignment_expression "cVar7 = *pcVar10" identifier = (pointer_expression "*pcVar10" * identifier)) ;) (expression_statement "pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1;" (assignment_expression "pcVar10 = pcVar10 + (uint)bVar32 * -2 + 1" identifier = (binary_expression "pcVar10 + (uint)bVar32 * -2 + 1" (binary_expression "pcVar10 + (uint)bVar32 * -2" identifier + (binary_expression "(uint)bVar32 * -2" (cast_expression "(uint)bVar32" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar7 != '\0')" ( (binary_expression "cVar7 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (if_statement "if (mode_arr[0].mode_string == (char *)0x0) {\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }" if (parenthesized_expression "(mode_arr[0].mode_string == (char *)0x0)" ( (binary_expression "mode_arr[0].mode_string == (char *)0x0" (field_expression "mode_arr[0].mode_string" (subscript_expression "mode_arr[0]" identifier [ number_literal ]) . field_identifier) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00011fdc:\n          print_modes();\n          goto LAB_00011606;\n        }" { (labeled_statement "LAB_00011fdc:\n          print_modes();" statement_identifier : (expression_statement "print_modes();" (call_expression "print_modes()" identifier (argument_list "()" ( ))) ;)) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (expression_statement "pmVar23 = mode_arr;" (assignment_expression "pmVar23 = mode_arr" identifier = identifier) ;) (expression_statement "pcVar10 = mode_arr[0].mode_string;" (assignment_expression "pcVar10 = mode_arr[0].mode_string" identifier = (field_expression "mode_arr[0].mode_string" (subscript_expression "mode_arr[0]" identifier [ number_literal ]) . field_identifier)) ;) (while_statement "while (iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0) {\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }" while (parenthesized_expression "(iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0)" ( (comma_expression "iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1), iVar18 != 0" (assignment_expression "iVar18 = strncmp(pcVar10,pcVar9,~uVar28 - 1)" identifier = (call_expression "strncmp(pcVar10,pcVar9,~uVar28 - 1)" identifier (argument_list "(pcVar10,pcVar9,~uVar28 - 1)" ( identifier , identifier , (binary_expression "~uVar28 - 1" (unary_expression "~uVar28" ~ identifier) - number_literal) )))) , (binary_expression "iVar18 != 0" identifier != number_literal)) )) (compound_statement "{\n          pmVar23 = pmVar23 + 1;\n          pcVar10 = pmVar23->mode_string;\n          if (pcVar10 == (char *)0x0) goto LAB_00011fdc;\n        }" { (expression_statement "pmVar23 = pmVar23 + 1;" (assignment_expression "pmVar23 = pmVar23 + 1" identifier = (binary_expression "pmVar23 + 1" identifier + number_literal)) ;) (expression_statement "pcVar10 = pmVar23->mode_string;" (assignment_expression "pcVar10 = pmVar23->mode_string" identifier = (field_expression "pmVar23->mode_string" identifier -> field_identifier)) ;) (if_statement "if (pcVar10 == (char *)0x0) goto LAB_00011fdc;" if (parenthesized_expression "(pcVar10 == (char *)0x0)" ( (binary_expression "pcVar10 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011fdc;" goto statement_identifier ;)) })) (expression_statement "local_1b0.mc_mode = pmVar23->mode;" (assignment_expression "local_1b0.mc_mode = pmVar23->mode" (field_expression "local_1b0.mc_mode" identifier . field_identifier) = (field_expression "pmVar23->mode" identifier -> field_identifier)) ;) }) (else_clause "else {\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }" else (compound_statement "{\n        local_1b0.mc_mode = sg_get_num_nomult(pcVar9);\n        if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }\n      }" { (expression_statement "local_1b0.mc_mode = sg_get_num_nomult(pcVar9);" (assignment_expression "local_1b0.mc_mode = sg_get_num_nomult(pcVar9)" (field_expression "local_1b0.mc_mode" identifier . field_identifier) = (call_expression "sg_get_num_nomult(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier )))) ;) (if_statement "if ((opts_t *)0xff < (uint)local_1b0.mc_mode) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }" if (parenthesized_expression "((opts_t *)0xff < (uint)local_1b0.mc_mode)" ( (binary_expression "(opts_t *)0xff < (uint)local_1b0.mc_mode" (cast_expression "(opts_t *)0xff" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) < (cast_expression "(uint)local_1b0.mc_mode" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier))) )) (compound_statement "{\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto LAB_00011606;\n        }" { (expression_statement "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n")" identifier (argument_list "("argument to \'--mode\' should be in the range 0 to 255\n")" ( (string_literal ""argument to \'--mode\' should be in the range 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) }))) (break_statement "break;" break ;)) (case_statement "case 0x6f:\n      local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }\n      if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }\n      break;" case number_literal : (expression_statement "local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1b0.mc_offset = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" (field_expression "local_1b0.mc_offset" identifier . field_identifier) = (call_expression "sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (local_1b0.mc_offset < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "(local_1b0.mc_offset < 0)" ( (binary_expression "local_1b0.mc_offset < 0" (field_expression "local_1b0.mc_offset" identifier . field_identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--offset\'\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--offset\'\n");" (call_expression "pr2serr("bad argument to \'--offset\'\n")" identifier (argument_list "("bad argument to \'--offset\'\n")" ( (string_literal ""bad argument to \'--offset\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (if_statement "if ((local_1b0.mc_offset & 3U) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "((local_1b0.mc_offset & 3U) != 0)" ( (binary_expression "(local_1b0.mc_offset & 3U) != 0" (parenthesized_expression "(local_1b0.mc_offset & 3U)" ( (binary_expression "local_1b0.mc_offset & 3U" (field_expression "local_1b0.mc_offset" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("\'--offset\' value needs to be a multiple of 4\n");" (call_expression "pr2serr("\'--offset\' value needs to be a multiple of 4\n")" identifier (argument_list "("\'--offset\' value needs to be a multiple of 4\n")" ( (string_literal ""\'--offset\' value needs to be a multiple of 4\n"" " escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x73:\n      local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);\n      if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }\n      break;" case number_literal : (expression_statement "local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1b0.mc_skip = sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" (field_expression "local_1b0.mc_skip" identifier . field_identifier) = (call_expression "sg_get_num(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (local_1b0.mc_skip < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }" if (parenthesized_expression "(local_1b0.mc_skip < 0)" ( (binary_expression "local_1b0.mc_skip < 0" (field_expression "local_1b0.mc_skip" identifier . field_identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--skip\'\n");\n        goto LAB_00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--skip\'\n");" (call_expression "pr2serr("bad argument to \'--skip\'\n")" identifier (argument_list "("bad argument to \'--skip\'\n")" ( (string_literal ""bad argument to \'--skip\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto LAB_00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x74:\n      goto _L157;" case number_literal : (goto_statement "goto _L157;" goto statement_identifier ;)) (case_statement "case 0x76:\n      local_1b0.verbose = local_1b0.verbose + 1;\n      bVar3 = true;" case number_literal : (expression_statement "local_1b0.verbose = local_1b0.verbose + 1;" (assignment_expression "local_1b0.verbose = local_1b0.verbose + 1" (field_expression "local_1b0.verbose" identifier . field_identifier) = (binary_expression "local_1b0.verbose + 1" (field_expression "local_1b0.verbose" identifier . field_identifier) + number_literal)) ;) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;)) })) }) while (parenthesized_expression "( true )" ( true )) ;)) (labeled_statement "_L157:\n  local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5);" statement_identifier : (expression_statement "local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5);" (assignment_expression "local_1b0.mc_tlen = sg_get_num(*(undefined4 *)puVar5)" (field_expression "local_1b0.mc_tlen" identifier . field_identifier) = (call_expression "sg_get_num(*(undefined4 *)puVar5)" identifier (argument_list "(*(undefined4 *)puVar5)" ( (pointer_expression "*(undefined4 *)puVar5" * (cast_expression "(undefined4 *)puVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;)) (if_statement "if (local_1b0.mc_tlen < 0) goto code_r0x0001141f;" if (parenthesized_expression "(local_1b0.mc_tlen < 0)" ( (binary_expression "local_1b0.mc_tlen < 0" (field_expression "local_1b0.mc_tlen" identifier . field_identifier) < number_literal) )) (goto_statement "goto code_r0x0001141f;" goto statement_identifier ;)) (goto_statement "goto LAB_00011330;" goto statement_identifier ;) (labeled_statement "code_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");" statement_identifier : (expression_statement "pr2serr("bad argument to \'--tlength\'\n");" (call_expression "pr2serr("bad argument to \'--tlength\'\n")" identifier (argument_list "("bad argument to \'--tlength\'\n")" ( (string_literal ""bad argument to \'--tlength\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;)) (labeled_statement "LAB_00011606:\n  poVar22 = (opts_t *)0x1;" statement_identifier : (expression_statement "poVar22 = (opts_t *)0x1;" (assignment_expression "poVar22 = (opts_t *)0x1" identifier = (cast_expression "(opts_t *)0x1" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "local_1e0 = (stat64 *)pcVar15;" (assignment_expression "local_1e0 = (stat64 *)pcVar15" identifier = (cast_expression "(stat64 *)pcVar15" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (labeled_statement "LAB_0001160b:\n  do {\n    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar28 == 0) {\n      return (int)poVar22;\n    }\n    uVar36 = __stack_chk_fail_local();\nLAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);\n    poVar29 = poVar22;\nLAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }\nLAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }\n    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }\nLAB_00011e81:\n    uVar24 = (undefined4)lVar33;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }\nLAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);\n    iVar20 = (int)lVar33;\n    if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }\n    uVar36 = CONCAT44(uVar13,iVar20);\n    if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }\n    poVar22 = (opts_t *)uVar36;\n    if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar28 == 0) {\n      return (int)poVar22;\n    }\n    uVar36 = __stack_chk_fail_local();\nLAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);\n    poVar29 = poVar22;\nLAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }\nLAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }\n    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }\nLAB_00011e81:\n    uVar24 = (undefined4)lVar33;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }\nLAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);\n    iVar20 = (int)lVar33;\n    if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }\n    uVar36 = CONCAT44(uVar13,iVar20);\n    if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }\n    poVar22 = (opts_t *)uVar36;\n    if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }\n  } while( true );" do (compound_statement "{\n    uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar28 == 0) {\n      return (int)poVar22;\n    }\n    uVar36 = __stack_chk_fail_local();\nLAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);\n    poVar29 = poVar22;\nLAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }\nLAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }\n    if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }\nLAB_00011e81:\n    uVar24 = (undefined4)lVar33;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }\nLAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);\n    iVar20 = (int)lVar33;\n    if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }\n    uVar36 = CONCAT44(uVar13,iVar20);\n    if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }\n    poVar22 = (opts_t *)uVar36;\n    if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }\n  }" { (expression_statement "uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "uVar28 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" identifier = (binary_expression "local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" identifier ^ (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" * (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) )))))) ;) (if_statement "if (uVar28 == 0) {\n      return (int)poVar22;\n    }" if (parenthesized_expression "(uVar28 == 0)" ( (binary_expression "uVar28 == 0" identifier == number_literal) )) (compound_statement "{\n      return (int)poVar22;\n    }" { (return_statement "return (int)poVar22;" return (cast_expression "(int)poVar22" ( (type_descriptor "int" primitive_type) ) identifier) ;) })) (expression_statement "uVar36 = __stack_chk_fail_local();" (assignment_expression "uVar36 = __stack_chk_fail_local()" identifier = (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( )))) ;) (labeled_statement "LAB_00012469:\n    poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);" statement_identifier : (expression_statement "poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20);" (assignment_expression "poVar38 = (opts_t *)((ulonglong)uVar36 >> 0x20)" identifier = (cast_expression "(opts_t *)((ulonglong)uVar36 >> 0x20)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar36 >> 0x20)" ( (binary_expression "(ulonglong)uVar36 >> 0x20" (cast_expression "(ulonglong)uVar36" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);" (call_expression "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38)" identifier (argument_list "(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38)" ( (string_literal "", %d bytes per WRITE BUFFER command\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "poVar29 = poVar22;" (assignment_expression "poVar29 = poVar22" identifier = identifier) ;) (labeled_statement "LAB_00011f90:\n    local_1b0.mc_len = (int)poVar29;" statement_identifier : (expression_statement "local_1b0.mc_len = (int)poVar29;" (assignment_expression "local_1b0.mc_len = (int)poVar29" (field_expression "local_1b0.mc_len" identifier . field_identifier) = (cast_expression "(int)poVar29" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (if_statement "if (local_1e0 != (stat64 *)0x0) {\n      close(uVar28);\n    }" if (parenthesized_expression "(local_1e0 != (stat64 *)0x0)" ( (binary_expression "local_1e0 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      close(uVar28);\n    }" { (expression_statement "close(uVar28);" (call_expression "close(uVar28)" identifier (argument_list "(uVar28)" ( identifier ))) ;) })) (labeled_statement "LAB_00011a5c:\n    if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }" statement_identifier : (if_statement "if (local_1b0.mc_tlen < local_1b0.mc_len) {\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }" if (parenthesized_expression "(local_1b0.mc_tlen < local_1b0.mc_len)" ( (binary_expression "local_1b0.mc_tlen < local_1b0.mc_len" (field_expression "local_1b0.mc_tlen" identifier . field_identifier) < (field_expression "local_1b0.mc_len" identifier . field_identifier)) )) (compound_statement "{\n      local_1b0.mc_tlen = local_1b0.mc_len;\n    }" { (expression_statement "local_1b0.mc_tlen = local_1b0.mc_len;" (assignment_expression "local_1b0.mc_tlen = local_1b0.mc_len" (field_expression "local_1b0.mc_tlen" identifier . field_identifier) = (field_expression "local_1b0.mc_len" identifier . field_identifier)) ;) }))) (if_statement "if ((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)) {\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }" if (parenthesized_expression "((local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0))" ( (binary_expression "(local_1b0.mc_non == false) || ((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)" (parenthesized_expression "(local_1b0.mc_non == false)" ( (binary_expression "local_1b0.mc_non == false" (field_expression "local_1b0.mc_non" identifier . field_identifier) == false) )) || (parenthesized_expression "((opts_t *)local_1b0.mc_mode != (opts_t *)0x0)" ( (binary_expression "(opts_t *)local_1b0.mc_mode != (opts_t *)0x0" (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier)) != (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);\n      poVar22 = (opts_t *)&local_1c0;\n      poVar38 = (opts_t *)0x0;\n      lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);\n      local_1e0 = (stat64 *)lVar33;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }\n    }" { (expression_statement "poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose);" (assignment_expression "poVar11 = (opts_t *)(uint)(3 < local_1b0.verbose)" identifier = (cast_expression "(opts_t *)(uint)(3 < local_1b0.verbose)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)(3 < local_1b0.verbose)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(3 < local_1b0.verbose)" ( (binary_expression "3 < local_1b0.verbose" number_literal < (field_expression "local_1b0.verbose" identifier . field_identifier)) ))))) ;) (expression_statement "poVar22 = (opts_t *)&local_1c0;" (assignment_expression "poVar22 = (opts_t *)&local_1c0" identifier = (cast_expression "(opts_t *)&local_1c0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_1c0" & identifier))) ;) (expression_statement "poVar38 = (opts_t *)0x0;" (assignment_expression "poVar38 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "lVar33 = sg_memalign(0x2000,0,poVar22,poVar11);" (assignment_expression "lVar33 = sg_memalign(0x2000,0,poVar22,poVar11)" identifier = (call_expression "sg_memalign(0x2000,0,poVar22,poVar11)" identifier (argument_list "(0x2000,0,poVar22,poVar11)" ( number_literal , number_literal , identifier , identifier )))) ;) (expression_statement "local_1e0 = (stat64 *)lVar33;" (assignment_expression "local_1e0 = (stat64 *)lVar33" identifier = (cast_expression "(stat64 *)lVar33" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }\n      else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar33 = CONCAT44(extraout_EDX_19,99);\n      }" { (expression_statement "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");" (call_expression "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n")" identifier (argument_list "("sg_ses_microcode: out of memory (data-in buffer)\n")" ( (string_literal ""sg_ses_microcode: out of memory (data-in buffer)\n"" " string_content escape_sequence ") ))) ;) (expression_statement "lVar33 = CONCAT44(extraout_EDX_19,99);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_19,99)" identifier = (call_expression "CONCAT44(extraout_EDX_19,99)" identifier (argument_list "(extraout_EDX_19,99)" ( identifier , number_literal )))) ;) }) (else_clause "else {\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }" else (compound_statement "{\n        if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }\n        uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);\n        uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;\n        if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }\n      }" { (if_statement "if (local_1b0.dry_run == false) {\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }" if (parenthesized_expression "(local_1b0.dry_run == false)" ( (binary_expression "local_1b0.dry_run == false" (field_expression "local_1b0.dry_run" identifier . field_identifier) == false) )) (compound_statement "{\n          iVar20 = 1;\n          if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }\n          lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);\n          poVar29 = (opts_t *)lVar33;\n          if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar26 = (opts_t *)(0x2000 - local_1c4);\n          op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = extraout_ECX_05;\n          poVar31 = op;\n          if (op < (opts_t *)0x2001) goto LAB_00011b07;\n          poVar31 = (opts_t *)0x2000;\n          poVar38 = (opts_t *)0x2000;\n          uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );\n          uVar28 = (uint)((ulonglong)uVar36 >> 0x20);\n          poVar17 = (opts_t *)uVar36;\n          op_00 = extraout_ECX_06;\n          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;\n        }" { (expression_statement "iVar20 = 1;" (assignment_expression "iVar20 = 1" identifier = number_literal) ;) (if_statement "if (0 < local_1b0.verbose) {\n            iVar20 = local_1b0.verbose;\n          }" if (parenthesized_expression "(0 < local_1b0.verbose)" ( (binary_expression "0 < local_1b0.verbose" number_literal < (field_expression "local_1b0.verbose" identifier . field_identifier)) )) (compound_statement "{\n            iVar20 = local_1b0.verbose;\n          }" { (expression_statement "iVar20 = local_1b0.verbose;" (assignment_expression "iVar20 = local_1b0.verbose" identifier = (field_expression "local_1b0.verbose" identifier . field_identifier)) ;) })) (expression_statement "lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1);" (assignment_expression "lVar33 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1)" identifier = (call_expression "sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1)" identifier (argument_list "(local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar20 + -1)" ( identifier , number_literal , number_literal , identifier , number_literal , number_literal , (pointer_expression "&local_1c4" & identifier) , number_literal , (binary_expression "iVar20 + -1" identifier + number_literal) )))) ;) (expression_statement "poVar29 = (opts_t *)lVar33;" (assignment_expression "poVar29 = (opts_t *)lVar33" identifier = (cast_expression "(opts_t *)lVar33" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (poVar29 != (opts_t *)0x0) goto LAB_00011e81;" if (parenthesized_expression "(poVar29 != (opts_t *)0x0)" ( (binary_expression "poVar29 != (opts_t *)0x0" identifier != (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2)" identifier = (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" * (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 2)" ( (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "poVar26 = (opts_t *)(0x2000 - local_1c4);" (assignment_expression "poVar26 = (opts_t *)(0x2000 - local_1c4)" identifier = (cast_expression "(opts_t *)(0x2000 - local_1c4)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(0x2000 - local_1c4)" ( (binary_expression "0x2000 - local_1c4" number_literal - identifier) )))) ;) (expression_statement "op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);" (assignment_expression "op = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4)" identifier = (cast_expression "(opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ushort)(uVar2 << 8 | uVar2 >> 8) + 4)" ( (binary_expression "(ushort)(uVar2 << 8 | uVar2 >> 8) + 4" (call_expression "(ushort)(uVar2 << 8 | uVar2 >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) ))) + number_literal) )))) ;) (expression_statement "op_00 = extraout_ECX_05;" (assignment_expression "op_00 = extraout_ECX_05" identifier = identifier) ;) (expression_statement "poVar31 = op;" (assignment_expression "poVar31 = op" identifier = identifier) ;) (if_statement "if (op < (opts_t *)0x2001) goto LAB_00011b07;" if (parenthesized_expression "(op < (opts_t *)0x2001)" ( (binary_expression "op < (opts_t *)0x2001" identifier < (cast_expression "(opts_t *)0x2001" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011b07;" goto statement_identifier ;)) (expression_statement "poVar31 = (opts_t *)0x2000;" (assignment_expression "poVar31 = (opts_t *)0x2000" identifier = (cast_expression "(opts_t *)0x2000" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "poVar38 = (opts_t *)0x2000;" (assignment_expression "poVar38 = (opts_t *)0x2000" identifier = (cast_expression "(opts_t *)0x2000" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          );" (assignment_expression "uVar36 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          )" identifier = (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          )" identifier (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,op,0\n                          )" ( (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" " string_content escape_sequence ") , number_literal , identifier , number_literal )))) ;) (expression_statement "uVar28 = (uint)((ulonglong)uVar36 >> 0x20);" (assignment_expression "uVar28 = (uint)((ulonglong)uVar36 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar36 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar36 >> 0x20)" ( (binary_expression "(ulonglong)uVar36 >> 0x20" (cast_expression "(ulonglong)uVar36" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "poVar17 = (opts_t *)uVar36;" (assignment_expression "poVar17 = (opts_t *)uVar36" identifier = (cast_expression "(opts_t *)uVar36" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "op_00 = extraout_ECX_06;" (assignment_expression "op_00 = extraout_ECX_06" identifier = identifier) ;) (if_statement "if ((int)poVar26 < 0x2000) goto LAB_00011ddf;" if (parenthesized_expression "((int)poVar26 < 0x2000)" ( (binary_expression "(int)poVar26 < 0x2000" (cast_expression "(int)poVar26" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_00011ddf;" goto statement_identifier ;)) }) (else_clause "else {\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }" else (compound_statement "{\n          puVar25 = dummy_rd_resp;\n          psVar30 = local_1e0;\n          for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }\n          poVar26 = (opts_t *)0x48;\n          local_1c4 = 0x1fb8;\n          uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);\n          op_00 = (opts_t *)0x0;\n          poVar31 = poVar29;\n          if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }\n          if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }\n        }" { (expression_statement "puVar25 = dummy_rd_resp;" (assignment_expression "puVar25 = dummy_rd_resp" identifier = identifier) ;) (expression_statement "psVar30 = local_1e0;" (assignment_expression "psVar30 = local_1e0" identifier = identifier) ;) (for_statement "for (iVar20 = 0x12; iVar20 != 0; iVar20 = iVar20 + -1) {\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }" for ( (assignment_expression "iVar20 = 0x12" identifier = number_literal) ; (binary_expression "iVar20 != 0" identifier != number_literal) ; (assignment_expression "iVar20 = iVar20 + -1" identifier = (binary_expression "iVar20 + -1" identifier + number_literal)) ) (compound_statement "{\n            *(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;\n            puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;\n            psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);\n          }" { (expression_statement "*(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25;" (assignment_expression "*(undefined4 *)&psVar30->st_dev = *(undefined4 *)puVar25" (pointer_expression "*(undefined4 *)&psVar30->st_dev" * (cast_expression "(undefined4 *)&psVar30->st_dev" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar30->st_dev" & (field_expression "psVar30->st_dev" identifier -> field_identifier)))) = (pointer_expression "*(undefined4 *)puVar25" * (cast_expression "(undefined4 *)puVar25" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4;" (assignment_expression "puVar25 = puVar25 + ((uint)bVar32 * -2 + 1) * 4" identifier = (binary_expression "puVar25 + ((uint)bVar32 * -2 + 1) * 4" identifier + (binary_expression "((uint)bVar32 * -2 + 1) * 4" (parenthesized_expression "((uint)bVar32 * -2 + 1)" ( (binary_expression "(uint)bVar32 * -2 + 1" (binary_expression "(uint)bVar32 * -2" (cast_expression "(uint)bVar32" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal) + number_literal) )) * number_literal))) ;) (expression_statement "psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4);" (assignment_expression "psVar30 = (stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4)" identifier = (cast_expression "(stat64 *)((int)psVar30 + (uint)bVar32 * -8 + 4)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar30 + (uint)bVar32 * -8 + 4)" ( (binary_expression "(int)psVar30 + (uint)bVar32 * -8 + 4" (binary_expression "(int)psVar30 + (uint)bVar32 * -8" (cast_expression "(int)psVar30" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uint)bVar32 * -8" (cast_expression "(uint)bVar32" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) })) (expression_statement "poVar26 = (opts_t *)0x48;" (assignment_expression "poVar26 = (opts_t *)0x48" identifier = (cast_expression "(opts_t *)0x48" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1c4 = 0x1fb8;" (assignment_expression "local_1c4 = 0x1fb8" identifier = number_literal) ;) (expression_statement "uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar2 = *(ushort *)((int)&local_1e0->st_dev + 2)" identifier = (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" * (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 2)" ( (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4);" (assignment_expression "poVar29 = (opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4)" identifier = (cast_expression "(opts_t *)((ushort)(uVar2 << 8 | uVar2 >> 8) + 4)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ushort)(uVar2 << 8 | uVar2 >> 8) + 4)" ( (binary_expression "(ushort)(uVar2 << 8 | uVar2 >> 8) + 4" (call_expression "(ushort)(uVar2 << 8 | uVar2 >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) ))) + number_literal) )))) ;) (expression_statement "op_00 = (opts_t *)0x0;" (assignment_expression "op_00 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "poVar31 = poVar29;" (assignment_expression "poVar31 = poVar29" identifier = identifier) ;) (if_statement "if (poVar29 < (opts_t *)0x2001) {\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }\n          else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }" if (parenthesized_expression "(poVar29 < (opts_t *)0x2001)" ( (binary_expression "poVar29 < (opts_t *)0x2001" identifier < (cast_expression "(opts_t *)0x2001" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);\n            poVar17 = (opts_t *)lVar33;\n            op = poVar22;\n            poVar29 = poVar11;\n            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;\n          }" { (labeled_statement "LAB_00011b07:\n            uVar28 = (uint)((ulonglong)lVar33 >> 0x20);" statement_identifier : (expression_statement "uVar28 = (uint)((ulonglong)lVar33 >> 0x20);" (assignment_expression "uVar28 = (uint)((ulonglong)lVar33 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar33 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar33 >> 0x20)" ( (binary_expression "(ulonglong)lVar33 >> 0x20" (cast_expression "(ulonglong)lVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "poVar17 = (opts_t *)lVar33;" (assignment_expression "poVar17 = (opts_t *)lVar33" identifier = (cast_expression "(opts_t *)lVar33" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "op = poVar22;" (assignment_expression "op = poVar22" identifier = identifier) ;) (expression_statement "poVar29 = poVar11;" (assignment_expression "poVar29 = poVar11" identifier = identifier) ;) (if_statement "if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;" if (parenthesized_expression "((int)poVar26 < (int)poVar31)" ( (binary_expression "(int)poVar26 < (int)poVar31" (cast_expression "(int)poVar26" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)poVar31" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00011ddf;" goto statement_identifier ;)) }) (else_clause "else {\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }" else (compound_statement "{\n            poVar31 = (opts_t *)0x2000;\n            poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);\nLAB_00011ddf:\n            poVar38 = poVar26;\n            op = poVar31;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);\n            op_00 = extraout_ECX_07;\n            uVar28 = extraout_EDX_06;\n            poVar31 = poVar26;\n            poVar29 = poVar17;\n          }" { (expression_statement "poVar31 = (opts_t *)0x2000;" (assignment_expression "poVar31 = (opts_t *)0x2000" identifier = (cast_expression "(opts_t *)0x2000" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0);" (assignment_expression "poVar17 = (opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0)" identifier = (cast_expression "(opts_t *)\n                      pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0)" identifier (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                              poVar29,local_1e0)" ( (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" " string_content escape_sequence ") , number_literal , identifier , identifier ))))) ;) (labeled_statement "LAB_00011ddf:\n            poVar38 = poVar26;" statement_identifier : (expression_statement "poVar38 = poVar26;" (assignment_expression "poVar38 = poVar26" identifier = identifier) ;)) (expression_statement "op = poVar31;" (assignment_expression "op = poVar31" identifier = identifier) ;) (expression_statement "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17);" (call_expression "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17)" identifier (argument_list "("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,\n                    poVar31,poVar17)" ( (string_literal ""<<< warning response too short [actually got %d but need %d]>>>\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "op_00 = extraout_ECX_07;" (assignment_expression "op_00 = extraout_ECX_07" identifier = identifier) ;) (expression_statement "uVar28 = extraout_EDX_06;" (assignment_expression "uVar28 = extraout_EDX_06" identifier = identifier) ;) (expression_statement "poVar31 = poVar26;" (assignment_expression "poVar31 = poVar26" identifier = identifier) ;) (expression_statement "poVar29 = poVar17;" (assignment_expression "poVar29 = poVar17" identifier = identifier) ;) }))) (if_statement "if ((int)poVar31 < 8) {\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }" if (parenthesized_expression "((int)poVar31 < 8)" ( (binary_expression "(int)poVar31 < 8" (cast_expression "(int)poVar31" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);\n            lVar33 = CONCAT44(extraout_EDX_12,99);\n            goto LAB_00011e81;\n          }" { (expression_statement "pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29);" (call_expression "pr2serr("Download microcode status dpage too short\n",poVar38,op,poVar29)" identifier (argument_list "("Download microcode status dpage too short\n",poVar38,op,poVar29)" ( (string_literal ""Download microcode status dpage too short\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "lVar33 = CONCAT44(extraout_EDX_12,99);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_12,99)" identifier = (call_expression "CONCAT44(extraout_EDX_12,99)" identifier (argument_list "(extraout_EDX_12,99)" ( identifier , number_literal )))) ;) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;) })) }))) (if_statement "if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }" if (parenthesized_expression "((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0))))" ( (binary_expression "(2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))" (parenthesized_expression "(2 < local_1b0.verbose)" ( (binary_expression "2 < local_1b0.verbose" number_literal < (field_expression "local_1b0.verbose" identifier . field_identifier)) )) || (parenthesized_expression "((local_1b0.dry_run != false && (local_1b0.verbose != 0)))" ( (parenthesized_expression "(local_1b0.dry_run != false && (local_1b0.verbose != 0))" ( (binary_expression "local_1b0.dry_run != false && (local_1b0.verbose != 0)" (binary_expression "local_1b0.dry_run != false" (field_expression "local_1b0.dry_run" identifier . field_identifier) != false) && (parenthesized_expression "(local_1b0.verbose != 0)" ( (binary_expression "local_1b0.verbose != 0" (field_expression "local_1b0.verbose" identifier . field_identifier) != number_literal) ))) )) ))) )) (compound_statement "{\n          uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);\n          poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);\n          op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          poVar38 = poVar31;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);\n          op_00 = extraout_ECX_08;\n          uVar28 = extraout_EDX_10;\n        }" { (expression_statement "uVar28 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar28 = *(uint *)((int)&local_1e0->st_dev + 4)" identifier = (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" * (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 4)" ( (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18);" (assignment_expression "poVar29 = (opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18)" identifier = (cast_expression "(opts_t *)\n                    (uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18)" ( (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                    uVar28 << 0x18" (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8" (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8" (binary_expression "uVar28 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar28 & 0xff0000) >> 8" (parenthesized_expression "(uVar28 & 0xff0000)" ( (binary_expression "uVar28 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar28 & 0xff00) << 8" (parenthesized_expression "(uVar28 & 0xff00)" ( (binary_expression "uVar28 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar28 << 0x18" identifier << number_literal)) )))) ;) (expression_statement "op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1);" (assignment_expression "op = (opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" identifier = (binary_expression "(opts_t *)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" (cast_expression "(opts_t *)(uint)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)((int)&local_1e0->st_dev + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 1)" ( (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "poVar38 = poVar31;" (assignment_expression "poVar38 = poVar31" identifier = identifier) ;) (expression_statement "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29);" (call_expression "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29)" identifier (argument_list "("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,op,poVar29)" ( (string_literal ""rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "op_00 = extraout_ECX_08;" (assignment_expression "op_00 = extraout_ECX_08" identifier = identifier) ;) (expression_statement "uVar28 = extraout_EDX_10;" (assignment_expression "uVar28 = extraout_EDX_10" identifier = identifier) ;) })) (expression_statement "uVar12 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar12 = *(uint *)((int)&local_1e0->st_dev + 4)" identifier = (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" * (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 4)" ( (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18\n        ;" (assignment_expression "uVar12 = uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18" identifier = (binary_expression "uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8 | uVar12 << 0x18" (binary_expression "uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8 | (uVar12 & 0xff00) << 8" (binary_expression "uVar12 >> 0x18 | (uVar12 & 0xff0000) >> 8" (binary_expression "uVar12 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar12 & 0xff0000) >> 8" (parenthesized_expression "(uVar12 & 0xff0000)" ( (binary_expression "uVar12 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar12 & 0xff00) << 8" (parenthesized_expression "(uVar12 & 0xff00)" ( (binary_expression "uVar12 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar12 << 0x18" identifier << number_literal))) ;) (if_statement "if ((opts_t *)local_1b0.mc_mode == (opts_t *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }\n        else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }" if (parenthesized_expression "((opts_t *)local_1b0.mc_mode == (opts_t *)0x0)" ( (binary_expression "(opts_t *)local_1b0.mc_mode == (opts_t *)0x0" (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier)) == (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          puts("Download microcode status diagnostic page:");\n          uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);\n          piVar14 = &poVar31[-1].mc_tlen;\n          uVar13 = extraout_ECX_10;\n          if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);\n          __printf_chk(1,"  generation code: 0x%x\n",uVar12);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);\n          for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }\n        }" { (expression_statement "puts("Download microcode status diagnostic page:");" (call_expression "puts("Download microcode status diagnostic page:")" identifier (argument_list "("Download microcode status diagnostic page:")" ( (string_literal ""Download microcode status diagnostic page:"" " string_content ") ))) ;) (expression_statement "uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1);" (assignment_expression "uVar1 = *(uint8_t *)((int)&local_1e0->st_dev + 1)" identifier = (pointer_expression "*(uint8_t *)((int)&local_1e0->st_dev + 1)" * (cast_expression "(uint8_t *)((int)&local_1e0->st_dev + 1)" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 1)" ( (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "piVar14 = &poVar31[-1].mc_tlen;" (assignment_expression "piVar14 = &poVar31[-1].mc_tlen" identifier = (pointer_expression "&poVar31[-1].mc_tlen" & (field_expression "poVar31[-1].mc_tlen" (subscript_expression "poVar31[-1]" identifier [ number_literal ]) . field_identifier))) ;) (expression_statement "uVar13 = extraout_ECX_10;" (assignment_expression "uVar13 = extraout_ECX_10" identifier = identifier) ;) (if_statement "if (((uint)piVar14 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }" if (parenthesized_expression "(((uint)piVar14 & 0xf) != 0)" ( (binary_expression "((uint)piVar14 & 0xf) != 0" (parenthesized_expression "((uint)piVar14 & 0xf)" ( (binary_expression "(uint)piVar14 & 0xf" (cast_expression "(uint)piVar14" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);\n            uVar13 = extraout_ECX_13;\n          }" { (expression_statement "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14);" (call_expression "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14)" identifier (argument_list "("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)piVar14 >> 4,piVar14,piVar14)" ( (string_literal ""Found %d Download microcode status descriptors, but there is residual\n"" " string_content escape_sequence ") , (binary_expression "(int)piVar14 >> 4" (cast_expression "(int)piVar14" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) , identifier , identifier ))) ;) (expression_statement "uVar13 = extraout_ECX_13;" (assignment_expression "uVar13 = extraout_ECX_13" identifier = identifier) ;) })) (expression_statement "__printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);" (call_expression "__printf_chk(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13)" identifier (argument_list "(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13)" ( number_literal , (string_literal ""  number of secondary subenclosures: %d\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "__printf_chk(1,"  generation code: 0x%x\n",uVar12);" (call_expression "__printf_chk(1,"  generation code: 0x%x\n",uVar12)" identifier (argument_list "(1,"  generation code: 0x%x\n",uVar12)" ( number_literal , (string_literal ""  generation code: 0x%x\n"" " string_content escape_sequence ") , identifier ))) ;) (expression_statement "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2);" (assignment_expression "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2)" identifier = (cast_expression "(stat64 *)(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&local_1e0->st_dev + ((int)piVar14 >> 4) * 2)" ( (binary_expression "&local_1e0->st_dev + ((int)piVar14 >> 4) * 2" (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier)) + (binary_expression "((int)piVar14 >> 4) * 2" (parenthesized_expression "((int)piVar14 >> 4)" ( (binary_expression "(int)piVar14 >> 4" (cast_expression "(int)piVar14" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) * number_literal)) )))) ;) (for_statement "for (psVar30 = local_1e0; lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30;\n              psVar30 = (stat64 *)&psVar30->st_mode) {\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }" for ( (assignment_expression "psVar30 = local_1e0" identifier = identifier) ; (comma_expression "lVar33 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30" (assignment_expression "lVar33 = ZEXT48(local_1e0) << 0x20" identifier = (binary_expression "ZEXT48(local_1e0) << 0x20" (call_expression "ZEXT48(local_1e0)" identifier (argument_list "(local_1e0)" ( identifier ))) << number_literal)) , (comma_expression "local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar30" (assignment_expression "local_1e0 = (stat64 *)" [primary]"" identifier = (cast_expression "(stat64 *)" [primary]"" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "" [primary]"" " string_content "))) , (binary_expression "local_1d4 != psVar30" identifier != identifier))) ; (assignment_expression "psVar30 = (stat64 *)&psVar30->st_mode" identifier = (cast_expression "(stat64 *)&psVar30->st_mode" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar30->st_mode" & (field_expression "psVar30->st_mode" identifier -> field_identifier)))) ) (compound_statement "{\n            cVar7 = *(char *)((int)&psVar30->__pad1 + 1);\n            pcVar15 = "";\n            if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);\n            uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);\n            for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));\n            uVar13 = extraout_EDX_15;\nLAB_0001225d:\n            uVar28 = psVar30->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));\n            uVar28 = psVar30->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);\n            local_1e0 = extraout_EDX_16;\n          }" { (expression_statement "cVar7 = *(char *)((int)&psVar30->__pad1 + 1);" (assignment_expression "cVar7 = *(char *)((int)&psVar30->__pad1 + 1)" identifier = (pointer_expression "*(char *)((int)&psVar30->__pad1 + 1)" * (cast_expression "(char *)((int)&psVar30->__pad1 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar30->__pad1 + 1)" ( (binary_expression "(int)&psVar30->__pad1 + 1" (cast_expression "(int)&psVar30->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar30->__pad1" & (field_expression "psVar30->__pad1" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "pcVar15 = "";" (assignment_expression "pcVar15 = """ identifier = (string_literal """" " ")) ;) (if_statement "if (cVar7 == '\0') {\n              pcVar15 = " [primary]";\n            }" if (parenthesized_expression "(cVar7 == '\0')" ( (binary_expression "cVar7 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              pcVar15 = " [primary]";\n            }" { (expression_statement "pcVar15 = " [primary]";" (assignment_expression "pcVar15 = " [primary]"" identifier = (string_literal "" [primary]"" " string_content ")) ;) })) (expression_statement "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15);" (call_expression "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15)" identifier (argument_list "(1,"   subenclosure identifier: %d%s\n",cVar7,pcVar15)" ( number_literal , (string_literal ""   subenclosure identifier: %d%s\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2);" (assignment_expression "uVar28 = (uint)*(byte *)((int)&psVar30->__pad1 + 2)" identifier = (binary_expression "(uint)*(byte *)((int)&psVar30->__pad1 + 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)((int)&psVar30->__pad1 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar30->__pad1 + 2)" ( (binary_expression "(int)&psVar30->__pad1 + 2" (cast_expression "(int)&psVar30->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar30->__pad1" & (field_expression "psVar30->__pad1" identifier -> field_identifier))) + number_literal) ))))) ;) (for_statement "for (pdVar16 = mc_status_arr; pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0;\n                pdVar16 = pdVar16 + 1) {\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" for ( (assignment_expression "pdVar16 = mc_status_arr" identifier = identifier) ; (comma_expression "pcVar15 = pdVar16->desc, pcVar15 != (char *)0x0" (assignment_expression "pcVar15 = pdVar16->desc" identifier = (field_expression "pdVar16->desc" identifier -> field_identifier)) , (binary_expression "pcVar15 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ; (assignment_expression "pdVar16 = pdVar16 + 1" identifier = (binary_expression "pdVar16 + 1" identifier + number_literal)) ) (compound_statement "{\n              if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" { (if_statement "if (uVar28 == pdVar16->page_code) {\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" if (parenthesized_expression "(uVar28 == pdVar16->page_code)" ( (binary_expression "uVar28 == pdVar16->page_code" identifier == (field_expression "pdVar16->page_code" identifier -> field_identifier)) )) (compound_statement "{\n                if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" { (if_statement "if (*pcVar15 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }" if (parenthesized_expression "(*pcVar15 != '\0')" ( (binary_expression "*pcVar15 != '\0'" (pointer_expression "*pcVar15" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));\n                  uVar13 = extraout_EDX_17;\n                  goto LAB_0001225d;\n                }" { (expression_statement "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28);" (call_expression "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28)" identifier (argument_list "(1,"     download microcode status: %s [0x%x]\n",pcVar15,uVar28)" ( number_literal , (string_literal ""     download microcode status: %s [0x%x]\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3))" identifier (argument_list "(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar30->__pad1 + 3))" ( number_literal , (string_literal ""     download microcode additional status: 0x%x\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined1 *)((int)&psVar30->__pad1 + 3)" * (cast_expression "(undefined1 *)((int)&psVar30->__pad1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar30->__pad1 + 3)" ( (binary_expression "(int)&psVar30->__pad1 + 3" (cast_expression "(int)&psVar30->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar30->__pad1" & (field_expression "psVar30->__pad1" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar13 = extraout_EDX_17;" (assignment_expression "uVar13 = extraout_EDX_17" identifier = identifier) ;) (goto_statement "goto LAB_0001225d;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) })) (expression_statement "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3))" identifier (argument_list "(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar28\n                         ,*(undefined1 *)((int)&psVar30->__pad1 + 3))" ( number_literal , (string_literal ""     download microcode status: 0x%x [additional status: 0x%x]\n"" " string_content escape_sequence ") , identifier , (pointer_expression "*(undefined1 *)((int)&psVar30->__pad1 + 3)" * (cast_expression "(undefined1 *)((int)&psVar30->__pad1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar30->__pad1 + 3)" ( (binary_expression "(int)&psVar30->__pad1 + 3" (cast_expression "(int)&psVar30->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar30->__pad1" & (field_expression "psVar30->__pad1" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar13 = extraout_EDX_15;" (assignment_expression "uVar13 = extraout_EDX_15" identifier = identifier) ;) (labeled_statement "LAB_0001225d:\n            uVar28 = psVar30->__st_ino;" statement_identifier : (expression_statement "uVar28 = psVar30->__st_ino;" (assignment_expression "uVar28 = psVar30->__st_ino" identifier = (field_expression "psVar30->__st_ino" identifier -> field_identifier)) ;)) (expression_statement "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13);" (call_expression "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13)" identifier (argument_list "(1,"     download microcode maximum size: %u bytes\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18,uVar13)" ( number_literal , (string_literal ""     download microcode maximum size: %u bytes\n"" " string_content escape_sequence ") , (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18" (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8" (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8" (binary_expression "uVar28 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar28 & 0xff0000) >> 8" (parenthesized_expression "(uVar28 & 0xff0000)" ( (binary_expression "uVar28 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar28 & 0xff00) << 8" (parenthesized_expression "(uVar28 & 0xff00)" ( (binary_expression "uVar28 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar28 << 0x18" identifier << number_literal)) , identifier ))) ;) (expression_statement "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3));" (call_expression "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3))" identifier (argument_list "(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar30->st_mode + 3))" ( number_literal , (string_literal ""     download microcode expected buffer id: 0x%x\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined1 *)((int)&psVar30->st_mode + 3)" * (cast_expression "(undefined1 *)((int)&psVar30->st_mode + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar30->st_mode + 3)" ( (binary_expression "(int)&psVar30->st_mode + 3" (cast_expression "(int)&psVar30->st_mode" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar30->st_mode" & (field_expression "psVar30->st_mode" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar28 = psVar30->st_nlink;" (assignment_expression "uVar28 = psVar30->st_nlink" identifier = (field_expression "psVar30->st_nlink" identifier -> field_identifier)) ;) (expression_statement "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18);" (call_expression "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18)" identifier (argument_list "(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18)" ( number_literal , (string_literal ""     download microcode expected buffer id offset: %u\n"" " string_content escape_sequence ") , (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8 |\n                         uVar28 << 0x18" (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8 | (uVar28 & 0xff00) << 8" (binary_expression "uVar28 >> 0x18 | (uVar28 & 0xff0000) >> 8" (binary_expression "uVar28 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar28 & 0xff0000) >> 8" (parenthesized_expression "(uVar28 & 0xff0000)" ( (binary_expression "uVar28 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar28 & 0xff00) << 8" (parenthesized_expression "(uVar28 & 0xff00)" ( (binary_expression "uVar28 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar28 << 0x18" identifier << number_literal)) ))) ;) (expression_statement "local_1e0 = extraout_EDX_16;" (assignment_expression "local_1e0 = extraout_EDX_16" identifier = identifier) ;) })) }) (else_clause "else {\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }" else (compound_statement "{\n          last = SUB41(&local_1b0,0);\n          poVar22 = (opts_t *)local_1b0.mc_mode;\n          if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }\n          iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);\n          lVar33 = CONCAT44(extraout_EDX_11,iVar20);\n        }" { (expression_statement "last = SUB41(&local_1b0,0);" (assignment_expression "last = SUB41(&local_1b0,0)" identifier = (call_expression "SUB41(&local_1b0,0)" identifier (argument_list "(&local_1b0,0)" ( (pointer_expression "&local_1b0" & identifier) , number_literal )))) ;) (expression_statement "poVar22 = (opts_t *)local_1b0.mc_mode;" (assignment_expression "poVar22 = (opts_t *)local_1b0.mc_mode" identifier = (cast_expression "(opts_t *)local_1b0.mc_mode" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_mode" identifier . field_identifier))) ;) (if_statement "if ((byte)local_1d4 == 0) {\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }\n          else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }" if (parenthesized_expression "((byte)local_1d4 == 0)" ( (binary_expression "(byte)local_1d4 == 0" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) == number_literal) )) (compound_statement "{\nLAB_0001201a:\n            psVar30 = (stat64 *)0x0;\n            poVar38 = (opts_t *)0x0;\n            op_00 = poVar22;\n          }" { (labeled_statement "LAB_0001201a:\n            psVar30 = (stat64 *)0x0;" statement_identifier : (expression_statement "psVar30 = (stat64 *)0x0;" (assignment_expression "psVar30 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "poVar38 = (opts_t *)0x0;" (assignment_expression "poVar38 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "op_00 = poVar22;" (assignment_expression "op_00 = poVar22" identifier = identifier) ;) }) (else_clause "else {\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }" else (compound_statement "{\n            off_off = (_Bool *)0x0;\n            if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }\n            psVar30 = local_1d8;\n            poVar38 = (opts_t *)local_1b0.mc_len;\n            if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }\n          }" { (expression_statement "off_off = (_Bool *)0x0;" (assignment_expression "off_off = (_Bool *)0x0" identifier = (cast_expression "(_Bool *)0x0" ( (type_descriptor "_Bool *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (0 < local_1b0.bpw) {\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }" if (parenthesized_expression "(0 < local_1b0.bpw)" ( (binary_expression "0 < local_1b0.bpw" number_literal < (field_expression "local_1b0.bpw" identifier . field_identifier)) )) (compound_statement "{\n              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }\n              poVar22 = (opts_t *)0x0;\n              lVar33 = (ulonglong)uVar28 << 0x20;\n              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;\n              local_1b0.mc_mode = 0xf;\n              if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }\n              goto LAB_0001201a;\n            }" { (for_statement "for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }" for ( ; (binary_expression "(int)off_off < local_1b0.mc_len" (cast_expression "(int)off_off" ( (type_descriptor "int" primitive_type) ) identifier) < (field_expression "local_1b0.mc_len" identifier . field_identifier)) ; (assignment_expression "off_off = &poVar22->dry_run + (int)off_off" identifier = (binary_expression "&poVar22->dry_run + (int)off_off" (pointer_expression "&poVar22->dry_run" & (field_expression "poVar22->dry_run" identifier -> field_identifier)) + (cast_expression "(int)off_off" ( (type_descriptor "int" primitive_type) ) identifier))) ) (compound_statement "{\n                op = (opts_t *)local_1b0.bpw;\n                poVar22 = (opts_t *)local_1b0.bpw;\n                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }\n                if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }\n                poVar38 = &local_1b0;\n                poVar29 = op;\n                iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);\n                lVar33 = CONCAT44(extraout_EDX_04,iVar20);\n                if (iVar20 != 0) goto LAB_00011e81;\n                uVar28 = extraout_EDX_04;\n              }" { (expression_statement "op = (opts_t *)local_1b0.bpw;" (assignment_expression "op = (opts_t *)local_1b0.bpw" identifier = (cast_expression "(opts_t *)local_1b0.bpw" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.bpw" identifier . field_identifier))) ;) (expression_statement "poVar22 = (opts_t *)local_1b0.bpw;" (assignment_expression "poVar22 = (opts_t *)local_1b0.bpw" identifier = (cast_expression "(opts_t *)local_1b0.bpw" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.bpw" identifier . field_identifier))) ;) (if_statement "if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }" if (parenthesized_expression "(local_1b0.mc_len - (int)off_off <= local_1b0.bpw)" ( (binary_expression "local_1b0.mc_len - (int)off_off <= local_1b0.bpw" (binary_expression "local_1b0.mc_len - (int)off_off" (field_expression "local_1b0.mc_len" identifier . field_identifier) - (cast_expression "(int)off_off" ( (type_descriptor "int" primitive_type) ) identifier)) <= (field_expression "local_1b0.bpw" identifier . field_identifier)) )) (compound_statement "{\n                  local_1e9 = (byte)local_1d4;\n                  op = (opts_t *)((uint)local_1d4 & 0xff);\n                  poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);\n                }" { (expression_statement "local_1e9 = (byte)local_1d4;" (assignment_expression "local_1e9 = (byte)local_1d4" identifier = (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "op = (opts_t *)((uint)local_1d4 & 0xff);" (assignment_expression "op = (opts_t *)((uint)local_1d4 & 0xff)" identifier = (cast_expression "(opts_t *)((uint)local_1d4 & 0xff)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)local_1d4 & 0xff)" ( (binary_expression "(uint)local_1d4 & 0xff" (cast_expression "(uint)local_1d4" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off);" (assignment_expression "poVar22 = (opts_t *)(local_1b0.mc_len - (int)off_off)" identifier = (cast_expression "(opts_t *)(local_1b0.mc_len - (int)off_off)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_1b0.mc_len - (int)off_off)" ( (binary_expression "local_1b0.mc_len - (int)off_off" (field_expression "local_1b0.mc_len" identifier . field_identifier) - (cast_expression "(int)off_off" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) })) (if_statement "if (local_1b0.verbose != 0) {\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }" if (parenthesized_expression "(local_1b0.verbose != 0)" ( (binary_expression "local_1b0.verbose != 0" (field_expression "local_1b0.verbose" identifier . field_identifier) != number_literal) )) (compound_statement "{\n                  op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);\n                }" { (expression_statement "op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op);" (assignment_expression "op = (opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op)" identifier = (cast_expression "(opts_t *)\n                       pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op)" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op)" identifier (argument_list "("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",\n                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(uint)local_1e9,op,\n                               op)" ( (string_literal ""bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"" " string_content escape_sequence ") , (field_expression "local_1b0.mc_mode" identifier . field_identifier) , (field_expression "local_1b0.mc_id" identifier . field_identifier) , identifier , identifier , (cast_expression "(uint)local_1e9" ( (type_descriptor "uint" type_identifier) ) identifier) , identifier , identifier ))))) ;) })) (expression_statement "poVar38 = &local_1b0;" (assignment_expression "poVar38 = &local_1b0" identifier = (pointer_expression "&local_1b0" & identifier)) ;) (expression_statement "poVar29 = op;" (assignment_expression "poVar29 = op" identifier = identifier) ;) (expression_statement "iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op);" (assignment_expression "iVar20 = send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op)" identifier = (call_expression "send_then_receive((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op)" identifier (argument_list "((int)local_1dc,uVar12,(int)off_off,\n                                           (_Bool *)((int)&local_1d8->st_dev + (int)off_off),\n                                           (int)poVar22,&local_1bc,(uint8_t *)local_1e0,\n                                           (uint)local_1e9,last,op)" ( (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , (cast_expression "(int)off_off" ( (type_descriptor "int" primitive_type) ) identifier) , (cast_expression "(_Bool *)((int)&local_1d8->st_dev + (int)off_off)" ( (type_descriptor "_Bool *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1d8->st_dev + (int)off_off)" ( (binary_expression "(int)&local_1d8->st_dev + (int)off_off" (cast_expression "(int)&local_1d8->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1d8->st_dev" & (field_expression "local_1d8->st_dev" identifier -> field_identifier))) + (cast_expression "(int)off_off" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , (cast_expression "(int)poVar22" ( (type_descriptor "int" primitive_type) ) identifier) , (pointer_expression "&local_1bc" & identifier) , (cast_expression "(uint8_t *)local_1e0" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(uint)local_1e9" ( (type_descriptor "uint" type_identifier) ) identifier) , identifier , identifier )))) ;) (expression_statement "lVar33 = CONCAT44(extraout_EDX_04,iVar20);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_04,iVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_04,iVar20)" identifier (argument_list "(extraout_EDX_04,iVar20)" ( identifier , identifier )))) ;) (if_statement "if (iVar20 != 0) goto LAB_00011e81;" if (parenthesized_expression "(iVar20 != 0)" ( (binary_expression "iVar20 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "uVar28 = extraout_EDX_04;" (assignment_expression "uVar28 = extraout_EDX_04" identifier = identifier) ;) })) (expression_statement "poVar22 = (opts_t *)0x0;" (assignment_expression "poVar22 = (opts_t *)0x0" identifier = (cast_expression "(opts_t *)0x0" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "lVar33 = (ulonglong)uVar28 << 0x20;" (assignment_expression "lVar33 = (ulonglong)uVar28 << 0x20" identifier = (binary_expression "(ulonglong)uVar28 << 0x20" (cast_expression "(ulonglong)uVar28" ( (type_descriptor "ulonglong" type_identifier) ) identifier) << number_literal)) ;) (if_statement "if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;" if (parenthesized_expression "(local_1b0.bpw_then_activate == false)" ( (binary_expression "local_1b0.bpw_then_activate == false" (field_expression "local_1b0.bpw_then_activate" identifier . field_identifier) == false) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "local_1b0.mc_mode = 0xf;" (assignment_expression "local_1b0.mc_mode = 0xf" (field_expression "local_1b0.mc_mode" identifier . field_identifier) = number_literal) ;) (if_statement "if (local_1b0.verbose != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }" if (parenthesized_expression "(local_1b0.verbose != 0)" ( (binary_expression "local_1b0.verbose != 0" (field_expression "local_1b0.verbose" identifier . field_identifier) != number_literal) )) (compound_statement "{\n                pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);\n              }" { (expression_statement "pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29);" (call_expression "pr2serr("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29)" identifier (argument_list "("sending Activate deferred microcode [0xf]\n",poVar38,op,poVar29)" ( (string_literal ""sending Activate deferred microcode [0xf]\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) })) (goto_statement "goto LAB_0001201a;" goto statement_identifier ;) })) (expression_statement "psVar30 = local_1d8;" (assignment_expression "psVar30 = local_1d8" identifier = identifier) ;) (expression_statement "poVar38 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar38 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (if_statement "if (local_1b0.verbose != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }" if (parenthesized_expression "(local_1b0.verbose != 0)" ( (binary_expression "local_1b0.verbose != 0" (field_expression "local_1b0.verbose" identifier . field_identifier) != number_literal) )) (compound_statement "{\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);\n              poVar38 = (opts_t *)local_1b0.mc_len;\n              op_00 = extraout_ECX_12;\n            }" { (expression_statement "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);" (call_expression "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len)" identifier (argument_list "("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,\n                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len)" ( (string_literal ""single: mode=0x%x, id=%d, offset=%d, len=%d\n"" " string_content escape_sequence ") , (field_expression "local_1b0.mc_mode" identifier . field_identifier) , (field_expression "local_1b0.mc_id" identifier . field_identifier) , (field_expression "local_1b0.mc_offset" identifier . field_identifier) , (field_expression "local_1b0.mc_len" identifier . field_identifier) ))) ;) (expression_statement "poVar38 = (opts_t *)local_1b0.mc_len;" (assignment_expression "poVar38 = (opts_t *)local_1b0.mc_len" identifier = (cast_expression "(opts_t *)local_1b0.mc_len" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_1b0.mc_len" identifier . field_identifier))) ;) (expression_statement "op_00 = extraout_ECX_12;" (assignment_expression "op_00 = extraout_ECX_12" identifier = identifier) ;) })) }))) (expression_statement "iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00);" (assignment_expression "iVar20 = send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00)" identifier = (call_expression "send_then_receive((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00)" identifier (argument_list "((int)local_1dc,uVar12,0,(uint8_t *)psVar30,(int)poVar38,\n                                     &local_1bc,(uint8_t *)local_1e0,1,last,op_00)" ( (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , number_literal , (cast_expression "(uint8_t *)psVar30" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(int)poVar38" ( (type_descriptor "int" primitive_type) ) identifier) , (pointer_expression "&local_1bc" & identifier) , (cast_expression "(uint8_t *)local_1e0" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , number_literal , identifier , identifier )))) ;) (expression_statement "lVar33 = CONCAT44(extraout_EDX_11,iVar20);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_11,iVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_11,iVar20)" identifier (argument_list "(extraout_EDX_11,iVar20)" ( identifier , identifier )))) ;) }))) }))) }) (else_clause "else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }" else (compound_statement "{\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);\n      lVar33 = (ulonglong)extraout_EDX_13 << 0x20;\n    }" { (expression_statement "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38);" (call_expression "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38)" identifier (argument_list "("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar36,poVar38)" ( (string_literal ""Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "lVar33 = (ulonglong)extraout_EDX_13 << 0x20;" (assignment_expression "lVar33 = (ulonglong)extraout_EDX_13 << 0x20" identifier = (binary_expression "(ulonglong)extraout_EDX_13 << 0x20" (cast_expression "(ulonglong)extraout_EDX_13" ( (type_descriptor "ulonglong" type_identifier) ) identifier) << number_literal)) ;) }))) (labeled_statement "LAB_00011e81:\n    uVar24 = (undefined4)lVar33;" statement_identifier : (expression_statement "uVar24 = (undefined4)lVar33;" (assignment_expression "uVar24 = (undefined4)lVar33" identifier = (cast_expression "(undefined4)lVar33" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;)) (if_statement "if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }" if (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" ( (binary_expression "local_1d8 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_000118d4:\n      free(local_1d8);\n      lVar33 = CONCAT44(extraout_EDX_00,uVar24);\n    }" { (labeled_statement "LAB_000118d4:\n      free(local_1d8);" statement_identifier : (expression_statement "free(local_1d8);" (call_expression "free(local_1d8)" identifier (argument_list "(local_1d8)" ( identifier ))) ;)) (expression_statement "lVar33 = CONCAT44(extraout_EDX_00,uVar24);" (assignment_expression "lVar33 = CONCAT44(extraout_EDX_00,uVar24)" identifier = (call_expression "CONCAT44(extraout_EDX_00,uVar24)" identifier (argument_list "(extraout_EDX_00,uVar24)" ( identifier , identifier )))) ;) })) (labeled_statement "LAB_000118e5:\n    uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);" statement_identifier : (expression_statement "uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20);" (assignment_expression "uVar13 = (undefined4)((ulonglong)lVar33 >> 0x20)" identifier = (call_expression "(undefined4)((ulonglong)lVar33 >> 0x20)" (parenthesized_expression "(undefined4)" ( identifier )) (argument_list "((ulonglong)lVar33 >> 0x20)" ( (binary_expression "(ulonglong)lVar33 >> 0x20" (cast_expression "(ulonglong)lVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "iVar20 = (int)lVar33;" (assignment_expression "iVar20 = (int)lVar33" identifier = (cast_expression "(int)lVar33" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (local_1bc.free_doutp != (uint8_t *)0x0) {\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }" if (parenthesized_expression "(local_1bc.free_doutp != (uint8_t *)0x0)" ( (binary_expression "local_1bc.free_doutp != (uint8_t *)0x0" (field_expression "local_1bc.free_doutp" identifier . field_identifier) != (cast_expression "(uint8_t *)0x0" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(local_1bc.free_doutp);\n      uVar13 = extraout_EDX_01;\n    }" { (expression_statement "free(local_1bc.free_doutp);" (call_expression "free(local_1bc.free_doutp)" identifier (argument_list "(local_1bc.free_doutp)" ( (field_expression "local_1bc.free_doutp" identifier . field_identifier) ))) ;) (expression_statement "uVar13 = extraout_EDX_01;" (assignment_expression "uVar13 = extraout_EDX_01" identifier = identifier) ;) })) (if_statement "if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }" if (parenthesized_expression "(local_1c0 != (void *)0x0)" ( (binary_expression "local_1c0 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(local_1c0);\n      uVar13 = extraout_EDX_02;\n    }" { (expression_statement "free(local_1c0);" (call_expression "free(local_1c0)" identifier (argument_list "(local_1c0)" ( identifier ))) ;) (expression_statement "uVar13 = extraout_EDX_02;" (assignment_expression "uVar13 = extraout_EDX_02" identifier = identifier) ;) })) (expression_statement "uVar36 = CONCAT44(uVar13,iVar20);" (assignment_expression "uVar36 = CONCAT44(uVar13,iVar20)" identifier = (call_expression "CONCAT44(uVar13,iVar20)" identifier (argument_list "(uVar13,iVar20)" ( identifier , identifier )))) ;) (if_statement "if (-1 < (int)local_1dc) {\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }" if (parenthesized_expression "(-1 < (int)local_1dc)" ( (binary_expression "-1 < (int)local_1dc" number_literal < (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      uVar34 = sg_cmds_close_device(local_1dc);\n      uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);\n      if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }\n    }" { (expression_statement "uVar34 = sg_cmds_close_device(local_1dc);" (assignment_expression "uVar34 = sg_cmds_close_device(local_1dc)" identifier = (call_expression "sg_cmds_close_device(local_1dc)" identifier (argument_list "(local_1dc)" ( identifier )))) ;) (expression_statement "uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20);" (assignment_expression "uVar36 = CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20)" identifier = (call_expression "CONCAT44((int)((ulonglong)uVar34 >> 0x20),iVar20)" identifier (argument_list "((int)((ulonglong)uVar34 >> 0x20),iVar20)" ( (cast_expression "(int)((ulonglong)uVar34 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar34 >> 0x20)" ( (binary_expression "(ulonglong)uVar34 >> 0x20" (cast_expression "(ulonglong)uVar34" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , identifier )))) ;) (if_statement "if ((int)uVar34 < 0) {\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }" if (parenthesized_expression "((int)uVar34 < 0)" ( (binary_expression "(int)uVar34 < 0" (cast_expression "(int)uVar34" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        iVar18 = -(int)uVar34;\n        uVar13 = safe_strerror(iVar18);\n        pr2serr("close error: %s\n",uVar13);\n        uVar36 = CONCAT44(extraout_EDX_05,iVar20);\n        if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }\n      }" { (expression_statement "iVar18 = -(int)uVar34;" (assignment_expression "iVar18 = -(int)uVar34" identifier = (unary_expression "-(int)uVar34" - (cast_expression "(int)uVar34" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar13 = safe_strerror(iVar18);" (assignment_expression "uVar13 = safe_strerror(iVar18)" identifier = (call_expression "safe_strerror(iVar18)" identifier (argument_list "(iVar18)" ( identifier )))) ;) (expression_statement "pr2serr("close error: %s\n",uVar13);" (call_expression "pr2serr("close error: %s\n",uVar13)" identifier (argument_list "("close error: %s\n",uVar13)" ( (string_literal ""close error: %s\n"" " string_content escape_sequence ") , identifier ))) ;) (expression_statement "uVar36 = CONCAT44(extraout_EDX_05,iVar20);" (assignment_expression "uVar36 = CONCAT44(extraout_EDX_05,iVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_05,iVar20)" identifier (argument_list "(extraout_EDX_05,iVar20)" ( identifier , identifier )))) ;) (if_statement "if (iVar20 == 0) {\n          uVar36 = sg_convert_errno(iVar18);\n        }" if (parenthesized_expression "(iVar20 == 0)" ( (binary_expression "iVar20 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar36 = sg_convert_errno(iVar18);\n        }" { (expression_statement "uVar36 = sg_convert_errno(iVar18);" (assignment_expression "uVar36 = sg_convert_errno(iVar18)" identifier = (call_expression "sg_convert_errno(iVar18)" identifier (argument_list "(iVar18)" ( identifier )))) ;) })) })) })) (expression_statement "poVar22 = (opts_t *)uVar36;" (assignment_expression "poVar22 = (opts_t *)uVar36" identifier = (cast_expression "(opts_t *)uVar36" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if ((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" if (parenthesized_expression "((local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0'))" ( (binary_expression "(local_1b0.verbose == 0) &&\n       (cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')" (parenthesized_expression "(local_1b0.verbose == 0)" ( (binary_expression "local_1b0.verbose == 0" (field_expression "local_1b0.verbose" identifier . field_identifier) == number_literal) )) && (parenthesized_expression "(cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0')" ( (comma_expression "cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                ), cVar7 == '\0'" (assignment_expression "cVar7 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                )" identifier = (call_expression "sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                )" identifier (argument_list "("sg_ses_mocrocode failed: ",uVar36,(int)((ulonglong)uVar36 >> 0x20)\n                                )" ( (string_literal ""sg_ses_mocrocode failed: "" " string_content ") , identifier , (cast_expression "(int)((ulonglong)uVar36 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar36 >> 0x20)" ( (binary_expression "(ulonglong)uVar36 >> 0x20" (cast_expression "(ulonglong)uVar36" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) )))) , (binary_expression "cVar7 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" { (expression_statement "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");" (call_expression "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" identifier (argument_list "("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" ( (string_literal ""Some error occurred, try again with \'-v\' or \'-vv\' for more information\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) })) (if_statement "if ((int)poVar22 < 0) {\n      poVar22 = (opts_t *)0x63;\n    }" if (parenthesized_expression "((int)poVar22 < 0)" ( (binary_expression "(int)poVar22 < 0" (cast_expression "(int)poVar22" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      poVar22 = (opts_t *)0x63;\n    }" { (expression_statement "poVar22 = (opts_t *)0x63;" (assignment_expression "poVar22 = (opts_t *)0x63" identifier = (cast_expression "(opts_t *)0x63" ( (type_descriptor "opts_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "void ** FUN_00011260(int param_1,stat64 *param_2)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}\n\n" (function_definition "void ** FUN_00011260(int param_1,stat64 *param_2)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}" primitive_type (pointer_declarator "** FUN_00011260(int param_1,stat64 *param_2)" * (pointer_declarator "* FUN_00011260(int param_1,stat64 *param_2)" * (function_declarator "FUN_00011260(int param_1,stat64 *param_2)" identifier (parameter_list "(int param_1,stat64 *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "stat64 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))))) (compound_statement "{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "void **ppvVar6;" primitive_type (pointer_declarator "**ppvVar6" * (pointer_declarator "*ppvVar6" * identifier)) ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "void **ppvVar8;" primitive_type (pointer_declarator "**ppvVar8" * (pointer_declarator "*ppvVar8" * identifier)) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "void **ppvVar12;" primitive_type (pointer_declarator "**ppvVar12" * (pointer_declarator "*ppvVar12" * identifier)) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "stat64 *extraout_ECX;" type_identifier (pointer_declarator "*extraout_ECX" * identifier) ;) (declaration "undefined4 extraout_ECX_00;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_01;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_02;" type_identifier identifier ;) (declaration "void **extraout_ECX_03;" primitive_type (pointer_declarator "**extraout_ECX_03" * (pointer_declarator "*extraout_ECX_03" * identifier)) ;) (declaration "stat64 *extraout_ECX_04;" type_identifier (pointer_declarator "*extraout_ECX_04" * identifier) ;) (declaration "stat64 *psVar14;" type_identifier (pointer_declarator "*psVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "undefined *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "undefined *extraout_ECX_05;" type_identifier (pointer_declarator "*extraout_ECX_05" * identifier) ;) (declaration "undefined *extraout_ECX_06;" type_identifier (pointer_declarator "*extraout_ECX_06" * identifier) ;) (declaration "undefined *extraout_ECX_07;" type_identifier (pointer_declarator "*extraout_ECX_07" * identifier) ;) (declaration "undefined *extraout_ECX_08;" type_identifier (pointer_declarator "*extraout_ECX_08" * identifier) ;) (declaration "void **extraout_ECX_09;" primitive_type (pointer_declarator "**extraout_ECX_09" * (pointer_declarator "*extraout_ECX_09" * identifier)) ;) (declaration "undefined4 extraout_ECX_10;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX_11;" type_identifier identifier ;) (declaration "undefined *extraout_ECX_12;" type_identifier (pointer_declarator "*extraout_ECX_12" * identifier) ;) (declaration "undefined4 extraout_ECX_13;" type_identifier identifier ;) (declaration "byte bVar17;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_00;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_01;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_02;" type_identifier identifier ;) (declaration "stat64 *extraout_EDX_03;" type_identifier (pointer_declarator "*extraout_EDX_03" * identifier) ;) (declaration "undefined4 extraout_EDX_04;" type_identifier identifier ;) (declaration "uint extraout_EDX_05;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_06;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_07;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_08;" type_identifier identifier ;) (declaration "uint extraout_EDX_09;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_10;" type_identifier identifier ;) (declaration "uint extraout_EDX_11;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_12;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_13;" type_identifier identifier ;) (declaration "stat64 *extraout_EDX_14;" type_identifier (pointer_declarator "*extraout_EDX_14" * identifier) ;) (declaration "undefined4 extraout_EDX_15;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_16;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_17;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_18;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX_19;" type_identifier identifier ;) (declaration "void **ppvVar18;" primitive_type (pointer_declarator "**ppvVar18" * (pointer_declarator "*ppvVar18" * identifier)) ;) (declaration "undefined **ppuVar19;" type_identifier (pointer_declarator "**ppuVar19" * (pointer_declarator "*ppuVar19" * identifier)) ;) (declaration "undefined4 uVar20;" type_identifier identifier ;) (declaration "undefined4 *puVar21;" type_identifier (pointer_declarator "*puVar21" * identifier) ;) (declaration "void **ppvVar22;" primitive_type (pointer_declarator "**ppvVar22" * (pointer_declarator "*ppvVar22" * identifier)) ;) (declaration "undefined4 uVar23;" type_identifier identifier ;) (declaration "undefined *puVar24;" type_identifier (pointer_declarator "*puVar24" * identifier) ;) (declaration "uint uVar25;" type_identifier identifier ;) (declaration "char *pcVar26;" primitive_type (pointer_declarator "*pcVar26" * identifier) ;) (declaration "void **ppvVar27;" primitive_type (pointer_declarator "**ppvVar27" * (pointer_declarator "*ppvVar27" * identifier)) ;) (declaration "void **ppvVar28;" primitive_type (pointer_declarator "**ppvVar28" * (pointer_declarator "*ppvVar28" * identifier)) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "byte bVar29;" type_identifier identifier ;) (declaration "longlong lVar30;" type_identifier identifier ;) (declaration "undefined8 uVar31;" type_identifier identifier ;) (declaration "__off64_t _Var32;" type_identifier identifier ;) (declaration "undefined8 uVar33;" type_identifier identifier ;) (declaration "uint uVar34;" type_identifier identifier ;) (declaration "undefined4 uVar35;" type_identifier identifier ;) (declaration "void **ppvVar36;" primitive_type (pointer_declarator "**ppvVar36" * (pointer_declarator "*ppvVar36" * identifier)) ;) (declaration "stat64 *psVar37;" type_identifier (pointer_declarator "*psVar37" * identifier) ;) (declaration "stat64 *psVar38;" type_identifier (pointer_declarator "*psVar38" * identifier) ;) (declaration "char *local_1f0;" primitive_type (pointer_declarator "*local_1f0" * identifier) ;) (declaration "char local_1e9;" primitive_type identifier ;) (declaration "int local_1e8;" primitive_type identifier ;) (declaration "stat64 *local_1e0;" type_identifier (pointer_declarator "*local_1e0" * identifier) ;) (declaration "undefined **local_1dc;" type_identifier (pointer_declarator "**local_1dc" * (pointer_declarator "*local_1dc" * identifier)) ;) (declaration "stat64 *local_1d8;" type_identifier (pointer_declarator "*local_1d8" * identifier) ;) (declaration "stat64 *local_1d4;" type_identifier (pointer_declarator "*local_1d4" * identifier) ;) (declaration "int local_1c4;" primitive_type identifier ;) (declaration "void *local_1c0;" primitive_type (pointer_declarator "*local_1c0" * identifier) ;) (declaration "undefined4 local_1bc;" type_identifier identifier ;) (declaration "void *local_1b8;" primitive_type (pointer_declarator "*local_1b8" * identifier) ;) (declaration "undefined4 local_1b4;" type_identifier identifier ;) (declaration "undefined4 local_1b0;" type_identifier identifier ;) (declaration "char local_1ac;" primitive_type identifier ;) (declaration "void **local_1a8;" primitive_type (pointer_declarator "**local_1a8" * (pointer_declarator "*local_1a8" * identifier)) ;) (declaration "uint local_1a4;" type_identifier identifier ;) (declaration "void **local_1a0;" primitive_type (pointer_declarator "**local_1a0" * (pointer_declarator "*local_1a0" * identifier)) ;) (declaration "undefined *local_19c;" type_identifier (pointer_declarator "*local_19c" * identifier) ;) (declaration "uint local_198;" type_identifier identifier ;) (declaration "uint local_194;" type_identifier identifier ;) (declaration "uint uStack_190;" type_identifier identifier ;) (declaration "void **local_18c;" primitive_type (pointer_declarator "**local_18c" * (pointer_declarator "*local_18c" * identifier)) ;) (declaration "int local_188;" primitive_type identifier ;) (declaration "stat64 local_184;" type_identifier identifier ;) (declaration "stat64 local_124 [2];" type_identifier (array_declarator "local_124 [2]" identifier [ number_literal ]) ;) (declaration "uint local_24;" type_identifier identifier ;) (declaration "undefined4 *local_18;" type_identifier (pointer_declarator "*local_18" * identifier) ;) (expression_statement "psVar14 = param_2;" (assignment_expression "psVar14 = param_2" identifier = identifier) ;) (expression_statement "iVar15 = param_1;" (assignment_expression "iVar15 = param_1" identifier = identifier) ;) (expression_statement "puVar16 = PTR_optarg_00015ffc;" (assignment_expression "puVar16 = PTR_optarg_00015ffc" identifier = identifier) ;) (expression_statement "bVar29 = 0;" (assignment_expression "bVar29 = 0" identifier = number_literal) ;) (expression_statement "local_18 = &param_1;" (assignment_expression "local_18 = &param_1" identifier = (pointer_expression "&param_1" & identifier)) ;) (expression_statement "local_1d4 = param_2;" (assignment_expression "local_1d4 = param_2" identifier = identifier) ;) (expression_statement "local_24 = *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_24 = *(uint *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" * (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "local_1c0 = (void *)0x0;" (assignment_expression "local_1c0 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1bc = 0;" (assignment_expression "local_1bc = 0" identifier = number_literal) ;) (expression_statement "local_1b8 = (void *)0x0;" (assignment_expression "local_1b8 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_1b4 = 0;" (assignment_expression "local_1b4 = 0" identifier = number_literal) ;) (expression_statement "local_1f0 = (char *)0x0;" (assignment_expression "local_1f0 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppvVar18 = (void **)&local_1b0;" (assignment_expression "ppvVar18 = (void **)&local_1b0" identifier = (cast_expression "(void **)&local_1b0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&local_1b0" & identifier))) ;) (for_statement "for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }" for ( (assignment_expression "iVar13 = 0xb" identifier = number_literal) ; (binary_expression "iVar13 != 0" identifier != number_literal) ; (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ) (compound_statement "{\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }" { (expression_statement "*ppvVar18 = (void *)0x0;" (assignment_expression "*ppvVar18 = (void *)0x0" (pointer_expression "*ppvVar18" * identifier) = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppvVar18 = ppvVar18 + 1;" (assignment_expression "ppvVar18 = ppvVar18 + 1" identifier = (binary_expression "ppvVar18 + 1" identifier + number_literal)) ;) })) (expression_statement "psVar37 = &local_184;" (assignment_expression "psVar37 = &local_184" identifier = (pointer_expression "&local_184" & identifier)) ;) (expression_statement "local_1e8 = 0;" (assignment_expression "local_1e8 = 0" identifier = number_literal) ;) (expression_statement "local_1dc = &PTR_DAT_00016160;" (assignment_expression "local_1dc = &PTR_DAT_00016160" identifier = (pointer_expression "&PTR_DAT_00016160" & identifier)) ;) (expression_statement "pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";" (assignment_expression "pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV"" identifier = (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" " string_content ")) ;) (expression_statement "local_1e9 = '\0';" (assignment_expression "local_1e9 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (labeled_statement "code_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );" do (compound_statement "{\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  }" { (expression_statement "local_184.st_dev._0_4_ = 0;" (assignment_expression "local_184.st_dev._0_4_ = 0" (field_expression "local_184.st_dev._0_4_" (field_expression "local_184.st_dev" identifier . field_identifier) . field_identifier) = number_literal) ;) (expression_statement "iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);" (assignment_expression "iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" identifier = (call_expression "getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" identifier (argument_list "(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" ( identifier , identifier , (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" " string_content ") , (pointer_expression "&PTR_DAT_00016160" & identifier) , identifier )))) ;) (expression_statement "puVar3 = PTR_optarg_00015ffc;" (assignment_expression "puVar3 = PTR_optarg_00015ffc" identifier = identifier) ;) (expression_statement "puVar24 = PTR_optind_00015fe8;" (assignment_expression "puVar24 = PTR_optind_00015fe8" identifier = identifier) ;) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_1d8 = psVar37;" (assignment_expression "local_1d8 = psVar37" identifier = identifier) ;) (if_statement "if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }" if (parenthesized_expression "(iVar13 == -1)" ( (binary_expression "iVar13 == -1" identifier == number_literal) )) (compound_statement "{\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }" { (if_statement "if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }" if (parenthesized_expression "(local_1e8 != 0)" ( (binary_expression "local_1e8 != 0" identifier != number_literal) )) (compound_statement "{\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }" { (if_statement "if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" if (parenthesized_expression "(local_1e8 == 1)" ( (binary_expression "local_1e8 == 1" identifier == number_literal) )) (compound_statement "{\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }" { (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" identifier (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) }) (else_clause "else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" else (compound_statement "{\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" { (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" identifier (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement "pr2serr("\n");" (call_expression "pr2serr("\n")" identifier (argument_list "("\n")" ( (string_literal ""\n"" " escape_sequence ") ))) ;) (expression_statement "FUN_00012620();" (call_expression "FUN_00012620()" identifier (argument_list "()" ( ))) ;) }))) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) (expression_statement "iVar13 = *(int *)PTR_optind_00015fe8;" (assignment_expression "iVar13 = *(int *)PTR_optind_00015fe8" identifier = (pointer_expression "*(int *)PTR_optind_00015fe8" * (cast_expression "(int *)PTR_optind_00015fe8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" if (parenthesized_expression "(iVar13 < iVar15)" ( (binary_expression "iVar13 < iVar15" identifier < identifier) )) (compound_statement "{\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" { (expression_statement "local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);" (assignment_expression "local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" identifier = (pointer_expression "*(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" * (cast_expression "(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" ( (type_descriptor "stat64 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)&psVar14->st_dev + iVar13 * 4)" ( (binary_expression "(int)&psVar14->st_dev + iVar13 * 4" (cast_expression "(int)&psVar14->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->st_dev" & (field_expression "psVar14->st_dev" identifier -> field_identifier))) + (binary_expression "iVar13 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)PTR_optind_00015fe8 = iVar13;" (assignment_expression "*(int *)PTR_optind_00015fe8 = iVar13" (pointer_expression "*(int *)PTR_optind_00015fe8" * (cast_expression "(int *)PTR_optind_00015fe8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (if_statement "if (iVar15 <= iVar13) goto LAB_000116cd;" if (parenthesized_expression "(iVar15 <= iVar13)" ( (binary_expression "iVar15 <= iVar13" identifier <= identifier) )) (goto_statement "goto LAB_000116cd;" goto statement_identifier ;)) (do_statement "do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);" do (compound_statement "{\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        }" { (expression_statement "uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);" (assignment_expression "uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" identifier = (pointer_expression "*(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" * (cast_expression "(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->st_dev + iVar13 * 4)" ( (binary_expression "(int)&psVar14->st_dev + iVar13 * 4" (cast_expression "(int)&psVar14->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->st_dev" & (field_expression "psVar14->st_dev" identifier -> field_identifier))) + (binary_expression "iVar13 * 4" identifier * number_literal)) ))))) ;) (expression_statement "psVar37 = local_1e0;" (assignment_expression "psVar37 = local_1e0" identifier = identifier) ;) (expression_statement "psVar38 = local_1e0;" (assignment_expression "psVar38 = local_1e0" identifier = identifier) ;) (expression_statement "pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);" (call_expression "pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0)" identifier (argument_list "("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0)" ( (string_literal ""Unexpected extra argument: %s\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "iVar13 = *(int *)puVar24 + 1;" (assignment_expression "iVar13 = *(int *)puVar24 + 1" identifier = (binary_expression "*(int *)puVar24 + 1" (pointer_expression "*(int *)puVar24" * (cast_expression "(int *)puVar24" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal)) ;) (expression_statement "*(int *)puVar24 = iVar13;" (assignment_expression "*(int *)puVar24 = iVar13" (pointer_expression "*(int *)puVar24" * (cast_expression "(int *)puVar24" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "local_1e0 = extraout_EDX_03;" (assignment_expression "local_1e0 = extraout_EDX_03" identifier = identifier) ;) }) while (parenthesized_expression "(iVar13 < iVar15)" ( (binary_expression "iVar13 < iVar15" identifier < identifier) )) ;) (expression_statement "ppvVar18 = (void **)0x1;" (assignment_expression "ppvVar18 = (void **)0x1" identifier = (cast_expression "(void **)0x1" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);" (call_expression "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38)" identifier (argument_list "("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38)" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";" (assignment_expression "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n"" identifier = (cast_expression "(stat64 *)"Unexpected extra argument: %s\n"" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Unexpected extra argument: %s\n"" " string_content escape_sequence "))) ;) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) (expression_statement "local_1e0 = (stat64 *)0x0;" (assignment_expression "local_1e0 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "psVar14 = extraout_ECX;" (assignment_expression "psVar14 = extraout_ECX" identifier = identifier) ;) (labeled_statement "LAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;" statement_identifier : (if_statement "if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }" { (if_statement "if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }" if (parenthesized_expression "(local_1e9 != '\0')" ( (binary_expression "local_1e9 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }" { (expression_statement "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");" (call_expression "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n")" identifier (argument_list "("Not in DEBUG mode, so \'-vV\' has no special action\n")" ( (string_literal ""Not in DEBUG mode, so \'-vV\' has no special action\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement "psVar14 = extraout_ECX_04;" (assignment_expression "psVar14 = extraout_ECX_04" identifier = identifier) ;) (labeled_statement "LAB_000119bc:\n          ppvVar18 = (void **)0x0;" statement_identifier : (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;)) (expression_statement "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);" (call_expression "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14)" identifier (argument_list "("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14)" ( (string_literal ""sg_ses_microcode: version: %s\n"" " string_content escape_sequence ") , (string_literal ""1.16 20180628"" " string_content ") , identifier , identifier ))) ;) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (goto_statement "goto LAB_0001160b;" goto statement_identifier ;) })) }) (else_clause "else if (local_1e9 != '\0') goto LAB_000119bc;" else (if_statement "if (local_1e9 != '\0') goto LAB_000119bc;" if (parenthesized_expression "(local_1e9 != '\0')" ( (binary_expression "local_1e9 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_000119bc;" goto statement_identifier ;))))) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" { (expression_statement "pcVar5 = "missing device name!\n\n";" (assignment_expression "pcVar5 = "missing device name!\n\n"" identifier = (string_literal ""missing device name!\n\n"" " string_content escape_sequence escape_sequence ")) ;) (goto_statement "goto LAB_000115ef;" goto statement_identifier ;) })) (if_statement "if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" if (parenthesized_expression "((int)local_19c < 8)" ( (binary_expression "(int)local_19c < 8" (cast_expression "(int)local_19c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }" { (if_statement "if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" if (parenthesized_expression "((int)local_19c < 6)" ( (binary_expression "(int)local_19c < 6" (cast_expression "(int)local_19c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }" { (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_19c != (undefined *)0x0) goto LAB_0001171b;" if (parenthesized_expression "(local_19c != (undefined *)0x0)" ( (binary_expression "local_19c != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001171b;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" else (compound_statement "{\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" { (labeled_statement "LAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;" statement_identifier : (expression_statement "local_1d4 = (stat64 *)0x1;" (assignment_expression "local_1d4 = (stat64 *)0x1" identifier = (cast_expression "(stat64 *)0x1" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) }))) }) (else_clause "else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" else (if_statement "if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" if (parenthesized_expression "((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff))" ( (binary_expression "(local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)" (parenthesized_expression "(local_19c == (undefined *)0xf)" ( (binary_expression "local_19c == (undefined *)0xf" identifier == (cast_expression "(undefined *)0xf" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(local_19c == (undefined *)0xff)" ( (binary_expression "local_19c == (undefined *)0xff" identifier == (cast_expression "(undefined *)0xff" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n        local_1d4 = (stat64 *)0x0;\n      }" { (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" else (compound_statement "{\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" { (if_statement "if (local_19c == (undefined *)0xe) goto LAB_00011c5b;" if (parenthesized_expression "(local_19c == (undefined *)0xe)" ( (binary_expression "local_19c == (undefined *)0xe" identifier == (cast_expression "(undefined *)0xe" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00011c5b;" goto statement_identifier ;)) (labeled_statement "LAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);" statement_identifier : (expression_statement "pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);" (call_expression "pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0)" identifier (argument_list "("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0)" ( (string_literal ""%s: mc_mode=0x%x, continue for now\n"" " string_content escape_sequence ") , (pointer_expression "&DAT_000149dc" & identifier) , identifier , identifier ))) ;)) (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))))) (if_statement "if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }" if (parenthesized_expression "((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8))" ( (binary_expression "(0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)" (parenthesized_expression "(0 < (int)local_1a0)" ( (binary_expression "0 < (int)local_1a0" number_literal < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((int)local_1a0 < (int)local_1a8)" ( (binary_expression "(int)local_1a0 < (int)local_1a8" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }" { (expression_statement "pr2serr("trim chunk size (CS) to be the same as LEN\n");" (call_expression "pr2serr("trim chunk size (CS) to be the same as LEN\n")" identifier (argument_list "("trim chunk size (CS) to be the same as LEN\n")" ( (string_literal ""trim chunk size (CS) to be the same as LEN\n"" " string_content escape_sequence ") ))) ;) (expression_statement "local_1a8 = local_1a0;" (assignment_expression "local_1a8 = local_1a0" identifier = identifier) ;) })) (expression_statement "ppvVar36 = local_1a0;" (assignment_expression "ppvVar36 = local_1a0" identifier = identifier) ;) (if_statement "if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }" if (parenthesized_expression "((0 < (int)local_198) && (0 < (int)local_1a8))" ( (binary_expression "(0 < (int)local_198) && (0 < (int)local_1a8)" (parenthesized_expression "(0 < (int)local_198)" ( (binary_expression "0 < (int)local_198" number_literal < (cast_expression "(int)local_198" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(0 < (int)local_1a8)" ( (binary_expression "0 < (int)local_1a8" number_literal < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }" { (expression_statement "local_198 = 0;" (assignment_expression "local_198 = 0" identifier = number_literal) ;) (expression_statement "ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );" (assignment_expression "ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" identifier = (cast_expression "(void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" identifier (argument_list "(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" ( (string_literal ""WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"" " string_content escape_sequence ") ))))) ;) })) (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "iVar15 = local_188;" (assignment_expression "iVar15 = local_188" identifier = identifier) ;) (expression_statement "local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);" (assignment_expression "local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" identifier = (cast_expression "(undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" identifier (argument_list "(local_1e0,0,local_188,ppvVar36)" ( identifier , number_literal , identifier , identifier ))))) ;) (expression_statement "uVar33 = CONCAT44(iVar15,uVar7);" (assignment_expression "uVar33 = CONCAT44(iVar15,uVar7)" identifier = (call_expression "CONCAT44(iVar15,uVar7)" identifier (argument_list "(iVar15,uVar7)" ( identifier , identifier )))) ;) (if_statement "if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" if (parenthesized_expression "((int)local_1dc < 0)" ( (binary_expression "(int)local_1dc < 0" (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" { (if_statement "if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }" { (expression_statement "uVar7 = safe_strerror(-(int)local_1dc);" (assignment_expression "uVar7 = safe_strerror(-(int)local_1dc)" identifier = (call_expression "safe_strerror(-(int)local_1dc)" identifier (argument_list "(-(int)local_1dc)" ( (unary_expression "-(int)local_1dc" - (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);" (call_expression "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7)" identifier (argument_list "("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7)" ( (string_literal ""sg_ses_microcode: open error: %s: %s\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "local_1d4 = local_1e0;" (assignment_expression "local_1d4 = local_1e0" identifier = identifier) ;) })) (expression_statement "lVar30 = sg_convert_errno(-(int)local_1dc);" (assignment_expression "lVar30 = sg_convert_errno(-(int)local_1dc)" identifier = (call_expression "sg_convert_errno(-(int)local_1dc)" identifier (argument_list "(-(int)local_1dc)" ( (unary_expression "-(int)local_1dc" - (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);" (assignment_expression "bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" identifier = (binary_expression "local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" (binary_expression "local_1f0 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) & (parenthesized_expression "((byte)local_1d4 ^ 1)" ( (binary_expression "(byte)local_1d4 ^ 1" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) ^ number_literal) )))) ;) (expression_statement "uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);" (assignment_expression "uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17)" identifier = (call_expression "CONCAT31((int3)((uint)local_1e0 >> 8),bVar17)" identifier (argument_list "((int3)((uint)local_1e0 >> 8),bVar17)" ( (call_expression "(int3)((uint)local_1e0 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "((uint)local_1e0 >> 8)" ( (binary_expression "(uint)local_1e0 >> 8" (cast_expression "(uint)local_1e0" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) ))) , identifier )))) ;) (if_statement "if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" if (parenthesized_expression "(bVar17 != 0)" ( (binary_expression "bVar17 != 0" identifier != number_literal) )) (compound_statement "{\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" { (expression_statement "pr2serr("ignoring --in=FILE option\n");" (call_expression "pr2serr("ignoring --in=FILE option\n")" identifier (argument_list "("ignoring --in=FILE option\n")" ( (string_literal ""ignoring --in=FILE option\n"" " string_content escape_sequence ") ))) ;) (expression_statement "uVar33 = CONCAT44(iVar15,uVar7);" (assignment_expression "uVar33 = CONCAT44(iVar15,uVar7)" identifier = (call_expression "CONCAT44(iVar15,uVar7)" identifier (argument_list "(iVar15,uVar7)" ( identifier , identifier )))) ;) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00011a5c;" goto statement_identifier ;) })) (if_statement "if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }" if (parenthesized_expression "(local_1f0 == (char *)0x0)" ( (binary_expression "local_1f0 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }" { (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((byte)local_1d4 == 0) goto LAB_00011a5c;" if (parenthesized_expression "((byte)local_1d4 == 0)" ( (binary_expression "(byte)local_1d4 == 0" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) == number_literal) )) (goto_statement "goto LAB_00011a5c;" goto statement_identifier ;)) (expression_statement "pr2serr("need --in=FILE option with given mode\n");" (call_expression "pr2serr("need --in=FILE option with given mode\n")" identifier (argument_list "("need --in=FILE option with given mode\n")" ( (string_literal ""need --in=FILE option with given mode\n"" " string_content escape_sequence ") ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_08,0x1f);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_08,0x1f)" identifier = (call_expression "CONCAT44(extraout_EDX_08,0x1f)" identifier (argument_list "(extraout_EDX_08,0x1f)" ( identifier , number_literal )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "local_1e0 = (stat64 *)strcmp(local_1f0,"-");" (assignment_expression "local_1e0 = (stat64 *)strcmp(local_1f0,"-")" identifier = (cast_expression "(stat64 *)strcmp(local_1f0,"-")" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "strcmp(local_1f0,"-")" identifier (argument_list "(local_1f0,"-")" ( identifier , (string_literal ""-"" " string_content ") ))))) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }" { (expression_statement "uVar25 = 0;" (assignment_expression "uVar25 = 0" identifier = number_literal) ;) (expression_statement "uVar7 = extraout_ECX_00;" (assignment_expression "uVar7 = extraout_ECX_00" identifier = identifier) ;) }) (else_clause "else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" else (compound_statement "{\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" { (expression_statement "uVar25 = open64(local_1f0,0,local_1e0,local_1e0);" (assignment_expression "uVar25 = open64(local_1f0,0,local_1e0,local_1e0)" identifier = (call_expression "open64(local_1f0,0,local_1e0,local_1e0)" identifier (argument_list "(local_1f0,0,local_1e0,local_1e0)" ( identifier , number_literal , identifier , identifier )))) ;) (if_statement "if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }" if (parenthesized_expression "((int)uVar25 < 0)" ( (binary_expression "(int)uVar25 < 0" (cast_expression "(int)uVar25" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }" { (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar7 = sg_convert_errno(*piVar9);" (assignment_expression "uVar7 = sg_convert_errno(*piVar9)" identifier = (call_expression "sg_convert_errno(*piVar9)" identifier (argument_list "(*piVar9)" ( (pointer_expression "*piVar9" * identifier) )))) ;) (expression_statement "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);" (call_expression "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" identifier (argument_list "(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" ( identifier , number_literal , number_literal , number_literal , (string_literal ""sg_ses_microcode: could not open %s for reading"" " string_content ") , identifier ))) ;) (expression_statement "perror((char *)local_124);" (call_expression "perror((char *)local_124)" identifier (argument_list "((char *)local_124)" ( (cast_expression "(char *)local_124" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_12,uVar7);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_12,uVar7)" identifier = (call_expression "CONCAT44(extraout_EDX_12,uVar7)" identifier (argument_list "(extraout_EDX_12,uVar7)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;) })) (expression_statement "iVar15 = sg_set_binary_mode(uVar25);" (assignment_expression "iVar15 = sg_set_binary_mode(uVar25)" identifier = (call_expression "sg_set_binary_mode(uVar25)" identifier (argument_list "(uVar25)" ( identifier )))) ;) (expression_statement "uVar7 = extraout_ECX_01;" (assignment_expression "uVar7 = extraout_ECX_01" identifier = identifier) ;) (if_statement "if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }" if (parenthesized_expression "(iVar15 < 0)" ( (binary_expression "iVar15 < 0" identifier < number_literal) )) (compound_statement "{\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }" { (expression_statement "perror("sg_set_binary_mode");" (call_expression "perror("sg_set_binary_mode")" identifier (argument_list "("sg_set_binary_mode")" ( (string_literal ""sg_set_binary_mode"" " string_content ") ))) ;) (expression_statement "uVar7 = extraout_ECX_11;" (assignment_expression "uVar7 = extraout_ECX_11" identifier = identifier) ;) })) }))) (expression_statement "uVar34 = uVar25;" (assignment_expression "uVar34 = uVar25" identifier = identifier) ;) (expression_statement "iVar15 = __fxstat64(3,uVar25,psVar37);" (assignment_expression "iVar15 = __fxstat64(3,uVar25,psVar37)" identifier = (call_expression "__fxstat64(3,uVar25,psVar37)" identifier (argument_list "(3,uVar25,psVar37)" ( number_literal , identifier , identifier )))) ;) (if_statement "if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" if (parenthesized_expression "((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000))" ( (binary_expression "(iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)" (parenthesized_expression "(iVar15 == 0)" ( (binary_expression "iVar15 == 0" identifier == number_literal) )) && (parenthesized_expression "((local_184.st_mode & 0xf000) == 0x8000)" ( (binary_expression "(local_184.st_mode & 0xf000) == 0x8000" (parenthesized_expression "(local_184.st_mode & 0xf000)" ( (binary_expression "local_184.st_mode & 0xf000" (field_expression "local_184.st_mode" identifier . field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }" { (if_statement "if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" if (parenthesized_expression "(local_1a0 == (void **)0x0)" ( (binary_expression "local_1a0 == (void **)0x0" identifier == (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }" { (expression_statement "iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;" (assignment_expression "iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_" identifier = (binary_expression "((int)local_194 >> 0x1f) - local_184.st_size._4_4_" (parenthesized_expression "((int)local_194 >> 0x1f)" ( (binary_expression "(int)local_194 >> 0x1f" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) - (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" identifier . field_identifier) . field_identifier))) ;) (if_statement "if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }" if (parenthesized_expression "((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0)" ( (binary_expression "(SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0" (parenthesized_expression "(SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size)))" ( (binary_expression "SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))" (call_expression "SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_)" identifier (argument_list "((int)local_194 >> 0x1f,local_184.st_size._4_4_)" ( (binary_expression "(int)local_194 >> 0x1f" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) , (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" identifier . field_identifier) . field_identifier) ))) != (call_expression "SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))" identifier (argument_list "(iVar15,(uint)(local_194 < (uint)local_184.st_size))" ( identifier , (call_expression "(uint)(local_194 < (uint)local_184.st_size)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(local_194 < (uint)local_184.st_size)" ( (binary_expression "local_194 < (uint)local_184.st_size" identifier < (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier))) ))) )))) )) != (binary_expression "(int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0" (cast_expression "(int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar15 - (uint)(local_194 < (uint)local_184.st_size))" ( (binary_expression "iVar15 - (uint)(local_194 < (uint)local_184.st_size)" identifier - (call_expression "(uint)(local_194 < (uint)local_184.st_size)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(local_194 < (uint)local_184.st_size)" ( (binary_expression "local_194 < (uint)local_184.st_size" identifier < (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier))) )))) ))) < number_literal)) )) (compound_statement "{\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }" { (expression_statement "local_1a0 = (void **)((uint)local_184.st_size - local_194);" (assignment_expression "local_1a0 = (void **)((uint)local_184.st_size - local_194)" identifier = (cast_expression "(void **)((uint)local_184.st_size - local_194)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((uint)local_184.st_size - local_194)" ( (binary_expression "(uint)local_184.st_size - local_194" (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier)) - identifier) )))) ;) (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00011e31;" goto statement_identifier ;) })) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);" (call_expression "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" identifier (argument_list "("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" ( (string_literal ""skip exceeds file size of %d bytes\n"" " string_content escape_sequence ") , (cast_expression "(uint)local_184.st_size" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_184.st_size" identifier . field_identifier)) , identifier , identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_19;" (assignment_expression "uVar7 = extraout_EDX_19" identifier = identifier) ;) }) (else_clause "else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" else (compound_statement "{\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" { (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" identifier = number_literal) ;) (labeled_statement "LAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;" statement_identifier : (if_statement "if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;" if (parenthesized_expression "((int)local_1a0 < 0x8000001)" ( (binary_expression "(int)local_1a0 < 0x8000001" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_0001185d;" goto statement_identifier ;))) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);" (call_expression "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23)" identifier (argument_list "("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23)" ( (string_literal ""file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n"" " string_content escape_sequence ") , identifier , number_literal , identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_06;" (assignment_expression "uVar7 = extraout_EDX_06" identifier = identifier) ;) }))) }) (else_clause "else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" else (compound_statement "{\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" { (if_statement "if (local_1a0 != (void **)0x0) goto LAB_00011e31;" if (parenthesized_expression "(local_1a0 != (void **)0x0)" ( (binary_expression "local_1a0 != (void **)0x0" identifier != (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00011e31;" goto statement_identifier ;)) (expression_statement "local_1a0 = (void **)0x800000;" (assignment_expression "local_1a0 = (void **)0x800000" identifier = (cast_expression "(void **)0x800000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (labeled_statement "LAB_0001185d:\n        ppvVar18 = local_1a0;" statement_identifier : (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" identifier = identifier) ;)) (expression_statement "local_1d8 = (stat64 *)malloc((size_t)local_1a0);" (assignment_expression "local_1d8 = (stat64 *)malloc((size_t)local_1a0)" identifier = (cast_expression "(stat64 *)malloc((size_t)local_1a0)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc((size_t)local_1a0)" identifier (argument_list "((size_t)local_1a0)" ( (cast_expression "(size_t)local_1a0" ( (type_descriptor "size_t" primitive_type) ) identifier) ))))) ;) (if_statement "if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" if (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" ( (binary_expression "local_1d8 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" { (expression_statement "uVar35 = 0xff;" (assignment_expression "uVar35 = 0xff" identifier = number_literal) ;) (expression_statement "uVar7 = extraout_ECX_02;" (assignment_expression "uVar7 = extraout_ECX_02" identifier = identifier) ;) (expression_statement "memset(local_1d8,0xff,(size_t)ppvVar18);" (call_expression "memset(local_1d8,0xff,(size_t)ppvVar18)" identifier (argument_list "(local_1d8,0xff,(size_t)ppvVar18)" ( identifier , number_literal , (cast_expression "(size_t)ppvVar18" ( (type_descriptor "size_t" primitive_type) ) identifier) ))) ;) (expression_statement "ppvVar36 = extraout_ECX_03;" (assignment_expression "ppvVar36 = extraout_ECX_03" identifier = identifier) ;) (if_statement "if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" if (parenthesized_expression "((int)local_194 < 1)" ( (binary_expression "(int)local_194 < 1" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }" { (labeled_statement "LAB_00011f46:\n            psVar14 = local_1d8;" statement_identifier : (expression_statement "psVar14 = local_1d8;" (assignment_expression "psVar14 = local_1d8" identifier = identifier) ;)) (expression_statement "ppvVar6 = local_1a0;" (assignment_expression "ppvVar6 = local_1a0" identifier = identifier) ;) (expression_statement "ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);" (assignment_expression "ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0)" identifier = (cast_expression "(void **)read(uVar25,local_1d8,(size_t)local_1a0)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "read(uVar25,local_1d8,(size_t)local_1a0)" identifier (argument_list "(uVar25,local_1d8,(size_t)local_1a0)" ( identifier , identifier , (cast_expression "(size_t)local_1a0" ( (type_descriptor "size_t" primitive_type) ) identifier) ))))) ;) (if_statement "if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }" if (parenthesized_expression "(-1 < (int)ppvVar18)" ( (binary_expression "-1 < (int)ppvVar18" number_literal < (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }" { (expression_statement "ppvVar27 = local_1a0;" (assignment_expression "ppvVar27 = local_1a0" identifier = identifier) ;) (expression_statement "uVar33 = CONCAT44(ppvVar6,psVar14);" (assignment_expression "uVar33 = CONCAT44(ppvVar6,psVar14)" identifier = (call_expression "CONCAT44(ppvVar6,psVar14)" identifier (argument_list "(ppvVar6,psVar14)" ( identifier , identifier )))) ;) (if_statement "if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;" if (parenthesized_expression "((int)local_1a0 <= (int)ppvVar18)" ( (binary_expression "(int)local_1a0 <= (int)ppvVar18" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;)) (if_statement "if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }" if (parenthesized_expression "(local_1ac == '\0')" ( (binary_expression "local_1ac == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }" { (expression_statement "ppvVar27 = ppvVar18;" (assignment_expression "ppvVar27 = ppvVar18" identifier = identifier) ;) (expression_statement "uVar33 = CONCAT44(ppvVar6,psVar14);" (assignment_expression "uVar33 = CONCAT44(ppvVar6,psVar14)" identifier = (call_expression "CONCAT44(ppvVar6,psVar14)" identifier (argument_list "(ppvVar6,psVar14)" ( identifier , identifier )))) ;) (if_statement "if (local_188 == 0) goto LAB_00011f90;" if (parenthesized_expression "(local_188 == 0)" ( (binary_expression "local_188 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;)) (expression_statement "ppvVar36 = ppvVar18;" (assignment_expression "ppvVar36 = ppvVar18" identifier = identifier) ;) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18)" identifier (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18)" ( (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "ppvVar6 = ppvVar18;" (assignment_expression "ppvVar6 = ppvVar18" identifier = identifier) ;) (expression_statement "pr2serr("will send %d bytes",ppvVar18);" (call_expression "pr2serr("will send %d bytes",ppvVar18)" identifier (argument_list "("will send %d bytes",ppvVar18)" ( (string_literal ""will send %d bytes"" " string_content ") , identifier ))) ;) (expression_statement "uVar33 = CONCAT44(extraout_EDX_18,local_1a8);" (assignment_expression "uVar33 = CONCAT44(extraout_EDX_18,local_1a8)" identifier = (call_expression "CONCAT44(extraout_EDX_18,local_1a8)" identifier (argument_list "(extraout_EDX_18,local_1a8)" ( identifier , identifier )))) ;) (if_statement "if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;" if (parenthesized_expression "((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0))" ( (binary_expression "(0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)" (parenthesized_expression "(0 < (int)local_1a8)" ( (binary_expression "0 < (int)local_1a8" number_literal < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((int)local_1a8 < (int)local_1a0)" ( (binary_expression "(int)local_1a8 < (int)local_1a0" (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (goto_statement "goto LAB_00012469;" goto statement_identifier ;)) (expression_statement "pr2serr("\n",ppvVar6,local_1f0,ppvVar36);" (call_expression "pr2serr("\n",ppvVar6,local_1f0,ppvVar36)" identifier (argument_list "("\n",ppvVar6,local_1f0,ppvVar36)" ( (string_literal ""\n"" " escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "uVar33 = CONCAT44(local_1f0,ppvVar6);" (assignment_expression "uVar33 = CONCAT44(local_1f0,ppvVar6)" identifier = (call_expression "CONCAT44(local_1f0,ppvVar6)" identifier (argument_list "(local_1f0,ppvVar6)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;) })) (expression_statement "ppvVar6 = local_1a0;" (assignment_expression "ppvVar6 = local_1a0" identifier = identifier) ;) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)" identifier (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)" ( (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "pr2serr("pad with 0xff bytes and continue\n");" (call_expression "pr2serr("pad with 0xff bytes and continue\n")" identifier (argument_list "("pad with 0xff bytes and continue\n")" ( (string_literal ""pad with 0xff bytes and continue\n"" " string_content escape_sequence ") ))) ;) (expression_statement "ppvVar36 = ppvVar18;" (assignment_expression "ppvVar36 = ppvVar18" identifier = identifier) ;) (expression_statement "ppvVar27 = local_1a0;" (assignment_expression "ppvVar27 = local_1a0" identifier = identifier) ;) (expression_statement "uVar33 = CONCAT44(local_1f0,ppvVar6);" (assignment_expression "uVar33 = CONCAT44(local_1f0,ppvVar6)" identifier = (call_expression "CONCAT44(local_1f0,ppvVar6)" identifier (argument_list "(local_1f0,ppvVar6)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011f90;" goto statement_identifier ;) })) (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar20 = sg_convert_errno(*piVar9);" (assignment_expression "uVar20 = sg_convert_errno(*piVar9)" identifier = (call_expression "sg_convert_errno(*piVar9)" identifier (argument_list "(*piVar9)" ( (pointer_expression "*piVar9" * identifier) )))) ;) (expression_statement "pcVar10 = "sg_ses_microcode: couldn\'t read from %s";" (assignment_expression "pcVar10 = "sg_ses_microcode: couldn\'t read from %s"" identifier = (string_literal ""sg_ses_microcode: couldn\'t read from %s"" " string_content escape_sequence string_content ")) ;) }) (else_clause "else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" else (compound_statement "{\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" { (if_statement "if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }" if (parenthesized_expression "((char)uVar23 == '\0')" ( (binary_expression "(char)uVar23 == '\0'" (cast_expression "(char)uVar23" ( (type_descriptor "char" primitive_type) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }" { (if_statement "if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }" { (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);" (call_expression "pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7)" identifier (argument_list "("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7)" ( (string_literal ""Can\'t skip on stdin\n"" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_000118d4;" goto statement_identifier ;) })) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" identifier = number_literal) ;) (expression_statement "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);" (call_expression "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7)" identifier (argument_list "("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7)" ( (string_literal ""sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_00011e75;" goto statement_identifier ;) })) (expression_statement "_Var32 = lseek64(uVar25,(longlong)(int)local_194,0);" (assignment_expression "_Var32 = lseek64(uVar25,(longlong)(int)local_194,0)" identifier = (call_expression "lseek64(uVar25,(longlong)(int)local_194,0)" identifier (argument_list "(uVar25,(longlong)(int)local_194,0)" ( identifier , (cast_expression "(longlong)(int)local_194" ( (type_descriptor "longlong" type_identifier) ) (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier)) , number_literal )))) ;) (expression_statement "ppvVar36 = extraout_ECX_09;" (assignment_expression "ppvVar36 = extraout_ECX_09" identifier = identifier) ;) (if_statement "if (-1 < _Var32) goto LAB_00011f46;" if (parenthesized_expression "(-1 < _Var32)" ( (binary_expression "-1 < _Var32" number_literal < identifier) )) (goto_statement "goto LAB_00011f46;" goto statement_identifier ;)) (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar20 = sg_convert_errno(*piVar9);" (assignment_expression "uVar20 = sg_convert_errno(*piVar9)" identifier = (call_expression "sg_convert_errno(*piVar9)" identifier (argument_list "(*piVar9)" ( (pointer_expression "*piVar9" * identifier) )))) ;) (expression_statement "pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";" (assignment_expression "pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s"" identifier = (string_literal ""sg_ses_microcode: couldn\'t skip to required position on %s"" " string_content escape_sequence string_content ")) ;) }))) (expression_statement "local_1d4 = local_124;" (assignment_expression "local_1d4 = local_124" identifier = identifier) ;) (expression_statement "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);" (call_expression "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0)" identifier (argument_list "(local_1d4,0x100,1,0x100,pcVar10,local_1f0)" ( identifier , number_literal , number_literal , number_literal , identifier , identifier ))) ;) (expression_statement "perror((char *)local_1d4);" (call_expression "perror((char *)local_1d4)" identifier (argument_list "((char *)local_1d4)" ( (cast_expression "(char *)local_1d4" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000118d4;" goto statement_identifier ;)) (goto_statement "goto LAB_00011e75;" goto statement_identifier ;) })) (expression_statement "uVar20 = 99;" (assignment_expression "uVar20 = 99" identifier = number_literal) ;) (expression_statement "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);" (call_expression "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7)" identifier (argument_list "("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7)" ( (string_literal ""sg_ses_microcode: out of memory to hold microcode read from FILE\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_16;" (assignment_expression "uVar7 = extraout_EDX_16" identifier = identifier) ;) }))) (expression_statement "lVar30 = CONCAT44(uVar7,uVar20);" (assignment_expression "lVar30 = CONCAT44(uVar7,uVar20)" identifier = (call_expression "CONCAT44(uVar7,uVar20)" identifier (argument_list "(uVar7,uVar20)" ( identifier , identifier )))) ;) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000118e5;" goto statement_identifier ;)) (labeled_statement "LAB_00011e75:\n      close(uVar25);" statement_identifier : (expression_statement "close(uVar25);" (call_expression "close(uVar25)" identifier (argument_list "(uVar25)" ( identifier ))) ;)) (expression_statement "lVar30 = CONCAT44(extraout_EDX_07,uVar20);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_07,uVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_07,uVar20)" identifier (argument_list "(extraout_EDX_07,uVar20)" ( identifier , identifier )))) ;) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;) })) (switch_statement "switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }" switch (parenthesized_expression "(iVar13)" ( identifier )) (compound_statement "{\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }" { (case_statement "case 0x3f:" case number_literal :) (case_statement "case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;" case number_literal : (expression_statement "local_1e8 = local_1e8 + 1;" (assignment_expression "local_1e8 = local_1e8 + 1" identifier = (binary_expression "local_1e8 + 1" identifier + number_literal)) ;) (break_statement "break;" break ;)) (case_statement "default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;" default : (expression_statement "pcVar5 = "unrecognised option code 0x%x ??\n";" (assignment_expression "pcVar5 = "unrecognised option code 0x%x ??\n"" identifier = (string_literal ""unrecognised option code 0x%x ??\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_000115ef:\n      pr2serr(pcVar5);" statement_identifier : (expression_statement "pr2serr(pcVar5);" (call_expression "pr2serr(pcVar5)" identifier (argument_list "(pcVar5)" ( identifier ))) ;)) (expression_statement "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );" (call_expression "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" identifier (argument_list "(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" ( (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;)) (case_statement "case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;" case number_literal : (expression_statement "local_1f0 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "local_1f0 = *(char **)PTR_optarg_00015ffc" identifier = (pointer_expression "*(char **)PTR_optarg_00015ffc" * (cast_expression "(char **)PTR_optarg_00015ffc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;" case number_literal : (expression_statement "local_1b0._2_1_ = '\x01';" (assignment_expression "local_1b0._2_1_ = '\x01'" (field_expression "local_1b0._2_1_" identifier . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "uStack_190 = func_0x00011130(*(undefined4 *)puVar16);" (assignment_expression "uStack_190 = func_0x00011130(*(undefined4 *)puVar16)" identifier = (call_expression "func_0x00011130(*(undefined4 *)puVar16)" identifier (argument_list "(*(undefined4 *)puVar16)" ( (pointer_expression "*(undefined4 *)puVar16" * (cast_expression "(undefined4 *)puVar16" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "(0xff < uStack_190)" ( (binary_expression "0xff < uStack_190" number_literal < identifier) )) (compound_statement "{\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");" (call_expression "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n")" identifier (argument_list "("expected argument to \'--subenc\' to be 0 to 255\n")" ( (string_literal ""expected argument to \'--subenc\' to be 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x56:\n      local_1e9 = '\x01';\n      break;" case number_literal : (expression_statement "local_1e9 = '\x01';" (assignment_expression "local_1e9 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;" case number_literal : (expression_statement "local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (cast_expression "(void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;) (if_statement "if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_1a8 < 0)" ( (binary_expression "(int)local_1a8 < 0" (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("argument to \'--bpw\' should be in a positive number\n");" (call_expression "pr2serr("argument to \'--bpw\' should be in a positive number\n")" identifier (argument_list "("argument to \'--bpw\' should be in a positive number\n")" ( (string_literal ""argument to \'--bpw\' should be in a positive number\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (expression_statement "iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);" (assignment_expression "iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" identifier = (call_expression "func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" identifier (argument_list "(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" ( (pointer_expression "*(undefined4 *)puVar3" * (cast_expression "(undefined4 *)puVar3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , number_literal , identifier , identifier )))) ;) (if_statement "if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }" if (parenthesized_expression "((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0))" ( (binary_expression "(iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)" (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) && (parenthesized_expression "(iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)" ( (comma_expression "iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0" (assignment_expression "iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3)" identifier = (call_expression "func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3)" identifier (argument_list "(&UNK_000146c9,iVar13 + 1,3,puVar3)" ( (pointer_expression "&UNK_000146c9" & identifier) , (binary_expression "iVar13 + 1" identifier + number_literal) , number_literal , identifier )))) , (binary_expression "iVar13 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n        local_1b0._3_1_ = '\x01';\n      }" { (expression_statement "local_1b0._3_1_ = '\x01';" (assignment_expression "local_1b0._3_1_ = '\x01'" (field_expression "local_1b0._3_1_" identifier . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) })) (break_statement "break;" break ;)) (case_statement "case 100:\n      local_1b0._0_1_ = '\x01';\n      break;" case number_literal : (expression_statement "local_1b0._0_1_ = '\x01';" (assignment_expression "local_1b0._0_1_ = '\x01'" (field_expression "local_1b0._0_1_" identifier . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x65:\n      local_1b0._1_1_ = 1;\n      break;" case number_literal : (expression_statement "local_1b0._1_1_ = 1;" (assignment_expression "local_1b0._1_1_ = 1" (field_expression "local_1b0._1_1_" identifier . field_identifier) = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (call_expression "func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "(0xff < local_1a4)" ( (binary_expression "0xff < local_1a4" number_literal < identifier) )) (compound_statement "{\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("argument to \'--id\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--id\' should be in the range 0 to 255\n")" identifier (argument_list "("argument to \'--id\' should be in the range 0 to 255\n")" ( (string_literal ""argument to \'--id\' should be in the range 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;" case number_literal : (expression_statement "local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (cast_expression "(void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;) (if_statement "if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_1a0 < 0)" ( (binary_expression "(int)local_1a0 < 0" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--length\'\n");" (call_expression "pr2serr("bad argument to \'--length\'\n")" identifier (argument_list "("bad argument to \'--length\'\n")" ( (string_literal ""bad argument to \'--length\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (expression_statement "local_1ac = '\x01';" (assignment_expression "local_1ac = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (break_statement "break;" break ;)) (case_statement "case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;" case number_literal : (expression_statement "piVar9 = (int *)func_0x00011240();" (assignment_expression "piVar9 = (int *)func_0x00011240()" identifier = (cast_expression "(int *)func_0x00011240()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "func_0x00011240()" identifier (argument_list "()" ( ))))) ;) (expression_statement "pcVar5 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "pcVar5 = *(char **)PTR_optarg_00015ffc" identifier = (pointer_expression "*(char **)PTR_optarg_00015ffc" * (cast_expression "(char **)PTR_optarg_00015ffc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (if_statement "if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" if (parenthesized_expression "((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0)" ( (binary_expression "(*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0" (parenthesized_expression "(*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8)" ( (binary_expression "*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8" (pointer_expression "*(byte *)(*piVar9 + 1 + *pcVar5 * 2)" * (cast_expression "(byte *)(*piVar9 + 1 + *pcVar5 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar9 + 1 + *pcVar5 * 2)" ( (binary_expression "*piVar9 + 1 + *pcVar5 * 2" (binary_expression "*piVar9 + 1" (pointer_expression "*piVar9" * identifier) + number_literal) + (binary_expression "*pcVar5 * 2" (pointer_expression "*pcVar5" * identifier) * number_literal)) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }" { (expression_statement "uVar25 = 0xffffffff;" (assignment_expression "uVar25 = 0xffffffff" identifier = number_literal) ;) (expression_statement "pcVar26 = pcVar5;" (assignment_expression "pcVar26 = pcVar5" identifier = identifier) ;) (do_statement "do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');" do (compound_statement "{\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        }" { (if_statement "if (uVar25 == 0) break;" if (parenthesized_expression "(uVar25 == 0)" ( (binary_expression "uVar25 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar25 = uVar25 - 1;" (assignment_expression "uVar25 = uVar25 - 1" identifier = (binary_expression "uVar25 - 1" identifier - number_literal)) ;) (expression_statement "cVar4 = *pcVar26;" (assignment_expression "cVar4 = *pcVar26" identifier = (pointer_expression "*pcVar26" * identifier)) ;) (expression_statement "pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;" (assignment_expression "pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1" identifier = (binary_expression "pcVar26 + (uint)bVar29 * -2 + 1" (binary_expression "pcVar26 + (uint)bVar29 * -2" identifier + (binary_expression "(uint)bVar29 * -2" (cast_expression "(uint)bVar29" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar4 != '\0')" ( (binary_expression "cVar4 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (if_statement "if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }" if (parenthesized_expression "(PTR_s_dmc_status_00016100 == (undefined *)0x0)" ( (binary_expression "PTR_s_dmc_status_00016100 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }" { (labeled_statement "code_r0x00011fdc:\n          FUN_00012620();" statement_identifier : (expression_statement "FUN_00012620();" (call_expression "FUN_00012620()" identifier (argument_list "()" ( ))) ;)) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (expression_statement "ppuVar19 = &PTR_s_dmc_status_00016100;" (assignment_expression "ppuVar19 = &PTR_s_dmc_status_00016100" identifier = (pointer_expression "&PTR_s_dmc_status_00016100" & identifier)) ;) (expression_statement "puVar24 = PTR_s_dmc_status_00016100;" (assignment_expression "puVar24 = PTR_s_dmc_status_00016100" identifier = identifier) ;) (while_statement "while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }" while (parenthesized_expression "(iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0)" ( (comma_expression "iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0" (assignment_expression "iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1)" identifier = (call_expression "func_0x00011200(puVar24,pcVar5,~uVar25 - 1)" identifier (argument_list "(puVar24,pcVar5,~uVar25 - 1)" ( identifier , identifier , (binary_expression "~uVar25 - 1" (unary_expression "~uVar25" ~ identifier) - number_literal) )))) , (binary_expression "iVar13 != 0" identifier != number_literal)) )) (compound_statement "{\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }" { (expression_statement "ppuVar19 = ppuVar19 + 3;" (assignment_expression "ppuVar19 = ppuVar19 + 3" identifier = (binary_expression "ppuVar19 + 3" identifier + number_literal)) ;) (expression_statement "puVar24 = *ppuVar19;" (assignment_expression "puVar24 = *ppuVar19" identifier = (pointer_expression "*ppuVar19" * identifier)) ;) (if_statement "if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;" if (parenthesized_expression "(puVar24 == (undefined *)0x0)" ( (binary_expression "puVar24 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto code_r0x00011fdc;" goto statement_identifier ;)) })) (expression_statement "local_19c = ppuVar19[1];" (assignment_expression "local_19c = ppuVar19[1]" identifier = (subscript_expression "ppuVar19[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" else (compound_statement "{\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" { (expression_statement "local_19c = (undefined *)func_0x00011130(pcVar5);" (assignment_expression "local_19c = (undefined *)func_0x00011130(pcVar5)" identifier = (cast_expression "(undefined *)func_0x00011130(pcVar5)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "func_0x00011130(pcVar5)" identifier (argument_list "(pcVar5)" ( identifier ))))) ;) (if_statement "if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }" if (parenthesized_expression "((undefined *)0xff < local_19c)" ( (binary_expression "(undefined *)0xff < local_19c" (cast_expression "(undefined *)0xff" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) < identifier) )) (compound_statement "{\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }" { (expression_statement "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n")" identifier (argument_list "("argument to \'--mode\' should be in the range 0 to 255\n")" ( (string_literal ""argument to \'--mode\' should be in the range 0 to 255\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) }))) (break_statement "break;" break ;)) (case_statement "case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_198 < 0)" ( (binary_expression "(int)local_198 < 0" (cast_expression "(int)local_198" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--offset\'\n");" (call_expression "pr2serr("bad argument to \'--offset\'\n")" identifier (argument_list "("bad argument to \'--offset\'\n")" ( (string_literal ""bad argument to \'--offset\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (if_statement "if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((local_198 & 3) != 0)" ( (binary_expression "(local_198 & 3) != 0" (parenthesized_expression "(local_198 & 3)" ( (binary_expression "local_198 & 3" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("\'--offset\' value needs to be a multiple of 4\n");" (call_expression "pr2serr("\'--offset\' value needs to be a multiple of 4\n")" identifier (argument_list "("\'--offset\' value needs to be a multiple of 4\n")" ( (string_literal ""\'--offset\' value needs to be a multiple of 4\n"" " escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;" case number_literal : (expression_statement "local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier = (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" identifier (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" ( (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" * (cast_expression "(undefined4 *)PTR_optarg_00015ffc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }" if (parenthesized_expression "((int)local_194 < 0)" ( (binary_expression "(int)local_194 < 0" (cast_expression "(int)local_194" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }" { (expression_statement "pr2serr("bad argument to \'--skip\'\n");" (call_expression "pr2serr("bad argument to \'--skip\'\n")" identifier (argument_list "("bad argument to \'--skip\'\n")" ( (string_literal ""bad argument to \'--skip\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement "goto code_r0x00011606;" goto statement_identifier ;) })) (break_statement "break;" break ;)) (case_statement "case 0x74:\n      goto code_r0x000113fe;" case number_literal : (goto_statement "goto code_r0x000113fe;" goto statement_identifier ;)) (case_statement "case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;" case number_literal : (expression_statement "local_188 = local_188 + 1;" (assignment_expression "local_188 = local_188 + 1" identifier = (binary_expression "local_188 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;)) })) }) while (parenthesized_expression "( true )" ( true )) ;)) (labeled_statement "code_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);" statement_identifier : (expression_statement "local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);" (assignment_expression "local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16)" identifier = (cast_expression "(void **)func_0x000111e0(*(undefined4 *)puVar16)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "func_0x000111e0(*(undefined4 *)puVar16)" identifier (argument_list "(*(undefined4 *)puVar16)" ( (pointer_expression "*(undefined4 *)puVar16" * (cast_expression "(undefined4 *)puVar16" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))))) ;)) (if_statement "if ((int)local_18c < 0) goto code_r0x0001141f;" if (parenthesized_expression "((int)local_18c < 0)" ( (binary_expression "(int)local_18c < 0" (cast_expression "(int)local_18c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto code_r0x0001141f;" goto statement_identifier ;)) (goto_statement "goto code_r0x00011330;" goto statement_identifier ;) (labeled_statement "code_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");" statement_identifier : (expression_statement "pr2serr("bad argument to \'--tlength\'\n");" (call_expression "pr2serr("bad argument to \'--tlength\'\n")" identifier (argument_list "("bad argument to \'--tlength\'\n")" ( (string_literal ""bad argument to \'--tlength\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;)) (labeled_statement "code_r0x00011606:\n  ppvVar18 = (void **)0x1;" statement_identifier : (expression_statement "ppvVar18 = (void **)0x1;" (assignment_expression "ppvVar18 = (void **)0x1" identifier = (cast_expression "(void **)0x1" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;)) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" identifier = (cast_expression "(stat64 *)pcVar10" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (labeled_statement "LAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );" do (compound_statement "{\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  }" { (expression_statement "uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" identifier = (binary_expression "local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" identifier ^ (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" * (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) )))))) ;) (if_statement "if (uVar25 == 0) {\n      return ppvVar18;\n    }" if (parenthesized_expression "(uVar25 == 0)" ( (binary_expression "uVar25 == 0" identifier == number_literal) )) (compound_statement "{\n      return ppvVar18;\n    }" { (return_statement "return ppvVar18;" return identifier ;) })) (expression_statement "uVar33 = FUN_00012f60();" (assignment_expression "uVar33 = FUN_00012f60()" identifier = (call_expression "FUN_00012f60()" identifier (argument_list "()" ( )))) ;) (labeled_statement "LAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);" statement_identifier : (expression_statement "ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);" (assignment_expression "ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20)" identifier = (cast_expression "(void **)((ulonglong)uVar33 >> 0x20)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((ulonglong)uVar33 >> 0x20)" ( (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);" (call_expression "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36)" identifier (argument_list "(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36)" ( (string_literal "", %d bytes per WRITE BUFFER command\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "ppvVar27 = ppvVar18;" (assignment_expression "ppvVar27 = ppvVar18" identifier = identifier) ;) (labeled_statement "LAB_00011f90:\n    local_1a0 = ppvVar27;" statement_identifier : (expression_statement "local_1a0 = ppvVar27;" (assignment_expression "local_1a0 = ppvVar27" identifier = identifier) ;)) (if_statement "if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }" if (parenthesized_expression "(local_1e0 != (stat64 *)0x0)" ( (binary_expression "local_1e0 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      close(uVar25);\n    }" { (expression_statement "close(uVar25);" (call_expression "close(uVar25)" identifier (argument_list "(uVar25)" ( identifier ))) ;) })) (labeled_statement "LAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }" statement_identifier : (if_statement "if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }" if (parenthesized_expression "((int)local_18c < (int)local_1a0)" ( (binary_expression "(int)local_18c < (int)local_1a0" (cast_expression "(int)local_18c" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      local_18c = local_1a0;\n    }" { (expression_statement "local_18c = local_1a0;" (assignment_expression "local_18c = local_1a0" identifier = identifier) ;) }))) (if_statement "if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" if (parenthesized_expression "((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0))" ( (binary_expression "(local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)" (parenthesized_expression "(local_1b0._2_1_ == '\0')" ( (binary_expression "local_1b0._2_1_ == '\0'" (field_expression "local_1b0._2_1_" identifier . field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(local_19c != (undefined *)0x0)" ( (binary_expression "local_19c != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }" { (expression_statement "ppvVar6 = (void **)(uint)(3 < local_188);" (assignment_expression "ppvVar6 = (void **)(uint)(3 < local_188)" identifier = (cast_expression "(void **)(uint)(3 < local_188)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "(uint)(3 < local_188)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(3 < local_188)" ( (binary_expression "3 < local_188" number_literal < identifier) ))))) ;) (expression_statement "ppvVar18 = &local_1c0;" (assignment_expression "ppvVar18 = &local_1c0" identifier = (pointer_expression "&local_1c0" & identifier)) ;) (expression_statement "ppvVar36 = (void **)0x0;" (assignment_expression "ppvVar36 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);" (assignment_expression "lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6)" identifier = (call_expression "sg_memalign(0x2000,0,ppvVar18,ppvVar6)" identifier (argument_list "(0x2000,0,ppvVar18,ppvVar6)" ( number_literal , number_literal , identifier , identifier )))) ;) (expression_statement "local_1e0 = (stat64 *)lVar30;" (assignment_expression "local_1e0 = (stat64 *)lVar30" identifier = (cast_expression "(stat64 *)lVar30" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" if (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" ( (binary_expression "local_1e0 == (stat64 *)0x0" identifier == (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }" { (expression_statement "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");" (call_expression "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n")" identifier (argument_list "("sg_ses_microcode: out of memory (data-in buffer)\n")" ( (string_literal ""sg_ses_microcode: out of memory (data-in buffer)\n"" " string_content escape_sequence ") ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_17,99);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_17,99)" identifier = (call_expression "CONCAT44(extraout_EDX_17,99)" identifier (argument_list "(extraout_EDX_17,99)" ( identifier , number_literal )))) ;) }) (else_clause "else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" else (compound_statement "{\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" { (if_statement "if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" if (parenthesized_expression "((char)local_1b0 == '\0')" ( (binary_expression "(char)local_1b0 == '\0'" (cast_expression "(char)local_1b0" ( (type_descriptor "char" primitive_type) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }" { (expression_statement "iVar15 = 1;" (assignment_expression "iVar15 = 1" identifier = number_literal) ;) (if_statement "if (0 < local_188) {\n            iVar15 = local_188;\n          }" if (parenthesized_expression "(0 < local_188)" ( (binary_expression "0 < local_188" number_literal < identifier) )) (compound_statement "{\n            iVar15 = local_188;\n          }" { (expression_statement "iVar15 = local_188;" (assignment_expression "iVar15 = local_188" identifier = identifier) ;) })) (expression_statement "lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);" (assignment_expression "lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" identifier = (call_expression "sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" identifier (argument_list "(local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" ( identifier , number_literal , number_literal , identifier , number_literal , number_literal , (pointer_expression "&local_1c4" & identifier) , number_literal , (binary_expression "iVar15 + -1" identifier + number_literal) )))) ;) (expression_statement "ppvVar27 = (void **)lVar30;" (assignment_expression "ppvVar27 = (void **)lVar30" identifier = (cast_expression "(void **)lVar30" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (if_statement "if (ppvVar27 != (void **)0x0) goto LAB_00011e81;" if (parenthesized_expression "(ppvVar27 != (void **)0x0)" ( (binary_expression "ppvVar27 != (void **)0x0" identifier != (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2)" identifier = (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" * (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 2)" ( (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar22 = (void **)(0x2000 - local_1c4);" (assignment_expression "ppvVar22 = (void **)(0x2000 - local_1c4)" identifier = (cast_expression "(void **)(0x2000 - local_1c4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(0x2000 - local_1c4)" ( (binary_expression "0x2000 - local_1c4" number_literal - identifier) )))) ;) (expression_statement "ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);" (assignment_expression "ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" identifier = (cast_expression "(void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (binary_expression "(ushort)(uVar1 << 8 | uVar1 >> 8) + 4" (call_expression "(ushort)(uVar1 << 8 | uVar1 >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) ))) + number_literal) )))) ;) (expression_statement "puVar16 = extraout_ECX_05;" (assignment_expression "puVar16 = extraout_ECX_05" identifier = identifier) ;) (expression_statement "ppvVar28 = ppvVar8;" (assignment_expression "ppvVar28 = ppvVar8" identifier = identifier) ;) (if_statement "if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;" if (parenthesized_expression "(ppvVar8 < (void **)0x2001)" ( (binary_expression "ppvVar8 < (void **)0x2001" identifier < (cast_expression "(void **)0x2001" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00011b07;" goto statement_identifier ;)) (expression_statement "ppvVar28 = (void **)0x2000;" (assignment_expression "ppvVar28 = (void **)0x2000" identifier = (cast_expression "(void **)0x2000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "ppvVar36 = (void **)0x2000;" (assignment_expression "ppvVar36 = (void **)0x2000" identifier = (cast_expression "(void **)0x2000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);" (assignment_expression "uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" identifier = (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" identifier (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" ( (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" " string_content escape_sequence ") , number_literal , identifier , number_literal )))) ;) (expression_statement "uVar25 = (uint)((ulonglong)uVar33 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)uVar33 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar33 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar33 >> 0x20)" ( (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "ppvVar12 = (void **)uVar33;" (assignment_expression "ppvVar12 = (void **)uVar33" identifier = (cast_expression "(void **)uVar33" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "puVar16 = extraout_ECX_06;" (assignment_expression "puVar16 = extraout_ECX_06" identifier = identifier) ;) (if_statement "if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;" if (parenthesized_expression "((int)ppvVar22 < 0x2000)" ( (binary_expression "(int)ppvVar22 < 0x2000" (cast_expression "(int)ppvVar22" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_00011ddf;" goto statement_identifier ;)) }) (else_clause "else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" else (compound_statement "{\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" { (expression_statement "puVar21 = &DAT_00016020;" (assignment_expression "puVar21 = &DAT_00016020" identifier = (pointer_expression "&DAT_00016020" & identifier)) ;) (expression_statement "psVar14 = local_1e0;" (assignment_expression "psVar14 = local_1e0" identifier = identifier) ;) (for_statement "for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }" for ( (assignment_expression "iVar15 = 0x12" identifier = number_literal) ; (binary_expression "iVar15 != 0" identifier != number_literal) ; (assignment_expression "iVar15 = iVar15 + -1" identifier = (binary_expression "iVar15 + -1" identifier + number_literal)) ) (compound_statement "{\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }" { (expression_statement "*(undefined4 *)&psVar14->st_dev = *puVar21;" (assignment_expression "*(undefined4 *)&psVar14->st_dev = *puVar21" (pointer_expression "*(undefined4 *)&psVar14->st_dev" * (cast_expression "(undefined4 *)&psVar14->st_dev" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->st_dev" & (field_expression "psVar14->st_dev" identifier -> field_identifier)))) = (pointer_expression "*puVar21" * identifier)) ;) (expression_statement "puVar21 = puVar21 + (uint)bVar29 * -2 + 1;" (assignment_expression "puVar21 = puVar21 + (uint)bVar29 * -2 + 1" identifier = (binary_expression "puVar21 + (uint)bVar29 * -2 + 1" (binary_expression "puVar21 + (uint)bVar29 * -2" identifier + (binary_expression "(uint)bVar29 * -2" (cast_expression "(uint)bVar29" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);" (assignment_expression "psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4)" identifier = (cast_expression "(stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)psVar14 + (uint)bVar29 * -8 + 4)" ( (binary_expression "(int)psVar14 + (uint)bVar29 * -8 + 4" (binary_expression "(int)psVar14 + (uint)bVar29 * -8" (cast_expression "(int)psVar14" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uint)bVar29 * -8" (cast_expression "(uint)bVar29" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) })) (expression_statement "ppvVar22 = (void **)0x48;" (assignment_expression "ppvVar22 = (void **)0x48" identifier = (cast_expression "(void **)0x48" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "local_1c4 = 0x1fb8;" (assignment_expression "local_1c4 = 0x1fb8" identifier = number_literal) ;) (expression_statement "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2)" identifier = (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" * (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 2)" ( (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);" (assignment_expression "ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" identifier = (cast_expression "(void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" ( (binary_expression "(ushort)(uVar1 << 8 | uVar1 >> 8) + 4" (call_expression "(ushort)(uVar1 << 8 | uVar1 >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) ))) + number_literal) )))) ;) (expression_statement "puVar16 = (undefined *)0x0;" (assignment_expression "puVar16 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppvVar28 = ppvVar27;" (assignment_expression "ppvVar28 = ppvVar27" identifier = identifier) ;) (if_statement "if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" if (parenthesized_expression "(ppvVar27 < (void **)0x2001)" ( (binary_expression "ppvVar27 < (void **)0x2001" identifier < (cast_expression "(void **)0x2001" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }" { (labeled_statement "LAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" statement_identifier : (expression_statement "uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)lVar30 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar30 >> 0x20)" ( (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "ppvVar12 = (void **)lVar30;" (assignment_expression "ppvVar12 = (void **)lVar30" identifier = (cast_expression "(void **)lVar30" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "ppvVar8 = ppvVar18;" (assignment_expression "ppvVar8 = ppvVar18" identifier = identifier) ;) (expression_statement "ppvVar27 = ppvVar6;" (assignment_expression "ppvVar27 = ppvVar6" identifier = identifier) ;) (if_statement "if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;" if (parenthesized_expression "((int)ppvVar22 < (int)ppvVar28)" ( (binary_expression "(int)ppvVar22 < (int)ppvVar28" (cast_expression "(int)ppvVar22" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00011ddf;" goto statement_identifier ;)) }) (else_clause "else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" else (compound_statement "{\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" { (expression_statement "ppvVar28 = (void **)0x2000;" (assignment_expression "ppvVar28 = (void **)0x2000" identifier = (cast_expression "(void **)0x2000" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);" (assignment_expression "ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" identifier = (cast_expression "(void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" identifier (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" ( (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" " string_content escape_sequence ") , number_literal , identifier , identifier ))))) ;) (labeled_statement "LAB_00011ddf:\n            ppvVar36 = ppvVar22;" statement_identifier : (expression_statement "ppvVar36 = ppvVar22;" (assignment_expression "ppvVar36 = ppvVar22" identifier = identifier) ;)) (expression_statement "ppvVar8 = ppvVar28;" (assignment_expression "ppvVar8 = ppvVar28" identifier = identifier) ;) (expression_statement "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);" (call_expression "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12)" identifier (argument_list "("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12)" ( (string_literal ""<<< warning response too short [actually got %d but need %d]>>>\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "puVar16 = extraout_ECX_07;" (assignment_expression "puVar16 = extraout_ECX_07" identifier = identifier) ;) (expression_statement "uVar25 = extraout_EDX_05;" (assignment_expression "uVar25 = extraout_EDX_05" identifier = identifier) ;) (expression_statement "ppvVar28 = ppvVar22;" (assignment_expression "ppvVar28 = ppvVar22" identifier = identifier) ;) (expression_statement "ppvVar27 = ppvVar12;" (assignment_expression "ppvVar27 = ppvVar12" identifier = identifier) ;) }))) (if_statement "if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }" if (parenthesized_expression "((int)ppvVar28 < 8)" ( (binary_expression "(int)ppvVar28 < 8" (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }" { (expression_statement "pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);" (call_expression "pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27)" identifier (argument_list "("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27)" ( (string_literal ""Download microcode status dpage too short\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "lVar30 = CONCAT44(extraout_EDX_10,99);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_10,99)" identifier = (call_expression "CONCAT44(extraout_EDX_10,99)" identifier (argument_list "(extraout_EDX_10,99)" ( identifier , number_literal )))) ;) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;) })) }))) (if_statement "if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }" if (parenthesized_expression "((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0))))" ( (binary_expression "(2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))" (parenthesized_expression "(2 < local_188)" ( (binary_expression "2 < local_188" number_literal < identifier) )) || (parenthesized_expression "(((char)local_1b0 != '\0' && (local_188 != 0)))" ( (parenthesized_expression "((char)local_1b0 != '\0' && (local_188 != 0))" ( (binary_expression "(char)local_1b0 != '\0' && (local_188 != 0)" (binary_expression "(char)local_1b0 != '\0'" (cast_expression "(char)local_1b0" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) && (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) ))) )) ))) )) (compound_statement "{\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }" { (expression_statement "uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar25 = *(uint *)((int)&local_1e0->st_dev + 4)" identifier = (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" * (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 4)" ( (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);" (assignment_expression "ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" identifier = (cast_expression "(void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" ( (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" ( (binary_expression "uVar25 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" ( (binary_expression "uVar25 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar25 << 0x18" identifier << number_literal)) )))) ;) (expression_statement "ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);" (assignment_expression "ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" identifier = (binary_expression "(void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" (cast_expression "(void **)(uint)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)((int)&local_1e0->st_dev + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 1)" ( (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar36 = ppvVar28;" (assignment_expression "ppvVar36 = ppvVar28" identifier = identifier) ;) (expression_statement "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);" (call_expression "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27)" identifier (argument_list "("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27)" ( (string_literal ""rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) (expression_statement "puVar16 = extraout_ECX_08;" (assignment_expression "puVar16 = extraout_ECX_08" identifier = identifier) ;) (expression_statement "uVar25 = extraout_EDX_09;" (assignment_expression "uVar25 = extraout_EDX_09" identifier = identifier) ;) })) (expression_statement "uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar34 = *(uint *)((int)&local_1e0->st_dev + 4)" identifier = (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" * (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 4)" ( (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (if_statement "if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" if (parenthesized_expression "(local_19c == (undefined *)0x0)" ( (binary_expression "local_19c == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }" { (expression_statement "puts("Download microcode status diagnostic page:");" (call_expression "puts("Download microcode status diagnostic page:")" identifier (argument_list "("Download microcode status diagnostic page:")" ( (string_literal ""Download microcode status diagnostic page:"" " string_content ") ))) ;) (expression_statement "cVar4 = *(char *)((int)&local_1e0->st_dev + 1);" (assignment_expression "cVar4 = *(char *)((int)&local_1e0->st_dev + 1)" identifier = (pointer_expression "*(char *)((int)&local_1e0->st_dev + 1)" * (cast_expression "(char *)((int)&local_1e0->st_dev + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_1e0->st_dev + 1)" ( (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "ppvVar28 = ppvVar28 + -2;" (assignment_expression "ppvVar28 = ppvVar28 + -2" identifier = (binary_expression "ppvVar28 + -2" identifier + number_literal)) ;) (expression_statement "uVar7 = extraout_ECX_10;" (assignment_expression "uVar7 = extraout_ECX_10" identifier = identifier) ;) (if_statement "if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }" if (parenthesized_expression "(((uint)ppvVar28 & 0xf) != 0)" ( (binary_expression "((uint)ppvVar28 & 0xf) != 0" (parenthesized_expression "((uint)ppvVar28 & 0xf)" ( (binary_expression "(uint)ppvVar28 & 0xf" (cast_expression "(uint)ppvVar28" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }" { (expression_statement "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);" (call_expression "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28)" identifier (argument_list "("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28)" ( (string_literal ""Found %d Download microcode status descriptors, but there is residual\n"" " string_content escape_sequence ") , (binary_expression "(int)ppvVar28 >> 4" (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) , identifier , identifier ))) ;) (expression_statement "uVar7 = extraout_ECX_13;" (assignment_expression "uVar7 = extraout_ECX_13" identifier = identifier) ;) })) (expression_statement "__printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);" (call_expression "__printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7)" identifier (argument_list "(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7)" ( number_literal , (string_literal ""  number of secondary subenclosures: %d\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "__printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);" (call_expression "__printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18)" identifier (argument_list "(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18)" ( number_literal , (string_literal ""  generation code: 0x%x\n"" " string_content escape_sequence ") , (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18" (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8" (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8" (binary_expression "uVar34 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar34 & 0xff0000) >> 8" (parenthesized_expression "(uVar34 & 0xff0000)" ( (binary_expression "uVar34 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar34 & 0xff00) << 8" (parenthesized_expression "(uVar34 & 0xff00)" ( (binary_expression "uVar34 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar34 << 0x18" identifier << number_literal)) ))) ;) (expression_statement "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);" (assignment_expression "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" identifier = (cast_expression "(stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" ( (binary_expression "&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2" (pointer_expression "&local_1e0->st_dev" & (field_expression "local_1e0->st_dev" identifier -> field_identifier)) + (binary_expression "((int)ppvVar28 >> 4) * 2" (parenthesized_expression "((int)ppvVar28 >> 4)" ( (binary_expression "(int)ppvVar28 >> 4" (cast_expression "(int)ppvVar28" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) * number_literal)) )))) ;) (for_statement "for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }" for ( (assignment_expression "psVar14 = local_1e0" identifier = identifier) ; (comma_expression "lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14" (assignment_expression "lVar30 = ZEXT48(local_1e0) << 0x20" identifier = (binary_expression "ZEXT48(local_1e0) << 0x20" (call_expression "ZEXT48(local_1e0)" identifier (argument_list "(local_1e0)" ( identifier ))) << number_literal)) , (comma_expression "local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14" (assignment_expression "local_1e0 = (stat64 *)" [primary]"" identifier = (cast_expression "(stat64 *)" [primary]"" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "" [primary]"" " string_content "))) , (binary_expression "local_1d4 != psVar14" identifier != identifier))) ; (assignment_expression "psVar14 = (stat64 *)&psVar14->st_mode" identifier = (cast_expression "(stat64 *)&psVar14->st_mode" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->st_mode" & (field_expression "psVar14->st_mode" identifier -> field_identifier)))) ) (compound_statement "{\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }" { (expression_statement "cVar4 = *(char *)((int)&psVar14->__pad1 + 1);" (assignment_expression "cVar4 = *(char *)((int)&psVar14->__pad1 + 1)" identifier = (pointer_expression "*(char *)((int)&psVar14->__pad1 + 1)" * (cast_expression "(char *)((int)&psVar14->__pad1 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 1)" ( (binary_expression "(int)&psVar14->__pad1 + 1" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "pcVar10 = "";" (assignment_expression "pcVar10 = """ identifier = (string_literal """" " ")) ;) (if_statement "if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              pcVar10 = " [primary]";\n            }" { (expression_statement "pcVar10 = " [primary]";" (assignment_expression "pcVar10 = " [primary]"" identifier = (string_literal "" [primary]"" " string_content ")) ;) })) (expression_statement "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);" (call_expression "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10)" identifier (argument_list "(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10)" ( number_literal , (string_literal ""   subenclosure identifier: %d%s\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);" (assignment_expression "uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2)" identifier = (binary_expression "(uint)*(byte *)((int)&psVar14->__pad1 + 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)((int)&psVar14->__pad1 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 2)" ( (binary_expression "(int)&psVar14->__pad1 + 2" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) ))))) ;) (for_statement "for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" for ( (assignment_expression "puVar11 = &DAT_00016080" identifier = (pointer_expression "&DAT_00016080" & identifier)) ; (comma_expression "pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0" (assignment_expression "pcVar10 = (char *)puVar11[1]" identifier = (cast_expression "(char *)puVar11[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar11[1]" identifier [ number_literal ]))) , (binary_expression "pcVar10 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ; (assignment_expression "puVar11 = puVar11 + 2" identifier = (binary_expression "puVar11 + 2" identifier + number_literal)) ) (compound_statement "{\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" { (if_statement "if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" if (parenthesized_expression "(uVar25 == *puVar11)" ( (binary_expression "uVar25 == *puVar11" identifier == (pointer_expression "*puVar11" * identifier)) )) (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" { (if_statement "if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }" if (parenthesized_expression "(*pcVar10 != '\0')" ( (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }" { (expression_statement "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);" (call_expression "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25)" identifier (argument_list "(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25)" ( number_literal , (string_literal ""     download microcode status: %s [0x%x]\n"" " string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3))" identifier (argument_list "(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3))" ( number_literal , (string_literal ""     download microcode additional status: 0x%x\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined1 *)((int)&psVar14->__pad1 + 3)" * (cast_expression "(undefined1 *)((int)&psVar14->__pad1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 3)" ( (binary_expression "(int)&psVar14->__pad1 + 3" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar7 = extraout_EDX_15;" (assignment_expression "uVar7 = extraout_EDX_15" identifier = identifier) ;) (goto_statement "goto LAB_0001225d;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) })) (expression_statement "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3))" identifier (argument_list "(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3))" ( number_literal , (string_literal ""     download microcode status: 0x%x [additional status: 0x%x]\n"" " string_content escape_sequence ") , identifier , (pointer_expression "*(undefined1 *)((int)&psVar14->__pad1 + 3)" * (cast_expression "(undefined1 *)((int)&psVar14->__pad1 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->__pad1 + 3)" ( (binary_expression "(int)&psVar14->__pad1 + 3" (cast_expression "(int)&psVar14->__pad1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->__pad1" & (field_expression "psVar14->__pad1" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar7 = extraout_EDX_13;" (assignment_expression "uVar7 = extraout_EDX_13" identifier = identifier) ;) (labeled_statement "LAB_0001225d:\n            uVar25 = psVar14->__st_ino;" statement_identifier : (expression_statement "uVar25 = psVar14->__st_ino;" (assignment_expression "uVar25 = psVar14->__st_ino" identifier = (field_expression "psVar14->__st_ino" identifier -> field_identifier)) ;)) (expression_statement "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);" (call_expression "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7)" identifier (argument_list "(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7)" ( number_literal , (string_literal ""     download microcode maximum size: %u bytes\n"" " string_content escape_sequence ") , (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" ( (binary_expression "uVar25 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" ( (binary_expression "uVar25 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar25 << 0x18" identifier << number_literal)) , identifier ))) ;) (expression_statement "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));" (call_expression "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3))" identifier (argument_list "(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3))" ( number_literal , (string_literal ""     download microcode expected buffer id: 0x%x\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined1 *)((int)&psVar14->st_mode + 3)" * (cast_expression "(undefined1 *)((int)&psVar14->st_mode + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar14->st_mode + 3)" ( (binary_expression "(int)&psVar14->st_mode + 3" (cast_expression "(int)&psVar14->st_mode" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar14->st_mode" & (field_expression "psVar14->st_mode" identifier -> field_identifier))) + number_literal) )))) ))) ;) (expression_statement "uVar25 = psVar14->st_nlink;" (assignment_expression "uVar25 = psVar14->st_nlink" identifier = (field_expression "psVar14->st_nlink" identifier -> field_identifier)) ;) (expression_statement "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);" (call_expression "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18)" identifier (argument_list "(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18)" ( number_literal , (string_literal ""     download microcode expected buffer id offset: %u\n"" " string_content escape_sequence ") , (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" ( (binary_expression "uVar25 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" ( (binary_expression "uVar25 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar25 << 0x18" identifier << number_literal)) ))) ;) (expression_statement "local_1e0 = extraout_EDX_14;" (assignment_expression "local_1e0 = extraout_EDX_14" identifier = identifier) ;) })) }) (else_clause "else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" else (compound_statement "{\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" { (expression_statement "puVar24 = local_19c;" (assignment_expression "puVar24 = local_19c" identifier = identifier) ;) (if_statement "if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" if (parenthesized_expression "((byte)local_1d4 == '\0')" ( (binary_expression "(byte)local_1d4 == '\0'" (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }" { (labeled_statement "LAB_0001201a:\n            psVar14 = (stat64 *)0x0;" statement_identifier : (expression_statement "psVar14 = (stat64 *)0x0;" (assignment_expression "psVar14 = (stat64 *)0x0" identifier = (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" identifier = (cast_expression "(void **)0x0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "puVar16 = puVar24;" (assignment_expression "puVar16 = puVar24" identifier = identifier) ;) }) (else_clause "else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" else (compound_statement "{\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (if_statement "if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }" if (parenthesized_expression "(0 < (int)local_1a8)" ( (binary_expression "0 < (int)local_1a8" number_literal < (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }" { (for_statement "for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }" for ( ; (binary_expression "iVar15 < (int)local_1a0" identifier < (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier)) ; (assignment_expression "iVar15 = (int)ppvVar18 + iVar15" identifier = (binary_expression "(int)ppvVar18 + iVar15" (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier) + identifier)) ) (compound_statement "{\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }" { (expression_statement "ppvVar8 = local_1a8;" (assignment_expression "ppvVar8 = local_1a8" identifier = identifier) ;) (expression_statement "ppvVar18 = local_1a8;" (assignment_expression "ppvVar18 = local_1a8" identifier = identifier) ;) (if_statement "if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }" if (parenthesized_expression "((int)local_1a0 - iVar15 <= (int)local_1a8)" ( (binary_expression "(int)local_1a0 - iVar15 <= (int)local_1a8" (binary_expression "(int)local_1a0 - iVar15" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) <= (cast_expression "(int)local_1a8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }" { (expression_statement "local_1e9 = (byte)local_1d4;" (assignment_expression "local_1e9 = (byte)local_1d4" identifier = (cast_expression "(byte)local_1d4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "ppvVar8 = (void **)((uint)local_1d4 & 0xff);" (assignment_expression "ppvVar8 = (void **)((uint)local_1d4 & 0xff)" identifier = (cast_expression "(void **)((uint)local_1d4 & 0xff)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((uint)local_1d4 & 0xff)" ( (binary_expression "(uint)local_1d4 & 0xff" (cast_expression "(uint)local_1d4" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "ppvVar18 = (void **)((int)local_1a0 - iVar15);" (assignment_expression "ppvVar18 = (void **)((int)local_1a0 - iVar15)" identifier = (cast_expression "(void **)((int)local_1a0 - iVar15)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)local_1a0 - iVar15)" ( (binary_expression "(int)local_1a0 - iVar15" (cast_expression "(int)local_1a0" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) )))) ;) })) (if_statement "if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }" { (expression_statement "ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);" (assignment_expression "ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" identifier = (cast_expression "(void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" identifier (argument_list "("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" ( (string_literal ""bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"" " string_content escape_sequence ") , identifier , identifier , identifier , identifier , identifier , identifier , identifier ))))) ;) })) (expression_statement "ppvVar36 = (void **)&local_1b0;" (assignment_expression "ppvVar36 = (void **)&local_1b0" identifier = (cast_expression "(void **)&local_1b0" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&local_1b0" & identifier))) ;) (expression_statement "ppvVar27 = ppvVar8;" (assignment_expression "ppvVar27 = ppvVar8" identifier = identifier) ;) (expression_statement "lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);" (assignment_expression "lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" identifier = (call_expression "FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" identifier (argument_list "((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" ( (binary_expression "(int)&local_1d8->st_dev + iVar15" (cast_expression "(int)&local_1d8->st_dev" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_1d8->st_dev" & (field_expression "local_1d8->st_dev" identifier -> field_identifier))) + identifier) , identifier , (pointer_expression "&local_1bc" & identifier) , identifier , identifier )))) ;) (expression_statement "uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)lVar30 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar30 >> 0x20)" ( (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)lVar30 != 0) goto LAB_00011e81;" if (parenthesized_expression "((int)lVar30 != 0)" ( (binary_expression "(int)lVar30 != 0" (cast_expression "(int)lVar30" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) })) (expression_statement "puVar24 = (undefined *)0x0;" (assignment_expression "puVar24 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "lVar30 = (ulonglong)uVar25 << 0x20;" (assignment_expression "lVar30 = (ulonglong)uVar25 << 0x20" identifier = (binary_expression "(ulonglong)uVar25 << 0x20" (cast_expression "(ulonglong)uVar25" ( (type_descriptor "ulonglong" type_identifier) ) identifier) << number_literal)) ;) (if_statement "if (local_1b0._3_1_ == '\0') goto LAB_00011e81;" if (parenthesized_expression "(local_1b0._3_1_ == '\0')" ( (binary_expression "local_1b0._3_1_ == '\0'" (field_expression "local_1b0._3_1_" identifier . field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00011e81;" goto statement_identifier ;)) (expression_statement "local_19c = (undefined *)0xf;" (assignment_expression "local_19c = (undefined *)0xf" identifier = (cast_expression "(undefined *)0xf" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }" { (expression_statement "pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);" (call_expression "pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27)" identifier (argument_list "("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27)" ( (string_literal ""sending Activate deferred microcode [0xf]\n"" " string_content escape_sequence ") , identifier , identifier , identifier ))) ;) })) (goto_statement "goto LAB_0001201a;" goto statement_identifier ;) })) (expression_statement "psVar14 = local_1d8;" (assignment_expression "psVar14 = local_1d8" identifier = identifier) ;) (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" identifier = identifier) ;) (if_statement "if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }" if (parenthesized_expression "(local_188 != 0)" ( (binary_expression "local_188 != 0" identifier != number_literal) )) (compound_statement "{\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }" { (expression_statement "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);" (call_expression "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0)" identifier (argument_list "("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0)" ( (string_literal ""single: mode=0x%x, id=%d, offset=%d, len=%d\n"" " string_content escape_sequence ") , identifier , identifier , identifier , identifier ))) ;) (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" identifier = identifier) ;) (expression_statement "puVar16 = extraout_ECX_12;" (assignment_expression "puVar16 = extraout_ECX_12" identifier = identifier) ;) })) }))) (expression_statement "lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);" (assignment_expression "lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" identifier = (call_expression "FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" identifier (argument_list "(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" ( identifier , identifier , (pointer_expression "&local_1bc" & identifier) , identifier , number_literal , (pointer_expression "&local_1b0" & identifier) , identifier , identifier )))) ;) }))) }))) }) (else_clause "else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" else (compound_statement "{\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" { (expression_statement "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);" (call_expression "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36)" identifier (argument_list "("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36)" ( (string_literal ""Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "lVar30 = (ulonglong)extraout_EDX_11 << 0x20;" (assignment_expression "lVar30 = (ulonglong)extraout_EDX_11 << 0x20" identifier = (binary_expression "(ulonglong)extraout_EDX_11 << 0x20" (cast_expression "(ulonglong)extraout_EDX_11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) << number_literal)) ;) }))) (labeled_statement "LAB_00011e81:\n    uVar20 = (undefined4)lVar30;" statement_identifier : (expression_statement "uVar20 = (undefined4)lVar30;" (assignment_expression "uVar20 = (undefined4)lVar30" identifier = (cast_expression "(undefined4)lVar30" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;)) (if_statement "if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }" if (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" ( (binary_expression "local_1d8 != (stat64 *)0x0" identifier != (cast_expression "(stat64 *)0x0" ( (type_descriptor "stat64 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }" { (labeled_statement "LAB_000118d4:\n      free(local_1d8);" statement_identifier : (expression_statement "free(local_1d8);" (call_expression "free(local_1d8)" identifier (argument_list "(local_1d8)" ( identifier ))) ;)) (expression_statement "lVar30 = CONCAT44(extraout_EDX_00,uVar20);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_00,uVar20)" identifier = (call_expression "CONCAT44(extraout_EDX_00,uVar20)" identifier (argument_list "(extraout_EDX_00,uVar20)" ( identifier , identifier )))) ;) })) (labeled_statement "LAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);" statement_identifier : (expression_statement "uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20)" identifier = (call_expression "(undefined4)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(undefined4)" ( identifier )) (argument_list "((ulonglong)lVar30 >> 0x20)" ( (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;)) (expression_statement "iVar15 = (int)lVar30;" (assignment_expression "iVar15 = (int)lVar30" identifier = (cast_expression "(int)lVar30" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }" if (parenthesized_expression "(local_1b8 != (void *)0x0)" ( (binary_expression "local_1b8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }" { (expression_statement "free(local_1b8);" (call_expression "free(local_1b8)" identifier (argument_list "(local_1b8)" ( identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_01;" (assignment_expression "uVar7 = extraout_EDX_01" identifier = identifier) ;) })) (if_statement "if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }" if (parenthesized_expression "(local_1c0 != (void *)0x0)" ( (binary_expression "local_1c0 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }" { (expression_statement "free(local_1c0);" (call_expression "free(local_1c0)" identifier (argument_list "(local_1c0)" ( identifier ))) ;) (expression_statement "uVar7 = extraout_EDX_02;" (assignment_expression "uVar7 = extraout_EDX_02" identifier = identifier) ;) })) (expression_statement "uVar33 = CONCAT44(uVar7,iVar15);" (assignment_expression "uVar33 = CONCAT44(uVar7,iVar15)" identifier = (call_expression "CONCAT44(uVar7,iVar15)" identifier (argument_list "(uVar7,iVar15)" ( identifier , identifier )))) ;) (if_statement "if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }" if (parenthesized_expression "(-1 < (int)local_1dc)" ( (binary_expression "-1 < (int)local_1dc" number_literal < (cast_expression "(int)local_1dc" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }" { (expression_statement "uVar31 = sg_cmds_close_device(local_1dc);" (assignment_expression "uVar31 = sg_cmds_close_device(local_1dc)" identifier = (call_expression "sg_cmds_close_device(local_1dc)" identifier (argument_list "(local_1dc)" ( identifier )))) ;) (expression_statement "uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);" (assignment_expression "uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15)" identifier = (call_expression "CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15)" identifier (argument_list "((int)((ulonglong)uVar31 >> 0x20),iVar15)" ( (cast_expression "(int)((ulonglong)uVar31 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar31 >> 0x20)" ( (binary_expression "(ulonglong)uVar31 >> 0x20" (cast_expression "(ulonglong)uVar31" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , identifier )))) ;) (if_statement "if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }" if (parenthesized_expression "((int)uVar31 < 0)" ( (binary_expression "(int)uVar31 < 0" (cast_expression "(int)uVar31" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }" { (expression_statement "iVar13 = -(int)uVar31;" (assignment_expression "iVar13 = -(int)uVar31" identifier = (unary_expression "-(int)uVar31" - (cast_expression "(int)uVar31" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar7 = safe_strerror(iVar13);" (assignment_expression "uVar7 = safe_strerror(iVar13)" identifier = (call_expression "safe_strerror(iVar13)" identifier (argument_list "(iVar13)" ( identifier )))) ;) (expression_statement "pr2serr("close error: %s\n",uVar7);" (call_expression "pr2serr("close error: %s\n",uVar7)" identifier (argument_list "("close error: %s\n",uVar7)" ( (string_literal ""close error: %s\n"" " string_content escape_sequence ") , identifier ))) ;) (expression_statement "uVar33 = CONCAT44(extraout_EDX_04,iVar15);" (assignment_expression "uVar33 = CONCAT44(extraout_EDX_04,iVar15)" identifier = (call_expression "CONCAT44(extraout_EDX_04,iVar15)" identifier (argument_list "(extraout_EDX_04,iVar15)" ( identifier , identifier )))) ;) (if_statement "if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }" if (parenthesized_expression "(iVar15 == 0)" ( (binary_expression "iVar15 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar33 = sg_convert_errno(iVar13);\n        }" { (expression_statement "uVar33 = sg_convert_errno(iVar13);" (assignment_expression "uVar33 = sg_convert_errno(iVar13)" identifier = (call_expression "sg_convert_errno(iVar13)" identifier (argument_list "(iVar13)" ( identifier )))) ;) })) })) })) (expression_statement "ppvVar18 = (void **)uVar33;" (assignment_expression "ppvVar18 = (void **)uVar33" identifier = (cast_expression "(void **)uVar33" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (if_statement "if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" if (parenthesized_expression "((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0'))" ( (binary_expression "(local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')" (parenthesized_expression "(local_188 == 0)" ( (binary_expression "local_188 == 0" identifier == number_literal) )) && (parenthesized_expression "(cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')" ( (comma_expression "cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0'" (assignment_expression "cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" identifier = (call_expression "sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" identifier (argument_list "("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" ( (string_literal ""sg_ses_mocrocode failed: "" " string_content ") , identifier , (cast_expression "(int)((ulonglong)uVar33 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar33 >> 0x20)" ( (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) )))) , (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" { (expression_statement "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");" (call_expression "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" identifier (argument_list "("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" ( (string_literal ""Some error occurred, try again with \'-v\' or \'-vv\' for more information\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) })) (if_statement "if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }" if (parenthesized_expression "((int)ppvVar18 < 0)" ( (binary_expression "(int)ppvVar18 < 0" (cast_expression "(int)ppvVar18" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      ppvVar18 = (void **)0x63;\n    }" { (expression_statement "ppvVar18 = (void **)0x63;" (assignment_expression "ppvVar18 = (void **)0x63" identifier = (cast_expression "(void **)0x63" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit (function_definition TYPE (pointer_declarator * (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (pointer_expression & IDENT))) ;) (for_statement for ( (assignment_expression IDENT = LIT) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression (field_expression (field_expression IDENT . field_identifier) . field_identifier) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (string_literal " string_content ") , (pointer_expression & IDENT) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence ") ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content escape_sequence "))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;)) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , (string_literal " string_content ") , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;))))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;)) }))) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , (pointer_expression & IDENT) , IDENT , IDENT ))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (unary_expression - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (unary_expression - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) & (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) ^ LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT , (string_literal " string_content ") , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) & LIT) )) == LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )) - (field_expression (field_expression IDENT . field_identifier) . field_identifier))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) , (field_expression (field_expression IDENT . field_identifier) . field_identifier) ))) != (call_expression IDENT (argument_list ( IDENT , (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (field_expression IDENT . field_identifier))) ))) )))) )) != (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (field_expression IDENT . field_identifier))) )))) ))) < LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (field_expression IDENT . field_identifier)) - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , (cast_expression ( (type_descriptor TYPE) ) (field_expression IDENT . field_identifier)) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (goto_statement goto statement_identifier ;))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , LIT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( IDENT , IDENT , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence string_content ")) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence string_content ")) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (switch_statement switch (parenthesized_expression ( IDENT )) (compound_statement { (case_statement case LIT :) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (break_statement break ;)) (case_statement default : (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (char_literal ' escape_sequence ')) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , LIT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression IDENT + LIT) , LIT , IDENT )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (char_literal ' escape_sequence ')) ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (char_literal ' escape_sequence ')) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + LIT) + (binary_expression (pointer_expression * IDENT) * LIT)) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (unary_expression ~ IDENT) - LIT) )))) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) }))) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;)) (case_statement case LIT : (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = BOOL) ;)) })) }) while (parenthesized_expression ( BOOL )) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence escape_sequence ") ))) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;)) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) == (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , IDENT , LIT , LIT , (pointer_expression & IDENT) , LIT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression LIT - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT)) ))) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , LIT , IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (for_statement for ( (assignment_expression IDENT = LIT) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & (field_expression IDENT -> field_identifier)))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT) )))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT)) ))) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , LIT , IDENT , IDENT ))))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (goto_statement goto statement_identifier ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (char_literal ' escape_sequence ')) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & (field_expression IDENT -> field_identifier)) + (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )) * LIT)) )))) ;) (for_statement for ( (assignment_expression IDENT = IDENT) ; (comma_expression (assignment_expression IDENT = (binary_expression (call_expression IDENT (argument_list ( IDENT ))) << LIT)) , (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) , (binary_expression IDENT != IDENT))) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & (field_expression IDENT -> field_identifier)))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (string_literal " ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) ))))) ;) (for_statement for ( (assignment_expression IDENT = (pointer_expression & IDENT)) ; (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;) })) })) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (field_expression IDENT -> field_identifier)) ;)) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = (field_expression IDENT -> field_identifier)) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (for_statement for ( ; (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ; (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - IDENT) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (pointer_expression & IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & (field_expression IDENT -> field_identifier))) + IDENT) , IDENT , (pointer_expression & IDENT) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) << LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT ))) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , IDENT , LIT , (pointer_expression & IDENT) , IDENT , IDENT )))) ;) }))) }))) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) << LIT)) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) })) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") , IDENT , (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) )))) , (binary_expression IDENT == (char_literal ' escape_sequence '))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) ;) })) }) while (parenthesized_expression ( BOOL )) ;)) })))
(function_definition "void ** FUN_00011260(int param_1,stat64 *param_2)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}" (primitive_type "void") (pointer_declarator "** FUN_00011260(int param_1,stat64 *param_2)" (* "*") (pointer_declarator "* FUN_00011260(int param_1,stat64 *param_2)" (* "*") (function_declarator "FUN_00011260(int param_1,stat64 *param_2)" (identifier "FUN_00011260") (parameter_list "(int param_1,stat64 *param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "stat64 *param_2" (type_identifier "stat64") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))))) (compound_statement "{\n  ushort uVar1;\n  bool bVar2;\n  undefined *puVar3;\n  char cVar4;\n  char *pcVar5;\n  void **ppvVar6;\n  undefined4 uVar7;\n  void **ppvVar8;\n  int *piVar9;\n  char *pcVar10;\n  uint *puVar11;\n  void **ppvVar12;\n  int iVar13;\n  stat64 *extraout_ECX;\n  undefined4 extraout_ECX_00;\n  undefined4 extraout_ECX_01;\n  undefined4 extraout_ECX_02;\n  void **extraout_ECX_03;\n  stat64 *extraout_ECX_04;\n  stat64 *psVar14;\n  int iVar15;\n  undefined *puVar16;\n  undefined *extraout_ECX_05;\n  undefined *extraout_ECX_06;\n  undefined *extraout_ECX_07;\n  undefined *extraout_ECX_08;\n  void **extraout_ECX_09;\n  undefined4 extraout_ECX_10;\n  undefined4 extraout_ECX_11;\n  undefined *extraout_ECX_12;\n  undefined4 extraout_ECX_13;\n  byte bVar17;\n  undefined4 extraout_EDX;\n  undefined4 extraout_EDX_00;\n  undefined4 extraout_EDX_01;\n  undefined4 extraout_EDX_02;\n  stat64 *extraout_EDX_03;\n  undefined4 extraout_EDX_04;\n  uint extraout_EDX_05;\n  undefined4 extraout_EDX_06;\n  undefined4 extraout_EDX_07;\n  undefined4 extraout_EDX_08;\n  uint extraout_EDX_09;\n  undefined4 extraout_EDX_10;\n  uint extraout_EDX_11;\n  undefined4 extraout_EDX_12;\n  undefined4 extraout_EDX_13;\n  stat64 *extraout_EDX_14;\n  undefined4 extraout_EDX_15;\n  undefined4 extraout_EDX_16;\n  undefined4 extraout_EDX_17;\n  undefined4 extraout_EDX_18;\n  undefined4 extraout_EDX_19;\n  void **ppvVar18;\n  undefined **ppuVar19;\n  undefined4 uVar20;\n  undefined4 *puVar21;\n  void **ppvVar22;\n  undefined4 uVar23;\n  undefined *puVar24;\n  uint uVar25;\n  char *pcVar26;\n  void **ppvVar27;\n  void **ppvVar28;\n  int in_GS_OFFSET;\n  byte bVar29;\n  longlong lVar30;\n  undefined8 uVar31;\n  __off64_t _Var32;\n  undefined8 uVar33;\n  uint uVar34;\n  undefined4 uVar35;\n  void **ppvVar36;\n  stat64 *psVar37;\n  stat64 *psVar38;\n  char *local_1f0;\n  char local_1e9;\n  int local_1e8;\n  stat64 *local_1e0;\n  undefined **local_1dc;\n  stat64 *local_1d8;\n  stat64 *local_1d4;\n  int local_1c4;\n  void *local_1c0;\n  undefined4 local_1bc;\n  void *local_1b8;\n  undefined4 local_1b4;\n  undefined4 local_1b0;\n  char local_1ac;\n  void **local_1a8;\n  uint local_1a4;\n  void **local_1a0;\n  undefined *local_19c;\n  uint local_198;\n  uint local_194;\n  uint uStack_190;\n  void **local_18c;\n  int local_188;\n  stat64 local_184;\n  stat64 local_124 [2];\n  uint local_24;\n  undefined4 *local_18;\n  \n  psVar14 = param_2;\n  iVar15 = param_1;\n  puVar16 = PTR_optarg_00015ffc;\n  bVar29 = 0;\n  local_18 = &param_1;\n  local_1d4 = param_2;\n  local_24 = *(uint *)(in_GS_OFFSET + 0x14);\n  local_1c0 = (void *)0x0;\n  local_1bc = 0;\n  local_1b8 = (void *)0x0;\n  local_1b4 = 0;\n  local_1f0 = (char *)0x0;\n  ppvVar18 = (void **)&local_1b0;\n  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }\n  psVar37 = &local_184;\n  local_1e8 = 0;\n  local_1dc = &PTR_DAT_00016160;\n  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";\n  local_1e9 = '\0';\n  bVar2 = false;\ncode_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );\ncode_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);\n  if ((int)local_18c < 0) goto code_r0x0001141f;\n  goto code_r0x00011330;\ncode_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");\ncode_r0x00011606:\n  ppvVar18 = (void **)0x1;\n  local_1e0 = (stat64 *)pcVar10;\nLAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "char cVar4;" (primitive_type "char") (identifier "cVar4") (; ";")) (declaration "char *pcVar5;" (primitive_type "char") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "void **ppvVar6;" (primitive_type "void") (pointer_declarator "**ppvVar6" (* "*") (pointer_declarator "*ppvVar6" (* "*") (identifier "ppvVar6"))) (; ";")) (declaration "undefined4 uVar7;" (type_identifier "undefined4") (identifier "uVar7") (; ";")) (declaration "void **ppvVar8;" (primitive_type "void") (pointer_declarator "**ppvVar8" (* "*") (pointer_declarator "*ppvVar8" (* "*") (identifier "ppvVar8"))) (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "char *pcVar10;" (primitive_type "char") (pointer_declarator "*pcVar10" (* "*") (identifier "pcVar10")) (; ";")) (declaration "uint *puVar11;" (type_identifier "uint") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "void **ppvVar12;" (primitive_type "void") (pointer_declarator "**ppvVar12" (* "*") (pointer_declarator "*ppvVar12" (* "*") (identifier "ppvVar12"))) (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "stat64 *extraout_ECX;" (type_identifier "stat64") (pointer_declarator "*extraout_ECX" (* "*") (identifier "extraout_ECX")) (; ";")) (declaration "undefined4 extraout_ECX_00;" (type_identifier "undefined4") (identifier "extraout_ECX_00") (; ";")) (declaration "undefined4 extraout_ECX_01;" (type_identifier "undefined4") (identifier "extraout_ECX_01") (; ";")) (declaration "undefined4 extraout_ECX_02;" (type_identifier "undefined4") (identifier "extraout_ECX_02") (; ";")) (declaration "void **extraout_ECX_03;" (primitive_type "void") (pointer_declarator "**extraout_ECX_03" (* "*") (pointer_declarator "*extraout_ECX_03" (* "*") (identifier "extraout_ECX_03"))) (; ";")) (declaration "stat64 *extraout_ECX_04;" (type_identifier "stat64") (pointer_declarator "*extraout_ECX_04" (* "*") (identifier "extraout_ECX_04")) (; ";")) (declaration "stat64 *psVar14;" (type_identifier "stat64") (pointer_declarator "*psVar14" (* "*") (identifier "psVar14")) (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (declaration "undefined *puVar16;" (type_identifier "undefined") (pointer_declarator "*puVar16" (* "*") (identifier "puVar16")) (; ";")) (declaration "undefined *extraout_ECX_05;" (type_identifier "undefined") (pointer_declarator "*extraout_ECX_05" (* "*") (identifier "extraout_ECX_05")) (; ";")) (declaration "undefined *extraout_ECX_06;" (type_identifier "undefined") (pointer_declarator "*extraout_ECX_06" (* "*") (identifier "extraout_ECX_06")) (; ";")) (declaration "undefined *extraout_ECX_07;" (type_identifier "undefined") (pointer_declarator "*extraout_ECX_07" (* "*") (identifier "extraout_ECX_07")) (; ";")) (declaration "undefined *extraout_ECX_08;" (type_identifier "undefined") (pointer_declarator "*extraout_ECX_08" (* "*") (identifier "extraout_ECX_08")) (; ";")) (declaration "void **extraout_ECX_09;" (primitive_type "void") (pointer_declarator "**extraout_ECX_09" (* "*") (pointer_declarator "*extraout_ECX_09" (* "*") (identifier "extraout_ECX_09"))) (; ";")) (declaration "undefined4 extraout_ECX_10;" (type_identifier "undefined4") (identifier "extraout_ECX_10") (; ";")) (declaration "undefined4 extraout_ECX_11;" (type_identifier "undefined4") (identifier "extraout_ECX_11") (; ";")) (declaration "undefined *extraout_ECX_12;" (type_identifier "undefined") (pointer_declarator "*extraout_ECX_12" (* "*") (identifier "extraout_ECX_12")) (; ";")) (declaration "undefined4 extraout_ECX_13;" (type_identifier "undefined4") (identifier "extraout_ECX_13") (; ";")) (declaration "byte bVar17;" (type_identifier "byte") (identifier "bVar17") (; ";")) (declaration "undefined4 extraout_EDX;" (type_identifier "undefined4") (identifier "extraout_EDX") (; ";")) (declaration "undefined4 extraout_EDX_00;" (type_identifier "undefined4") (identifier "extraout_EDX_00") (; ";")) (declaration "undefined4 extraout_EDX_01;" (type_identifier "undefined4") (identifier "extraout_EDX_01") (; ";")) (declaration "undefined4 extraout_EDX_02;" (type_identifier "undefined4") (identifier "extraout_EDX_02") (; ";")) (declaration "stat64 *extraout_EDX_03;" (type_identifier "stat64") (pointer_declarator "*extraout_EDX_03" (* "*") (identifier "extraout_EDX_03")) (; ";")) (declaration "undefined4 extraout_EDX_04;" (type_identifier "undefined4") (identifier "extraout_EDX_04") (; ";")) (declaration "uint extraout_EDX_05;" (type_identifier "uint") (identifier "extraout_EDX_05") (; ";")) (declaration "undefined4 extraout_EDX_06;" (type_identifier "undefined4") (identifier "extraout_EDX_06") (; ";")) (declaration "undefined4 extraout_EDX_07;" (type_identifier "undefined4") (identifier "extraout_EDX_07") (; ";")) (declaration "undefined4 extraout_EDX_08;" (type_identifier "undefined4") (identifier "extraout_EDX_08") (; ";")) (declaration "uint extraout_EDX_09;" (type_identifier "uint") (identifier "extraout_EDX_09") (; ";")) (declaration "undefined4 extraout_EDX_10;" (type_identifier "undefined4") (identifier "extraout_EDX_10") (; ";")) (declaration "uint extraout_EDX_11;" (type_identifier "uint") (identifier "extraout_EDX_11") (; ";")) (declaration "undefined4 extraout_EDX_12;" (type_identifier "undefined4") (identifier "extraout_EDX_12") (; ";")) (declaration "undefined4 extraout_EDX_13;" (type_identifier "undefined4") (identifier "extraout_EDX_13") (; ";")) (declaration "stat64 *extraout_EDX_14;" (type_identifier "stat64") (pointer_declarator "*extraout_EDX_14" (* "*") (identifier "extraout_EDX_14")) (; ";")) (declaration "undefined4 extraout_EDX_15;" (type_identifier "undefined4") (identifier "extraout_EDX_15") (; ";")) (declaration "undefined4 extraout_EDX_16;" (type_identifier "undefined4") (identifier "extraout_EDX_16") (; ";")) (declaration "undefined4 extraout_EDX_17;" (type_identifier "undefined4") (identifier "extraout_EDX_17") (; ";")) (declaration "undefined4 extraout_EDX_18;" (type_identifier "undefined4") (identifier "extraout_EDX_18") (; ";")) (declaration "undefined4 extraout_EDX_19;" (type_identifier "undefined4") (identifier "extraout_EDX_19") (; ";")) (declaration "void **ppvVar18;" (primitive_type "void") (pointer_declarator "**ppvVar18" (* "*") (pointer_declarator "*ppvVar18" (* "*") (identifier "ppvVar18"))) (; ";")) (declaration "undefined **ppuVar19;" (type_identifier "undefined") (pointer_declarator "**ppuVar19" (* "*") (pointer_declarator "*ppuVar19" (* "*") (identifier "ppuVar19"))) (; ";")) (declaration "undefined4 uVar20;" (type_identifier "undefined4") (identifier "uVar20") (; ";")) (declaration "undefined4 *puVar21;" (type_identifier "undefined4") (pointer_declarator "*puVar21" (* "*") (identifier "puVar21")) (; ";")) (declaration "void **ppvVar22;" (primitive_type "void") (pointer_declarator "**ppvVar22" (* "*") (pointer_declarator "*ppvVar22" (* "*") (identifier "ppvVar22"))) (; ";")) (declaration "undefined4 uVar23;" (type_identifier "undefined4") (identifier "uVar23") (; ";")) (declaration "undefined *puVar24;" (type_identifier "undefined") (pointer_declarator "*puVar24" (* "*") (identifier "puVar24")) (; ";")) (declaration "uint uVar25;" (type_identifier "uint") (identifier "uVar25") (; ";")) (declaration "char *pcVar26;" (primitive_type "char") (pointer_declarator "*pcVar26" (* "*") (identifier "pcVar26")) (; ";")) (declaration "void **ppvVar27;" (primitive_type "void") (pointer_declarator "**ppvVar27" (* "*") (pointer_declarator "*ppvVar27" (* "*") (identifier "ppvVar27"))) (; ";")) (declaration "void **ppvVar28;" (primitive_type "void") (pointer_declarator "**ppvVar28" (* "*") (pointer_declarator "*ppvVar28" (* "*") (identifier "ppvVar28"))) (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "byte bVar29;" (type_identifier "byte") (identifier "bVar29") (; ";")) (declaration "longlong lVar30;" (type_identifier "longlong") (identifier "lVar30") (; ";")) (declaration "undefined8 uVar31;" (type_identifier "undefined8") (identifier "uVar31") (; ";")) (declaration "__off64_t _Var32;" (type_identifier "__off64_t") (identifier "_Var32") (; ";")) (declaration "undefined8 uVar33;" (type_identifier "undefined8") (identifier "uVar33") (; ";")) (declaration "uint uVar34;" (type_identifier "uint") (identifier "uVar34") (; ";")) (declaration "undefined4 uVar35;" (type_identifier "undefined4") (identifier "uVar35") (; ";")) (declaration "void **ppvVar36;" (primitive_type "void") (pointer_declarator "**ppvVar36" (* "*") (pointer_declarator "*ppvVar36" (* "*") (identifier "ppvVar36"))) (; ";")) (declaration "stat64 *psVar37;" (type_identifier "stat64") (pointer_declarator "*psVar37" (* "*") (identifier "psVar37")) (; ";")) (declaration "stat64 *psVar38;" (type_identifier "stat64") (pointer_declarator "*psVar38" (* "*") (identifier "psVar38")) (; ";")) (declaration "char *local_1f0;" (primitive_type "char") (pointer_declarator "*local_1f0" (* "*") (identifier "local_1f0")) (; ";")) (declaration "char local_1e9;" (primitive_type "char") (identifier "local_1e9") (; ";")) (declaration "int local_1e8;" (primitive_type "int") (identifier "local_1e8") (; ";")) (declaration "stat64 *local_1e0;" (type_identifier "stat64") (pointer_declarator "*local_1e0" (* "*") (identifier "local_1e0")) (; ";")) (declaration "undefined **local_1dc;" (type_identifier "undefined") (pointer_declarator "**local_1dc" (* "*") (pointer_declarator "*local_1dc" (* "*") (identifier "local_1dc"))) (; ";")) (declaration "stat64 *local_1d8;" (type_identifier "stat64") (pointer_declarator "*local_1d8" (* "*") (identifier "local_1d8")) (; ";")) (declaration "stat64 *local_1d4;" (type_identifier "stat64") (pointer_declarator "*local_1d4" (* "*") (identifier "local_1d4")) (; ";")) (declaration "int local_1c4;" (primitive_type "int") (identifier "local_1c4") (; ";")) (declaration "void *local_1c0;" (primitive_type "void") (pointer_declarator "*local_1c0" (* "*") (identifier "local_1c0")) (; ";")) (declaration "undefined4 local_1bc;" (type_identifier "undefined4") (identifier "local_1bc") (; ";")) (declaration "void *local_1b8;" (primitive_type "void") (pointer_declarator "*local_1b8" (* "*") (identifier "local_1b8")) (; ";")) (declaration "undefined4 local_1b4;" (type_identifier "undefined4") (identifier "local_1b4") (; ";")) (declaration "undefined4 local_1b0;" (type_identifier "undefined4") (identifier "local_1b0") (; ";")) (declaration "char local_1ac;" (primitive_type "char") (identifier "local_1ac") (; ";")) (declaration "void **local_1a8;" (primitive_type "void") (pointer_declarator "**local_1a8" (* "*") (pointer_declarator "*local_1a8" (* "*") (identifier "local_1a8"))) (; ";")) (declaration "uint local_1a4;" (type_identifier "uint") (identifier "local_1a4") (; ";")) (declaration "void **local_1a0;" (primitive_type "void") (pointer_declarator "**local_1a0" (* "*") (pointer_declarator "*local_1a0" (* "*") (identifier "local_1a0"))) (; ";")) (declaration "undefined *local_19c;" (type_identifier "undefined") (pointer_declarator "*local_19c" (* "*") (identifier "local_19c")) (; ";")) (declaration "uint local_198;" (type_identifier "uint") (identifier "local_198") (; ";")) (declaration "uint local_194;" (type_identifier "uint") (identifier "local_194") (; ";")) (declaration "uint uStack_190;" (type_identifier "uint") (identifier "uStack_190") (; ";")) (declaration "void **local_18c;" (primitive_type "void") (pointer_declarator "**local_18c" (* "*") (pointer_declarator "*local_18c" (* "*") (identifier "local_18c"))) (; ";")) (declaration "int local_188;" (primitive_type "int") (identifier "local_188") (; ";")) (declaration "stat64 local_184;" (type_identifier "stat64") (identifier "local_184") (; ";")) (declaration "stat64 local_124 [2];" (type_identifier "stat64") (array_declarator "local_124 [2]" (identifier "local_124") ([ "[") (number_literal "2") (] "]")) (; ";")) (declaration "uint local_24;" (type_identifier "uint") (identifier "local_24") (; ";")) (declaration "undefined4 *local_18;" (type_identifier "undefined4") (pointer_declarator "*local_18" (* "*") (identifier "local_18")) (; ";")) (expression_statement "psVar14 = param_2;" (assignment_expression "psVar14 = param_2" (identifier "psVar14") (= "=") (identifier "param_2")) (; ";")) (expression_statement "iVar15 = param_1;" (assignment_expression "iVar15 = param_1" (identifier "iVar15") (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar16 = PTR_optarg_00015ffc;" (assignment_expression "puVar16 = PTR_optarg_00015ffc" (identifier "puVar16") (= "=") (identifier "PTR_optarg_00015ffc")) (; ";")) (expression_statement "bVar29 = 0;" (assignment_expression "bVar29 = 0" (identifier "bVar29") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_18 = &param_1;" (assignment_expression "local_18 = &param_1" (identifier "local_18") (= "=") (pointer_expression "&param_1" (& "&") (identifier "param_1"))) (; ";")) (expression_statement "local_1d4 = param_2;" (assignment_expression "local_1d4 = param_2" (identifier "local_1d4") (= "=") (identifier "param_2")) (; ";")) (expression_statement "local_24 = *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_24 = *(uint *)(in_GS_OFFSET + 0x14)" (identifier "local_24") (= "=") (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "local_1c0 = (void *)0x0;" (assignment_expression "local_1c0 = (void *)0x0" (identifier "local_1c0") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_1bc = 0;" (assignment_expression "local_1bc = 0" (identifier "local_1bc") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_1b8 = (void *)0x0;" (assignment_expression "local_1b8 = (void *)0x0" (identifier "local_1b8") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_1b4 = 0;" (assignment_expression "local_1b4 = 0" (identifier "local_1b4") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_1f0 = (char *)0x0;" (assignment_expression "local_1f0 = (char *)0x0" (identifier "local_1f0") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "ppvVar18 = (void **)&local_1b0;" (assignment_expression "ppvVar18 = (void **)&local_1b0" (identifier "ppvVar18") (= "=") (cast_expression "(void **)&local_1b0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (pointer_expression "&local_1b0" (& "&") (identifier "local_1b0")))) (; ";")) (for_statement "for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }" (for "for") (( "(") (assignment_expression "iVar13 = 0xb" (identifier "iVar13") (= "=") (number_literal "0xb")) (; ";") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "iVar13 = iVar13 + -1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + -1" (identifier "iVar13") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n    *ppvVar18 = (void *)0x0;\n    ppvVar18 = ppvVar18 + 1;\n  }" ({ "{") (expression_statement "*ppvVar18 = (void *)0x0;" (assignment_expression "*ppvVar18 = (void *)0x0" (pointer_expression "*ppvVar18" (* "*") (identifier "ppvVar18")) (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "ppvVar18 = ppvVar18 + 1;" (assignment_expression "ppvVar18 = ppvVar18 + 1" (identifier "ppvVar18") (= "=") (binary_expression "ppvVar18 + 1" (identifier "ppvVar18") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "psVar37 = &local_184;" (assignment_expression "psVar37 = &local_184" (identifier "psVar37") (= "=") (pointer_expression "&local_184" (& "&") (identifier "local_184"))) (; ";")) (expression_statement "local_1e8 = 0;" (assignment_expression "local_1e8 = 0" (identifier "local_1e8") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_1dc = &PTR_DAT_00016160;" (assignment_expression "local_1dc = &PTR_DAT_00016160" (identifier "local_1dc") (= "=") (pointer_expression "&PTR_DAT_00016160" (& "&") (identifier "PTR_DAT_00016160"))) (; ";")) (expression_statement "pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";" (assignment_expression "pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV"" (identifier "pcVar10") (= "=") (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" (" """) (string_content "b:dehi:I:l:m:No:s:S:t:vV") (" """))) (; ";")) (expression_statement "local_1e9 = '\0';" (assignment_expression "local_1e9 = '\0'" (identifier "local_1e9") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (labeled_statement "code_r0x00011330:\n  do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );" (statement_identifier "code_r0x00011330") (: ":") (do_statement "do {\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    local_184.st_dev._0_4_ = 0;\n    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);\n    puVar3 = PTR_optarg_00015ffc;\n    puVar24 = PTR_optind_00015fe8;\n    local_1e0 = (stat64 *)pcVar10;\n    local_1d8 = psVar37;\n    if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }\n    switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }\n  }" ({ "{") (expression_statement "local_184.st_dev._0_4_ = 0;" (assignment_expression "local_184.st_dev._0_4_ = 0" (field_expression "local_184.st_dev._0_4_" (field_expression "local_184.st_dev" (identifier "local_184") (. ".") (field_identifier "st_dev")) (. ".") (field_identifier "_0_4_")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);" (assignment_expression "iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" (identifier "iVar13") (= "=") (call_expression "getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" (identifier "getopt_long") (argument_list "(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37)" (( "(") (identifier "iVar15") (, ",") (identifier "psVar14") (, ",") (string_literal ""b:dehi:I:l:m:No:s:S:t:vV"" (" """) (string_content "b:dehi:I:l:m:No:s:S:t:vV") (" """)) (, ",") (pointer_expression "&PTR_DAT_00016160" (& "&") (identifier "PTR_DAT_00016160")) (, ",") (identifier "psVar37") () ")")))) (; ";")) (expression_statement "puVar3 = PTR_optarg_00015ffc;" (assignment_expression "puVar3 = PTR_optarg_00015ffc" (identifier "puVar3") (= "=") (identifier "PTR_optarg_00015ffc")) (; ";")) (expression_statement "puVar24 = PTR_optind_00015fe8;" (assignment_expression "puVar24 = PTR_optind_00015fe8" (identifier "puVar24") (= "=") (identifier "PTR_optind_00015fe8")) (; ";")) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)pcVar10" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pcVar10"))) (; ";")) (expression_statement "local_1d8 = psVar37;" (assignment_expression "local_1d8 = psVar37" (identifier "local_1d8") (= "=") (identifier "psVar37")) (; ";")) (if_statement "if (iVar13 == -1) {\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }" (if "if") (parenthesized_expression "(iVar13 == -1)" (( "(") (binary_expression "iVar13 == -1" (identifier "iVar13") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }\n      iVar13 = *(int *)PTR_optind_00015fe8;\n      if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }\n      local_1e0 = (stat64 *)0x0;\n      psVar14 = extraout_ECX;\nLAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;\n      if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }\n      if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }\n      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }\n      ppvVar36 = local_1a0;\n      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }\n      uVar7 = 0;\n      iVar15 = local_188;\n      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);\n      uVar33 = CONCAT44(iVar15,uVar7);\n      if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }\n      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);\n      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);\n      if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }\n      if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }\n      local_1e0 = (stat64 *)strcmp(local_1f0,"-");\n      if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }\n      uVar34 = uVar25;\n      iVar15 = __fxstat64(3,uVar25,psVar37);\n      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }\n      lVar30 = CONCAT44(uVar7,uVar20);\n      local_1d8 = (stat64 *)0x0;\n      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;\nLAB_00011e75:\n      close(uVar25);\n      lVar30 = CONCAT44(extraout_EDX_07,uVar20);\n      goto LAB_00011e81;\n    }" ({ "{") (if_statement "if (local_1e8 != 0) {\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }" (if "if") (parenthesized_expression "(local_1e8 != 0)" (( "(") (binary_expression "local_1e8 != 0" (identifier "local_1e8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }\n        goto LAB_0001160b;\n      }" ({ "{") (if_statement "if (local_1e8 == 1) {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }\n        else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" (if "if") (parenthesized_expression "(local_1e8 == 1)" (( "(") (binary_expression "local_1e8 == 1" (identifier "local_1e8") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n        }" ({ "{") (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" (identifier "pr2serr") (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" (( "(") (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" (" """) (string_content "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]") (escape_sequence "\n") (string_content "                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]") (escape_sequence "\n") (string_content "                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]") (escape_sequence "\n") (string_content "                        [--tlength=TLEN] [--verbose] [--version]") (escape_sequence "\n") (string_content "                        DEVICE") (escape_sequence "\n") (string_content "  where:") (escape_sequence "\n") (string_content "    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic") (escape_sequence "\n") (string_content "                           command (def: 0 -> as many as possible)") (escape_sequence "\n") (string_content "                           can append ") (escape_sequence "\'") (string_content ",act") (escape_sequence "\'") (string_content " to do activate after last") (escape_sequence "\n") (string_content "    --dry-run|-d           skip SCSI commands, do everything else") (escape_sequence "\n") (string_content "    --ealsd|-e             exit after last Send Diagnostic command") (escape_sequence "\n") (string_content "    --help|-h              print out usage message then exit") (escape_sequence "\n") (string_content "    --id=ID|-i ID          buffer identifier (0 (default) to 255)") (escape_sequence "\n") (string_content "    --in=FILE|-I FILE      read from FILE (") (escape_sequence "\'") (string_content "-I -") (escape_sequence "\'") (string_content " read from stdin)") (escape_sequence "\n") (string_content "    --length=LEN|-l LEN    length in bytes to send (def: deduced from") (escape_sequence "\n") (string_content "                           FILE taking SKIP into account)") (escape_sequence "\n") (string_content "    --mode=MO|-m MO        download microcode mode, MO is number or") (escape_sequence "\n") (string_content "                           acronym (def: 0 -> ") (escape_sequence "\'") (string_content "dmc_status") (escape_sequence "\'") (string_content ")") (escape_sequence "\n") (string_content "    --non|-N               non-standard: bypass all receive diagnostic") (escape_sequence "\n") (string_content "                           results commands except after check condition") (escape_sequence "\n") (string_content "    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);") (escape_sequence "\n") (string_content "                           ignored if --bpw=CS given") (escape_sequence "\n") (string_content "    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading") (escape_sequence "\n") (string_content "    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))") (escape_sequence "\n") (string_content "    --tlength=TLEN|-t TLEN    total length of firmware in bytes") (escape_sequence "\n") (string_content "                              (def: 0). Only needed if TLEN>LEN") (escape_sequence "\n") (string_content "    --verbose|-v           increase verbosity") (escape_sequence "\n") (string_content "    --version|-V           print version string and exit") (escape_sequence "\n") (escape_sequence "\n") (string_content "Does one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC") (escape_sequence "\n") (string_content "RESULTS command sequences in order to download microcode. Use ") (escape_sequence "\'") (string_content "-m xxx") (escape_sequence "\'") (escape_sequence "\n") (string_content "to list available modes. With only DEVICE given, the Download Microcode") (escape_sequence "\n") (string_content "Status dpage is output.") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (} "}")) (else_clause "else {\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" (else "else") (compound_statement "{\n          ppvVar18 = (void **)0x0;\n          pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );\n          pr2serr("\n");\n          FUN_00012620();\n        }" ({ "{") (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 );" (call_expression "pr2serr(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" (identifier "pr2serr") (argument_list "(\n                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                 )" (( "(") (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" (" """) (string_content "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]") (escape_sequence "\n") (string_content "                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]") (escape_sequence "\n") (string_content "                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]") (escape_sequence "\n") (string_content "                        [--tlength=TLEN] [--verbose] [--version]") (escape_sequence "\n") (string_content "                        DEVICE") (escape_sequence "\n") (string_content "  where:") (escape_sequence "\n") (string_content "    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic") (escape_sequence "\n") (string_content "                           command (def: 0 -> as many as possible)") (escape_sequence "\n") (string_content "                           can append ") (escape_sequence "\'") (string_content ",act") (escape_sequence "\'") (string_content " to do activate after last") (escape_sequence "\n") (string_content "    --dry-run|-d           skip SCSI commands, do everything else") (escape_sequence "\n") (string_content "    --ealsd|-e             exit after last Send Diagnostic command") (escape_sequence "\n") (string_content "    --help|-h              print out usage message then exit") (escape_sequence "\n") (string_content "    --id=ID|-i ID          buffer identifier (0 (default) to 255)") (escape_sequence "\n") (string_content "    --in=FILE|-I FILE      read from FILE (") (escape_sequence "\'") (string_content "-I -") (escape_sequence "\'") (string_content " read from stdin)") (escape_sequence "\n") (string_content "    --length=LEN|-l LEN    length in bytes to send (def: deduced from") (escape_sequence "\n") (string_content "                           FILE taking SKIP into account)") (escape_sequence "\n") (string_content "    --mode=MO|-m MO        download microcode mode, MO is number or") (escape_sequence "\n") (string_content "                           acronym (def: 0 -> ") (escape_sequence "\'") (string_content "dmc_status") (escape_sequence "\'") (string_content ")") (escape_sequence "\n") (string_content "    --non|-N               non-standard: bypass all receive diagnostic") (escape_sequence "\n") (string_content "                           results commands except after check condition") (escape_sequence "\n") (string_content "    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);") (escape_sequence "\n") (string_content "                           ignored if --bpw=CS given") (escape_sequence "\n") (string_content "    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading") (escape_sequence "\n") (string_content "    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))") (escape_sequence "\n") (string_content "    --tlength=TLEN|-t TLEN    total length of firmware in bytes") (escape_sequence "\n") (string_content "                              (def: 0). Only needed if TLEN>LEN") (escape_sequence "\n") (string_content "    --verbose|-v           increase verbosity") (escape_sequence "\n") (string_content "    --version|-V           print version string and exit") (escape_sequence "\n") (escape_sequence "\n") (string_content "Does one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC") (escape_sequence "\n") (string_content "RESULTS command sequences in order to download microcode. Use ") (escape_sequence "\'") (string_content "-m xxx") (escape_sequence "\'") (escape_sequence "\n") (string_content "to list available modes. With only DEVICE given, the Download Microcode") (escape_sequence "\n") (string_content "Status dpage is output.") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "pr2serr("\n");" (call_expression "pr2serr("\n")" (identifier "pr2serr") (argument_list "("\n")" (( "(") (string_literal ""\n"" (" """) (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "FUN_00012620();" (call_expression "FUN_00012620()" (identifier "FUN_00012620") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (goto_statement "goto LAB_0001160b;" (goto "goto") (statement_identifier "LAB_0001160b") (; ";")) (} "}"))) (expression_statement "iVar13 = *(int *)PTR_optind_00015fe8;" (assignment_expression "iVar13 = *(int *)PTR_optind_00015fe8" (identifier "iVar13") (= "=") (pointer_expression "*(int *)PTR_optind_00015fe8" (* "*") (cast_expression "(int *)PTR_optind_00015fe8" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optind_00015fe8")))) (; ";")) (if_statement "if (iVar13 < iVar15) {\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" (if "if") (parenthesized_expression "(iVar13 < iVar15)" (( "(") (binary_expression "iVar13 < iVar15" (identifier "iVar13") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);\n        iVar13 = iVar13 + 1;\n        *(int *)PTR_optind_00015fe8 = iVar13;\n        if (iVar15 <= iVar13) goto LAB_000116cd;\n        do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);\n        ppvVar18 = (void **)0x1;\n        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);\n        local_1e0 = (stat64 *)pcVar10;\n        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";\n        goto LAB_0001160b;\n      }" ({ "{") (expression_statement "local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);" (assignment_expression "local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" (identifier "local_1e0") (= "=") (pointer_expression "*(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" (* "*") (cast_expression "(stat64 **)((int)&psVar14->st_dev + iVar13 * 4)" (( "(") (type_descriptor "stat64 **" (type_identifier "stat64") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((int)&psVar14->st_dev + iVar13 * 4)" (( "(") (binary_expression "(int)&psVar14->st_dev + iVar13 * 4" (cast_expression "(int)&psVar14->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->st_dev" (& "&") (field_expression "psVar14->st_dev" (identifier "psVar14") (-> "->") (field_identifier "st_dev")))) (+ "+") (binary_expression "iVar13 * 4" (identifier "iVar13") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + 1" (identifier "iVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)PTR_optind_00015fe8 = iVar13;" (assignment_expression "*(int *)PTR_optind_00015fe8 = iVar13" (pointer_expression "*(int *)PTR_optind_00015fe8" (* "*") (cast_expression "(int *)PTR_optind_00015fe8" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optind_00015fe8"))) (= "=") (identifier "iVar13")) (; ";")) (if_statement "if (iVar15 <= iVar13) goto LAB_000116cd;" (if "if") (parenthesized_expression "(iVar15 <= iVar13)" (( "(") (binary_expression "iVar15 <= iVar13" (identifier "iVar15") (<= "<=") (identifier "iVar13")) () ")")) (goto_statement "goto LAB_000116cd;" (goto "goto") (statement_identifier "LAB_000116cd") (; ";"))) (do_statement "do {\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        } while (iVar13 < iVar15);" (do "do") (compound_statement "{\n          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);\n          psVar37 = local_1e0;\n          psVar38 = local_1e0;\n          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);\n          iVar13 = *(int *)puVar24 + 1;\n          *(int *)puVar24 = iVar13;\n          local_1e0 = extraout_EDX_03;\n        }" ({ "{") (expression_statement "uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);" (assignment_expression "uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" (identifier "uVar7") (= "=") (pointer_expression "*(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" (* "*") (cast_expression "(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&psVar14->st_dev + iVar13 * 4)" (( "(") (binary_expression "(int)&psVar14->st_dev + iVar13 * 4" (cast_expression "(int)&psVar14->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->st_dev" (& "&") (field_expression "psVar14->st_dev" (identifier "psVar14") (-> "->") (field_identifier "st_dev")))) (+ "+") (binary_expression "iVar13 * 4" (identifier "iVar13") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "psVar37 = local_1e0;" (assignment_expression "psVar37 = local_1e0" (identifier "psVar37") (= "=") (identifier "local_1e0")) (; ";")) (expression_statement "psVar38 = local_1e0;" (assignment_expression "psVar38 = local_1e0" (identifier "psVar38") (= "=") (identifier "local_1e0")) (; ";")) (expression_statement "pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);" (call_expression "pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0)" (identifier "pr2serr") (argument_list "("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0)" (( "(") (string_literal ""Unexpected extra argument: %s\n"" (" """) (string_content "Unexpected extra argument: %s") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar7") (, ",") (identifier "local_1e0") (, ",") (identifier "local_1e0") () ")"))) (; ";")) (expression_statement "iVar13 = *(int *)puVar24 + 1;" (assignment_expression "iVar13 = *(int *)puVar24 + 1" (identifier "iVar13") (= "=") (binary_expression "*(int *)puVar24 + 1" (pointer_expression "*(int *)puVar24" (* "*") (cast_expression "(int *)puVar24" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar24"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)puVar24 = iVar13;" (assignment_expression "*(int *)puVar24 = iVar13" (pointer_expression "*(int *)puVar24" (* "*") (cast_expression "(int *)puVar24" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar24"))) (= "=") (identifier "iVar13")) (; ";")) (expression_statement "local_1e0 = extraout_EDX_03;" (assignment_expression "local_1e0 = extraout_EDX_03" (identifier "local_1e0") (= "=") (identifier "extraout_EDX_03")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar13 < iVar15)" (( "(") (binary_expression "iVar13 < iVar15" (identifier "iVar13") (< "<") (identifier "iVar15")) () ")")) (; ";")) (expression_statement "ppvVar18 = (void **)0x1;" (assignment_expression "ppvVar18 = (void **)0x1" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x1" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x1"))) (; ";")) (expression_statement "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38);" (call_expression "pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38)" (identifier "pr2serr") (argument_list "("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n                ,uVar7,psVar37,psVar38)" (( "(") (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" (" """) (string_content "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]") (escape_sequence "\n") (string_content "                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]") (escape_sequence "\n") (string_content "                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]") (escape_sequence "\n") (string_content "                        [--tlength=TLEN] [--verbose] [--version]") (escape_sequence "\n") (string_content "                        DEVICE") (escape_sequence "\n") (string_content "  where:") (escape_sequence "\n") (string_content "    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic") (escape_sequence "\n") (string_content "                           command (def: 0 -> as many as possible)") (escape_sequence "\n") (string_content "                           can append ") (escape_sequence "\'") (string_content ",act") (escape_sequence "\'") (string_content " to do activate after last") (escape_sequence "\n") (string_content "    --dry-run|-d           skip SCSI commands, do everything else") (escape_sequence "\n") (string_content "    --ealsd|-e             exit after last Send Diagnostic command") (escape_sequence "\n") (string_content "    --help|-h              print out usage message then exit") (escape_sequence "\n") (string_content "    --id=ID|-i ID          buffer identifier (0 (default) to 255)") (escape_sequence "\n") (string_content "    --in=FILE|-I FILE      read from FILE (") (escape_sequence "\'") (string_content "-I -") (escape_sequence "\'") (string_content " read from stdin)") (escape_sequence "\n") (string_content "    --length=LEN|-l LEN    length in bytes to send (def: deduced from") (escape_sequence "\n") (string_content "                           FILE taking SKIP into account)") (escape_sequence "\n") (string_content "    --mode=MO|-m MO        download microcode mode, MO is number or") (escape_sequence "\n") (string_content "                           acronym (def: 0 -> ") (escape_sequence "\'") (string_content "dmc_status") (escape_sequence "\'") (string_content ")") (escape_sequence "\n") (string_content "    --non|-N               non-standard: bypass all receive diagnostic") (escape_sequence "\n") (string_content "                           results commands except after check condition") (escape_sequence "\n") (string_content "    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);") (escape_sequence "\n") (string_content "                           ignored if --bpw=CS given") (escape_sequence "\n") (string_content "    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading") (escape_sequence "\n") (string_content "    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))") (escape_sequence "\n") (string_content "    --tlength=TLEN|-t TLEN    total length of firmware in bytes") (escape_sequence "\n") (string_content "                              (def: 0). Only needed if TLEN>LEN") (escape_sequence "\n") (string_content "    --verbose|-v           increase verbosity") (escape_sequence "\n") (string_content "    --version|-V           print version string and exit") (escape_sequence "\n") (escape_sequence "\n") (string_content "Does one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC") (escape_sequence "\n") (string_content "RESULTS command sequences in order to download microcode. Use ") (escape_sequence "\'") (string_content "-m xxx") (escape_sequence "\'") (escape_sequence "\n") (string_content "to list available modes. With only DEVICE given, the Download Microcode") (escape_sequence "\n") (string_content "Status dpage is output.") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar7") (, ",") (identifier "psVar37") (, ",") (identifier "psVar38") () ")"))) (; ";")) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)pcVar10" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pcVar10"))) (; ";")) (expression_statement "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";" (assignment_expression "local_1d8 = (stat64 *)"Unexpected extra argument: %s\n"" (identifier "local_1d8") (= "=") (cast_expression "(stat64 *)"Unexpected extra argument: %s\n"" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""Unexpected extra argument: %s\n"" (" """) (string_content "Unexpected extra argument: %s") (escape_sequence "\n") (" """)))) (; ";")) (goto_statement "goto LAB_0001160b;" (goto "goto") (statement_identifier "LAB_0001160b") (; ";")) (} "}"))) (expression_statement "local_1e0 = (stat64 *)0x0;" (assignment_expression "local_1e0 = (stat64 *)0x0" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "psVar14 = extraout_ECX;" (assignment_expression "psVar14 = extraout_ECX" (identifier "psVar14") (= "=") (identifier "extraout_ECX")) (; ";")) (labeled_statement "LAB_000116cd:\n      if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;" (statement_identifier "LAB_000116cd") (: ":") (if_statement "if (bVar2) {\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }\n      else if (local_1e9 != '\0') goto LAB_000119bc;" (if "if") (parenthesized_expression "(bVar2)" (( "(") (identifier "bVar2") () ")")) (compound_statement "{\n        if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }\n      }" ({ "{") (if_statement "if (local_1e9 != '\0') {\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }" (if "if") (parenthesized_expression "(local_1e9 != '\0')" (( "(") (binary_expression "local_1e9 != '\0'" (identifier "local_1e9") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");\n          psVar14 = extraout_ECX_04;\nLAB_000119bc:\n          ppvVar18 = (void **)0x0;\n          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);\n          local_1e0 = (stat64 *)pcVar10;\n          goto LAB_0001160b;\n        }" ({ "{") (expression_statement "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");" (call_expression "pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n")" (identifier "pr2serr") (argument_list "("Not in DEBUG mode, so \'-vV\' has no special action\n")" (( "(") (string_literal ""Not in DEBUG mode, so \'-vV\' has no special action\n"" (" """) (string_content "Not in DEBUG mode, so ") (escape_sequence "\'") (string_content "-vV") (escape_sequence "\'") (string_content " has no special action") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "psVar14 = extraout_ECX_04;" (assignment_expression "psVar14 = extraout_ECX_04" (identifier "psVar14") (= "=") (identifier "extraout_ECX_04")) (; ";")) (labeled_statement "LAB_000119bc:\n          ppvVar18 = (void **)0x0;" (statement_identifier "LAB_000119bc") (: ":") (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) (; ";"))) (expression_statement "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);" (call_expression "pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14)" (identifier "pr2serr") (argument_list "("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14)" (( "(") (string_literal ""sg_ses_microcode: version: %s\n"" (" """) (string_content "sg_ses_microcode: version: %s") (escape_sequence "\n") (" """)) (, ",") (string_literal ""1.16 20180628"" (" """) (string_content "1.16 20180628") (" """)) (, ",") (identifier "psVar14") (, ",") (identifier "psVar14") () ")"))) (; ";")) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)pcVar10" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pcVar10"))) (; ";")) (goto_statement "goto LAB_0001160b;" (goto "goto") (statement_identifier "LAB_0001160b") (; ";")) (} "}"))) (} "}")) (else_clause "else if (local_1e9 != '\0') goto LAB_000119bc;" (else "else") (if_statement "if (local_1e9 != '\0') goto LAB_000119bc;" (if "if") (parenthesized_expression "(local_1e9 != '\0')" (( "(") (binary_expression "local_1e9 != '\0'" (identifier "local_1e9") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_000119bc;" (goto "goto") (statement_identifier "LAB_000119bc") (; ";")))))) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" (if "if") (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 == (stat64 *)0x0" (identifier "local_1e0") (== "==") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pcVar5 = "missing device name!\n\n";\n        goto LAB_000115ef;\n      }" ({ "{") (expression_statement "pcVar5 = "missing device name!\n\n";" (assignment_expression "pcVar5 = "missing device name!\n\n"" (identifier "pcVar5") (= "=") (string_literal ""missing device name!\n\n"" (" """) (string_content "missing device name!") (escape_sequence "\n") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_000115ef;" (goto "goto") (statement_identifier "LAB_000115ef") (; ";")) (} "}"))) (if_statement "if ((int)local_19c < 8) {\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }\n      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" (if "if") (parenthesized_expression "((int)local_19c < 8)" (( "(") (binary_expression "(int)local_19c < 8" (cast_expression "(int)local_19c" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_19c")) (< "<") (number_literal "8")) () ")")) (compound_statement "{\n        if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }\n      }" ({ "{") (if_statement "if ((int)local_19c < 6) {\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }\n        else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" (if "if") (parenthesized_expression "((int)local_19c < 6)" (( "(") (binary_expression "(int)local_19c < 6" (cast_expression "(int)local_19c" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_19c")) (< "<") (number_literal "6")) () ")")) (compound_statement "{\n          local_1d4 = (stat64 *)0x0;\n          if (local_19c != (undefined *)0x0) goto LAB_0001171b;\n        }" ({ "{") (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" (identifier "local_1d4") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (local_19c != (undefined *)0x0) goto LAB_0001171b;" (if "if") (parenthesized_expression "(local_19c != (undefined *)0x0)" (( "(") (binary_expression "local_19c != (undefined *)0x0" (identifier "local_19c") (!= "!=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0001171b;" (goto "goto") (statement_identifier "LAB_0001171b") (; ";"))) (} "}")) (else_clause "else {\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" (else "else") (compound_statement "{\nLAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;\n        }" ({ "{") (labeled_statement "LAB_00011c5b:\n          local_1d4 = (stat64 *)0x1;" (statement_identifier "LAB_00011c5b") (: ":") (expression_statement "local_1d4 = (stat64 *)0x1;" (assignment_expression "local_1d4 = (stat64 *)0x1" (identifier "local_1d4") (= "=") (cast_expression "(stat64 *)0x1" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x1"))) (; ";"))) (} "}")))) (} "}")) (else_clause "else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" (else "else") (if_statement "if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {\n        local_1d4 = (stat64 *)0x0;\n      }\n      else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" (if "if") (parenthesized_expression "((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff))" (( "(") (binary_expression "(local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)" (parenthesized_expression "(local_19c == (undefined *)0xf)" (( "(") (binary_expression "local_19c == (undefined *)0xf" (identifier "local_19c") (== "==") (cast_expression "(undefined *)0xf" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xf"))) () ")")) (|| "||") (parenthesized_expression "(local_19c == (undefined *)0xff)" (( "(") (binary_expression "local_19c == (undefined *)0xff" (identifier "local_19c") (== "==") (cast_expression "(undefined *)0xff" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xff"))) () ")"))) () ")")) (compound_statement "{\n        local_1d4 = (stat64 *)0x0;\n      }" ({ "{") (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" (identifier "local_1d4") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" (else "else") (compound_statement "{\n        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;\nLAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);\n        local_1d4 = (stat64 *)0x0;\n      }" ({ "{") (if_statement "if (local_19c == (undefined *)0xe) goto LAB_00011c5b;" (if "if") (parenthesized_expression "(local_19c == (undefined *)0xe)" (( "(") (binary_expression "local_19c == (undefined *)0xe" (identifier "local_19c") (== "==") (cast_expression "(undefined *)0xe" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xe"))) () ")")) (goto_statement "goto LAB_00011c5b;" (goto "goto") (statement_identifier "LAB_00011c5b") (; ";"))) (labeled_statement "LAB_0001171b:\n        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);" (statement_identifier "LAB_0001171b") (: ":") (expression_statement "pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);" (call_expression "pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0)" (identifier "pr2serr") (argument_list "("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0)" (( "(") (string_literal ""%s: mc_mode=0x%x, continue for now\n"" (" """) (string_content "%s: mc_mode=0x%x, continue for now") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "&DAT_000149dc" (& "&") (identifier "DAT_000149dc")) (, ",") (identifier "local_19c") (, ",") (identifier "local_1e0") () ")"))) (; ";"))) (expression_statement "local_1d4 = (stat64 *)0x0;" (assignment_expression "local_1d4 = (stat64 *)0x0" (identifier "local_1d4") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))))) (if_statement "if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }" (if "if") (parenthesized_expression "((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8))" (( "(") (binary_expression "(0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)" (parenthesized_expression "(0 < (int)local_1a0)" (( "(") (binary_expression "0 < (int)local_1a0" (number_literal "0") (< "<") (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0"))) () ")")) (&& "&&") (parenthesized_expression "((int)local_1a0 < (int)local_1a8)" (( "(") (binary_expression "(int)local_1a0 < (int)local_1a8" (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0")) (< "<") (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8"))) () ")"))) () ")")) (compound_statement "{\n        pr2serr("trim chunk size (CS) to be the same as LEN\n");\n        local_1a8 = local_1a0;\n      }" ({ "{") (expression_statement "pr2serr("trim chunk size (CS) to be the same as LEN\n");" (call_expression "pr2serr("trim chunk size (CS) to be the same as LEN\n")" (identifier "pr2serr") (argument_list "("trim chunk size (CS) to be the same as LEN\n")" (( "(") (string_literal ""trim chunk size (CS) to be the same as LEN\n"" (" """) (string_content "trim chunk size (CS) to be the same as LEN") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "local_1a8 = local_1a0;" (assignment_expression "local_1a8 = local_1a0" (identifier "local_1a8") (= "=") (identifier "local_1a0")) (; ";")) (} "}"))) (expression_statement "ppvVar36 = local_1a0;" (assignment_expression "ppvVar36 = local_1a0" (identifier "ppvVar36") (= "=") (identifier "local_1a0")) (; ";")) (if_statement "if ((0 < (int)local_198) && (0 < (int)local_1a8)) {\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }" (if "if") (parenthesized_expression "((0 < (int)local_198) && (0 < (int)local_1a8))" (( "(") (binary_expression "(0 < (int)local_198) && (0 < (int)local_1a8)" (parenthesized_expression "(0 < (int)local_198)" (( "(") (binary_expression "0 < (int)local_198" (number_literal "0") (< "<") (cast_expression "(int)local_198" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_198"))) () ")")) (&& "&&") (parenthesized_expression "(0 < (int)local_1a8)" (( "(") (binary_expression "0 < (int)local_1a8" (number_literal "0") (< "<") (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8"))) () ")"))) () ")")) (compound_statement "{\n        local_198 = 0;\n        ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );\n      }" ({ "{") (expression_statement "local_198 = 0;" (assignment_expression "local_198 = 0" (identifier "local_198") (= "=") (number_literal "0")) (; ";")) (expression_statement "ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   );" (assignment_expression "ppvVar36 = (void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" (identifier "ppvVar36") (= "=") (cast_expression "(void **)pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "pr2serr(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" (identifier "pr2serr") (argument_list "(\n                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"\n                                   )" (( "(") (string_literal ""WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"" (" """) (string_content "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)") (escape_sequence "\n") (" """)) () ")"))))) (; ";")) (} "}"))) (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" (identifier "uVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar15 = local_188;" (assignment_expression "iVar15 = local_188" (identifier "iVar15") (= "=") (identifier "local_188")) (; ";")) (expression_statement "local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);" (assignment_expression "local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" (identifier "local_1dc") (= "=") (cast_expression "(undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "sg_cmds_open_device(local_1e0,0,local_188,ppvVar36)" (identifier "sg_cmds_open_device") (argument_list "(local_1e0,0,local_188,ppvVar36)" (( "(") (identifier "local_1e0") (, ",") (number_literal "0") (, ",") (identifier "local_188") (, ",") (identifier "ppvVar36") () ")"))))) (; ";")) (expression_statement "uVar33 = CONCAT44(iVar15,uVar7);" (assignment_expression "uVar33 = CONCAT44(iVar15,uVar7)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(iVar15,uVar7)" (identifier "CONCAT44") (argument_list "(iVar15,uVar7)" (( "(") (identifier "iVar15") (, ",") (identifier "uVar7") () ")")))) (; ";")) (if_statement "if ((int)local_1dc < 0) {\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" (if "if") (parenthesized_expression "((int)local_1dc < 0)" (( "(") (binary_expression "(int)local_1dc < 0" (cast_expression "(int)local_1dc" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1dc")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }\n        lVar30 = sg_convert_errno(-(int)local_1dc);\n        goto LAB_000118e5;\n      }" ({ "{") (if_statement "if (local_188 != 0) {\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }" (if "if") (parenthesized_expression "(local_188 != 0)" (( "(") (binary_expression "local_188 != 0" (identifier "local_188") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar7 = safe_strerror(-(int)local_1dc);\n          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);\n          local_1d4 = local_1e0;\n        }" ({ "{") (expression_statement "uVar7 = safe_strerror(-(int)local_1dc);" (assignment_expression "uVar7 = safe_strerror(-(int)local_1dc)" (identifier "uVar7") (= "=") (call_expression "safe_strerror(-(int)local_1dc)" (identifier "safe_strerror") (argument_list "(-(int)local_1dc)" (( "(") (unary_expression "-(int)local_1dc" (- "-") (cast_expression "(int)local_1dc" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1dc"))) () ")")))) (; ";")) (expression_statement "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);" (call_expression "pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7)" (identifier "pr2serr") (argument_list "("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7)" (( "(") (string_literal ""sg_ses_microcode: open error: %s: %s\n"" (" """) (string_content "sg_ses_microcode: open error: %s: %s") (escape_sequence "\n") (" """)) (, ",") (identifier "local_1e0") (, ",") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "local_1d4 = local_1e0;" (assignment_expression "local_1d4 = local_1e0" (identifier "local_1d4") (= "=") (identifier "local_1e0")) (; ";")) (} "}"))) (expression_statement "lVar30 = sg_convert_errno(-(int)local_1dc);" (assignment_expression "lVar30 = sg_convert_errno(-(int)local_1dc)" (identifier "lVar30") (= "=") (call_expression "sg_convert_errno(-(int)local_1dc)" (identifier "sg_convert_errno") (argument_list "(-(int)local_1dc)" (( "(") (unary_expression "-(int)local_1dc" (- "-") (cast_expression "(int)local_1dc" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1dc"))) () ")")))) (; ";")) (goto_statement "goto LAB_000118e5;" (goto "goto") (statement_identifier "LAB_000118e5") (; ";")) (} "}"))) (expression_statement "bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);" (assignment_expression "bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" (identifier "bVar17") (= "=") (binary_expression "local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1)" (binary_expression "local_1f0 != (char *)0x0" (identifier "local_1f0") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (& "&") (parenthesized_expression "((byte)local_1d4 ^ 1)" (( "(") (binary_expression "(byte)local_1d4 ^ 1" (cast_expression "(byte)local_1d4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1d4")) (^ "^") (number_literal "1")) () ")")))) (; ";")) (expression_statement "uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);" (assignment_expression "uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17)" (identifier "uVar23") (= "=") (call_expression "CONCAT31((int3)((uint)local_1e0 >> 8),bVar17)" (identifier "CONCAT31") (argument_list "((int3)((uint)local_1e0 >> 8),bVar17)" (( "(") (call_expression "(int3)((uint)local_1e0 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "((uint)local_1e0 >> 8)" (( "(") (binary_expression "(uint)local_1e0 >> 8" (cast_expression "(uint)local_1e0" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_1e0")) (>> ">>") (number_literal "8")) () ")"))) (, ",") (identifier "bVar17") () ")")))) (; ";")) (if_statement "if (bVar17 != 0) {\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" (if "if") (parenthesized_expression "(bVar17 != 0)" (( "(") (binary_expression "bVar17 != 0" (identifier "bVar17") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        pr2serr("ignoring --in=FILE option\n");\n        uVar33 = CONCAT44(iVar15,uVar7);\n        local_1d8 = (stat64 *)0x0;\n        goto LAB_00011a5c;\n      }" ({ "{") (expression_statement "pr2serr("ignoring --in=FILE option\n");" (call_expression "pr2serr("ignoring --in=FILE option\n")" (identifier "pr2serr") (argument_list "("ignoring --in=FILE option\n")" (( "(") (string_literal ""ignoring --in=FILE option\n"" (" """) (string_content "ignoring --in=FILE option") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "uVar33 = CONCAT44(iVar15,uVar7);" (assignment_expression "uVar33 = CONCAT44(iVar15,uVar7)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(iVar15,uVar7)" (identifier "CONCAT44") (argument_list "(iVar15,uVar7)" (( "(") (identifier "iVar15") (, ",") (identifier "uVar7") () ")")))) (; ";")) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" (identifier "local_1d8") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto LAB_00011a5c;" (goto "goto") (statement_identifier "LAB_00011a5c") (; ";")) (} "}"))) (if_statement "if (local_1f0 == (char *)0x0) {\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }" (if "if") (parenthesized_expression "(local_1f0 == (char *)0x0)" (( "(") (binary_expression "local_1f0 == (char *)0x0" (identifier "local_1f0") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        local_1d8 = (stat64 *)0x0;\n        if ((byte)local_1d4 == 0) goto LAB_00011a5c;\n        pr2serr("need --in=FILE option with given mode\n");\n        lVar30 = CONCAT44(extraout_EDX_08,0x1f);\n        goto LAB_000118e5;\n      }" ({ "{") (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" (identifier "local_1d8") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if ((byte)local_1d4 == 0) goto LAB_00011a5c;" (if "if") (parenthesized_expression "((byte)local_1d4 == 0)" (( "(") (binary_expression "(byte)local_1d4 == 0" (cast_expression "(byte)local_1d4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1d4")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00011a5c;" (goto "goto") (statement_identifier "LAB_00011a5c") (; ";"))) (expression_statement "pr2serr("need --in=FILE option with given mode\n");" (call_expression "pr2serr("need --in=FILE option with given mode\n")" (identifier "pr2serr") (argument_list "("need --in=FILE option with given mode\n")" (( "(") (string_literal ""need --in=FILE option with given mode\n"" (" """) (string_content "need --in=FILE option with given mode") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "lVar30 = CONCAT44(extraout_EDX_08,0x1f);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_08,0x1f)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(extraout_EDX_08,0x1f)" (identifier "CONCAT44") (argument_list "(extraout_EDX_08,0x1f)" (( "(") (identifier "extraout_EDX_08") (, ",") (number_literal "0x1f") () ")")))) (; ";")) (goto_statement "goto LAB_000118e5;" (goto "goto") (statement_identifier "LAB_000118e5") (; ";")) (} "}"))) (expression_statement "local_1e0 = (stat64 *)strcmp(local_1f0,"-");" (assignment_expression "local_1e0 = (stat64 *)strcmp(local_1f0,"-")" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)strcmp(local_1f0,"-")" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "strcmp(local_1f0,"-")" (identifier "strcmp") (argument_list "(local_1f0,"-")" (( "(") (identifier "local_1f0") (, ",") (string_literal ""-"" (" """) (string_content "-") (" """)) () ")"))))) (; ";")) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }\n      else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" (if "if") (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 == (stat64 *)0x0" (identifier "local_1e0") (== "==") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        uVar25 = 0;\n        uVar7 = extraout_ECX_00;\n      }" ({ "{") (expression_statement "uVar25 = 0;" (assignment_expression "uVar25 = 0" (identifier "uVar25") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar7 = extraout_ECX_00;" (assignment_expression "uVar7 = extraout_ECX_00" (identifier "uVar7") (= "=") (identifier "extraout_ECX_00")) (; ";")) (} "}")) (else_clause "else {\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" (else "else") (compound_statement "{\n        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);\n        if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }\n        iVar15 = sg_set_binary_mode(uVar25);\n        uVar7 = extraout_ECX_01;\n        if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }\n      }" ({ "{") (expression_statement "uVar25 = open64(local_1f0,0,local_1e0,local_1e0);" (assignment_expression "uVar25 = open64(local_1f0,0,local_1e0,local_1e0)" (identifier "uVar25") (= "=") (call_expression "open64(local_1f0,0,local_1e0,local_1e0)" (identifier "open64") (argument_list "(local_1f0,0,local_1e0,local_1e0)" (( "(") (identifier "local_1f0") (, ",") (number_literal "0") (, ",") (identifier "local_1e0") (, ",") (identifier "local_1e0") () ")")))) (; ";")) (if_statement "if ((int)uVar25 < 0) {\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }" (if "if") (parenthesized_expression "((int)uVar25 < 0)" (( "(") (binary_expression "(int)uVar25 < 0" (cast_expression "(int)uVar25" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar25")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          piVar9 = __errno_location();\n          uVar7 = sg_convert_errno(*piVar9);\n          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);\n          perror((char *)local_124);\n          lVar30 = CONCAT44(extraout_EDX_12,uVar7);\n          goto LAB_000118e5;\n        }" ({ "{") (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" (identifier "piVar9") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar7 = sg_convert_errno(*piVar9);" (assignment_expression "uVar7 = sg_convert_errno(*piVar9)" (identifier "uVar7") (= "=") (call_expression "sg_convert_errno(*piVar9)" (identifier "sg_convert_errno") (argument_list "(*piVar9)" (( "(") (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) () ")")))) (; ";")) (expression_statement "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0);" (call_expression "__snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" (identifier "__snprintf_chk") (argument_list "(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",\n                         local_1f0)" (( "(") (identifier "local_124") (, ",") (number_literal "0x100") (, ",") (number_literal "1") (, ",") (number_literal "0x100") (, ",") (string_literal ""sg_ses_microcode: could not open %s for reading"" (" """) (string_content "sg_ses_microcode: could not open %s for reading") (" """)) (, ",") (identifier "local_1f0") () ")"))) (; ";")) (expression_statement "perror((char *)local_124);" (call_expression "perror((char *)local_124)" (identifier "perror") (argument_list "((char *)local_124)" (( "(") (cast_expression "(char *)local_124" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_124")) () ")"))) (; ";")) (expression_statement "lVar30 = CONCAT44(extraout_EDX_12,uVar7);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_12,uVar7)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(extraout_EDX_12,uVar7)" (identifier "CONCAT44") (argument_list "(extraout_EDX_12,uVar7)" (( "(") (identifier "extraout_EDX_12") (, ",") (identifier "uVar7") () ")")))) (; ";")) (goto_statement "goto LAB_000118e5;" (goto "goto") (statement_identifier "LAB_000118e5") (; ";")) (} "}"))) (expression_statement "iVar15 = sg_set_binary_mode(uVar25);" (assignment_expression "iVar15 = sg_set_binary_mode(uVar25)" (identifier "iVar15") (= "=") (call_expression "sg_set_binary_mode(uVar25)" (identifier "sg_set_binary_mode") (argument_list "(uVar25)" (( "(") (identifier "uVar25") () ")")))) (; ";")) (expression_statement "uVar7 = extraout_ECX_01;" (assignment_expression "uVar7 = extraout_ECX_01" (identifier "uVar7") (= "=") (identifier "extraout_ECX_01")) (; ";")) (if_statement "if (iVar15 < 0) {\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }" (if "if") (parenthesized_expression "(iVar15 < 0)" (( "(") (binary_expression "iVar15 < 0" (identifier "iVar15") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          perror("sg_set_binary_mode");\n          uVar7 = extraout_ECX_11;\n        }" ({ "{") (expression_statement "perror("sg_set_binary_mode");" (call_expression "perror("sg_set_binary_mode")" (identifier "perror") (argument_list "("sg_set_binary_mode")" (( "(") (string_literal ""sg_set_binary_mode"" (" """) (string_content "sg_set_binary_mode") (" """)) () ")"))) (; ";")) (expression_statement "uVar7 = extraout_ECX_11;" (assignment_expression "uVar7 = extraout_ECX_11" (identifier "uVar7") (= "=") (identifier "extraout_ECX_11")) (; ";")) (} "}"))) (} "}")))) (expression_statement "uVar34 = uVar25;" (assignment_expression "uVar34 = uVar25" (identifier "uVar34") (= "=") (identifier "uVar25")) (; ";")) (expression_statement "iVar15 = __fxstat64(3,uVar25,psVar37);" (assignment_expression "iVar15 = __fxstat64(3,uVar25,psVar37)" (identifier "iVar15") (= "=") (call_expression "__fxstat64(3,uVar25,psVar37)" (identifier "__fxstat64") (argument_list "(3,uVar25,psVar37)" (( "(") (number_literal "3") (, ",") (identifier "uVar25") (, ",") (identifier "psVar37") () ")")))) (; ";")) (if_statement "if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }\n      else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" (if "if") (parenthesized_expression "((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000))" (( "(") (binary_expression "(iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)" (parenthesized_expression "(iVar15 == 0)" (( "(") (binary_expression "iVar15 == 0" (identifier "iVar15") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((local_184.st_mode & 0xf000) == 0x8000)" (( "(") (binary_expression "(local_184.st_mode & 0xf000) == 0x8000" (parenthesized_expression "(local_184.st_mode & 0xf000)" (( "(") (binary_expression "local_184.st_mode & 0xf000" (field_expression "local_184.st_mode" (identifier "local_184") (. ".") (field_identifier "st_mode")) (& "&") (number_literal "0xf000")) () ")")) (== "==") (number_literal "0x8000")) () ")"))) () ")")) (compound_statement "{\n        if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }\n      }" ({ "{") (if_statement "if (local_1a0 == (void **)0x0) {\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }\n        else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" (if "if") (parenthesized_expression "(local_1a0 == (void **)0x0)" (( "(") (binary_expression "local_1a0 == (void **)0x0" (identifier "local_1a0") (== "==") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;\n          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }\n          uVar20 = 0xf;\n          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);\n          uVar7 = extraout_EDX_19;\n        }" ({ "{") (expression_statement "iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;" (assignment_expression "iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_" (identifier "iVar15") (= "=") (binary_expression "((int)local_194 >> 0x1f) - local_184.st_size._4_4_" (parenthesized_expression "((int)local_194 >> 0x1f)" (( "(") (binary_expression "(int)local_194 >> 0x1f" (cast_expression "(int)local_194" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_194")) (>> ">>") (number_literal "0x1f")) () ")")) (- "-") (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" (identifier "local_184") (. ".") (field_identifier "st_size")) (. ".") (field_identifier "_4_4_")))) (; ";")) (if_statement "if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }" (if "if") (parenthesized_expression "((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0)" (( "(") (binary_expression "(SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=\n              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0" (parenthesized_expression "(SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size)))" (( "(") (binary_expression "SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=\n              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))" (call_expression "SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_)" (identifier "SBORROW4") (argument_list "((int)local_194 >> 0x1f,local_184.st_size._4_4_)" (( "(") (binary_expression "(int)local_194 >> 0x1f" (cast_expression "(int)local_194" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_194")) (>> ">>") (number_literal "0x1f")) (, ",") (field_expression "local_184.st_size._4_4_" (field_expression "local_184.st_size" (identifier "local_184") (. ".") (field_identifier "st_size")) (. ".") (field_identifier "_4_4_")) () ")"))) (!= "!=") (call_expression "SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))" (identifier "SBORROW4") (argument_list "(iVar15,(uint)(local_194 < (uint)local_184.st_size))" (( "(") (identifier "iVar15") (, ",") (call_expression "(uint)(local_194 < (uint)local_184.st_size)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(local_194 < (uint)local_184.st_size)" (( "(") (binary_expression "local_194 < (uint)local_184.st_size" (identifier "local_194") (< "<") (cast_expression "(uint)local_184.st_size" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (field_expression "local_184.st_size" (identifier "local_184") (. ".") (field_identifier "st_size")))) () ")"))) () ")")))) () ")")) (!= "!=") (binary_expression "(int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0" (cast_expression "(int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(iVar15 - (uint)(local_194 < (uint)local_184.st_size))" (( "(") (binary_expression "iVar15 - (uint)(local_194 < (uint)local_184.st_size)" (identifier "iVar15") (- "-") (call_expression "(uint)(local_194 < (uint)local_184.st_size)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(local_194 < (uint)local_184.st_size)" (( "(") (binary_expression "local_194 < (uint)local_184.st_size" (identifier "local_194") (< "<") (cast_expression "(uint)local_184.st_size" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (field_expression "local_184.st_size" (identifier "local_184") (. ".") (field_identifier "st_size")))) () ")")))) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n            local_1a0 = (void **)((uint)local_184.st_size - local_194);\n            uVar23 = 1;\n            goto LAB_00011e31;\n          }" ({ "{") (expression_statement "local_1a0 = (void **)((uint)local_184.st_size - local_194);" (assignment_expression "local_1a0 = (void **)((uint)local_184.st_size - local_194)" (identifier "local_1a0") (= "=") (cast_expression "(void **)((uint)local_184.st_size - local_194)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((uint)local_184.st_size - local_194)" (( "(") (binary_expression "(uint)local_184.st_size - local_194" (cast_expression "(uint)local_184.st_size" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (field_expression "local_184.st_size" (identifier "local_184") (. ".") (field_identifier "st_size"))) (- "-") (identifier "local_194")) () ")")))) (; ";")) (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" (identifier "uVar23") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_00011e31;" (goto "goto") (statement_identifier "LAB_00011e31") (; ";")) (} "}"))) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" (identifier "uVar20") (= "=") (number_literal "0xf")) (; ";")) (expression_statement "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX);" (call_expression "pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" (identifier "pr2serr") (argument_list "("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,\n                  extraout_EDX)" (( "(") (string_literal ""skip exceeds file size of %d bytes\n"" (" """) (string_content "skip exceeds file size of %d bytes") (escape_sequence "\n") (" """)) (, ",") (cast_expression "(uint)local_184.st_size" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (field_expression "local_184.st_size" (identifier "local_184") (. ".") (field_identifier "st_size"))) (, ",") (identifier "extraout_EDX") (, ",") (identifier "extraout_EDX") () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_19;" (assignment_expression "uVar7 = extraout_EDX_19" (identifier "uVar7") (= "=") (identifier "extraout_EDX_19")) (; ";")) (} "}")) (else_clause "else {\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" (else "else") (compound_statement "{\n          uVar23 = 1;\nLAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;\n          uVar20 = 0xf;\n          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);\n          uVar7 = extraout_EDX_06;\n        }" ({ "{") (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" (identifier "uVar23") (= "=") (number_literal "1")) (; ";")) (labeled_statement "LAB_00011e31:\n          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;" (statement_identifier "LAB_00011e31") (: ":") (if_statement "if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;" (if "if") (parenthesized_expression "((int)local_1a0 < 0x8000001)" (( "(") (binary_expression "(int)local_1a0 < 0x8000001" (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0")) (< "<") (number_literal "0x8000001")) () ")")) (goto_statement "goto LAB_0001185d;" (goto "goto") (statement_identifier "LAB_0001185d") (; ";")))) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" (identifier "uVar20") (= "=") (number_literal "0xf")) (; ";")) (expression_statement "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23);" (call_expression "pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23)" (identifier "pr2serr") (argument_list "("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,\n                  0x8000000,uVar23)" (( "(") (string_literal ""file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n"" (" """) (string_content "file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes") (escape_sequence "\n") (" """)) (, ",") (identifier "local_1a0") (, ",") (number_literal "0x8000000") (, ",") (identifier "uVar23") () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_06;" (assignment_expression "uVar7 = extraout_EDX_06" (identifier "uVar7") (= "=") (identifier "extraout_EDX_06")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" (else "else") (compound_statement "{\n        if (local_1a0 != (void **)0x0) goto LAB_00011e31;\n        local_1a0 = (void **)0x800000;\nLAB_0001185d:\n        ppvVar18 = local_1a0;\n        local_1d8 = (stat64 *)malloc((size_t)local_1a0);\n        if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }\n        uVar20 = 99;\n        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);\n        uVar7 = extraout_EDX_16;\n      }" ({ "{") (if_statement "if (local_1a0 != (void **)0x0) goto LAB_00011e31;" (if "if") (parenthesized_expression "(local_1a0 != (void **)0x0)" (( "(") (binary_expression "local_1a0 != (void **)0x0" (identifier "local_1a0") (!= "!=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00011e31;" (goto "goto") (statement_identifier "LAB_00011e31") (; ";"))) (expression_statement "local_1a0 = (void **)0x800000;" (assignment_expression "local_1a0 = (void **)0x800000" (identifier "local_1a0") (= "=") (cast_expression "(void **)0x800000" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x800000"))) (; ";")) (labeled_statement "LAB_0001185d:\n        ppvVar18 = local_1a0;" (statement_identifier "LAB_0001185d") (: ":") (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" (identifier "ppvVar18") (= "=") (identifier "local_1a0")) (; ";"))) (expression_statement "local_1d8 = (stat64 *)malloc((size_t)local_1a0);" (assignment_expression "local_1d8 = (stat64 *)malloc((size_t)local_1a0)" (identifier "local_1d8") (= "=") (cast_expression "(stat64 *)malloc((size_t)local_1a0)" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "malloc((size_t)local_1a0)" (identifier "malloc") (argument_list "((size_t)local_1a0)" (( "(") (cast_expression "(size_t)local_1a0" (( "(") (type_descriptor "size_t" (primitive_type "size_t")) () ")") (identifier "local_1a0")) () ")"))))) (; ";")) (if_statement "if (local_1d8 != (stat64 *)0x0) {\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" (if "if") (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" (( "(") (binary_expression "local_1d8 != (stat64 *)0x0" (identifier "local_1d8") (!= "!=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          uVar35 = 0xff;\n          uVar7 = extraout_ECX_02;\n          memset(local_1d8,0xff,(size_t)ppvVar18);\n          ppvVar36 = extraout_ECX_03;\n          if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }\n          local_1d4 = local_124;\n          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);\n          perror((char *)local_1d4);\n          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;\n          goto LAB_00011e75;\n        }" ({ "{") (expression_statement "uVar35 = 0xff;" (assignment_expression "uVar35 = 0xff" (identifier "uVar35") (= "=") (number_literal "0xff")) (; ";")) (expression_statement "uVar7 = extraout_ECX_02;" (assignment_expression "uVar7 = extraout_ECX_02" (identifier "uVar7") (= "=") (identifier "extraout_ECX_02")) (; ";")) (expression_statement "memset(local_1d8,0xff,(size_t)ppvVar18);" (call_expression "memset(local_1d8,0xff,(size_t)ppvVar18)" (identifier "memset") (argument_list "(local_1d8,0xff,(size_t)ppvVar18)" (( "(") (identifier "local_1d8") (, ",") (number_literal "0xff") (, ",") (cast_expression "(size_t)ppvVar18" (( "(") (type_descriptor "size_t" (primitive_type "size_t")) () ")") (identifier "ppvVar18")) () ")"))) (; ";")) (expression_statement "ppvVar36 = extraout_ECX_03;" (assignment_expression "ppvVar36 = extraout_ECX_03" (identifier "ppvVar36") (= "=") (identifier "extraout_ECX_03")) (; ";")) (if_statement "if ((int)local_194 < 1) {\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }\n          else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" (if "if") (parenthesized_expression "((int)local_194 < 1)" (( "(") (binary_expression "(int)local_194 < 1" (cast_expression "(int)local_194" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_194")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\nLAB_00011f46:\n            psVar14 = local_1d8;\n            ppvVar6 = local_1a0;\n            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);\n            if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";\n          }" ({ "{") (labeled_statement "LAB_00011f46:\n            psVar14 = local_1d8;" (statement_identifier "LAB_00011f46") (: ":") (expression_statement "psVar14 = local_1d8;" (assignment_expression "psVar14 = local_1d8" (identifier "psVar14") (= "=") (identifier "local_1d8")) (; ";"))) (expression_statement "ppvVar6 = local_1a0;" (assignment_expression "ppvVar6 = local_1a0" (identifier "ppvVar6") (= "=") (identifier "local_1a0")) (; ";")) (expression_statement "ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);" (assignment_expression "ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0)" (identifier "ppvVar18") (= "=") (cast_expression "(void **)read(uVar25,local_1d8,(size_t)local_1a0)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "read(uVar25,local_1d8,(size_t)local_1a0)" (identifier "read") (argument_list "(uVar25,local_1d8,(size_t)local_1a0)" (( "(") (identifier "uVar25") (, ",") (identifier "local_1d8") (, ",") (cast_expression "(size_t)local_1a0" (( "(") (type_descriptor "size_t" (primitive_type "size_t")) () ")") (identifier "local_1a0")) () ")"))))) (; ";")) (if_statement "if (-1 < (int)ppvVar18) {\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }" (if "if") (parenthesized_expression "(-1 < (int)ppvVar18)" (( "(") (binary_expression "-1 < (int)ppvVar18" (number_literal "-1") (< "<") (cast_expression "(int)ppvVar18" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar18"))) () ")")) (compound_statement "{\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(ppvVar6,psVar14);\n              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;\n              if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }\n              ppvVar6 = local_1a0;\n              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;\n              pr2serr("pad with 0xff bytes and continue\n");\n              ppvVar36 = ppvVar18;\n              ppvVar27 = local_1a0;\n              uVar33 = CONCAT44(local_1f0,ppvVar6);\n              goto LAB_00011f90;\n            }" ({ "{") (expression_statement "ppvVar27 = local_1a0;" (assignment_expression "ppvVar27 = local_1a0" (identifier "ppvVar27") (= "=") (identifier "local_1a0")) (; ";")) (expression_statement "uVar33 = CONCAT44(ppvVar6,psVar14);" (assignment_expression "uVar33 = CONCAT44(ppvVar6,psVar14)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(ppvVar6,psVar14)" (identifier "CONCAT44") (argument_list "(ppvVar6,psVar14)" (( "(") (identifier "ppvVar6") (, ",") (identifier "psVar14") () ")")))) (; ";")) (if_statement "if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;" (if "if") (parenthesized_expression "((int)local_1a0 <= (int)ppvVar18)" (( "(") (binary_expression "(int)local_1a0 <= (int)ppvVar18" (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0")) (<= "<=") (cast_expression "(int)ppvVar18" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar18"))) () ")")) (goto_statement "goto LAB_00011f90;" (goto "goto") (statement_identifier "LAB_00011f90") (; ";"))) (if_statement "if (local_1ac == '\0') {\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }" (if "if") (parenthesized_expression "(local_1ac == '\0')" (( "(") (binary_expression "local_1ac == '\0'" (identifier "local_1ac") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                ppvVar27 = ppvVar18;\n                uVar33 = CONCAT44(ppvVar6,psVar14);\n                if (local_188 == 0) goto LAB_00011f90;\n                ppvVar36 = ppvVar18;\n                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);\n                ppvVar6 = ppvVar18;\n                pr2serr("will send %d bytes",ppvVar18);\n                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);\n                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;\n                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);\n                uVar33 = CONCAT44(local_1f0,ppvVar6);\n                goto LAB_00011f90;\n              }" ({ "{") (expression_statement "ppvVar27 = ppvVar18;" (assignment_expression "ppvVar27 = ppvVar18" (identifier "ppvVar27") (= "=") (identifier "ppvVar18")) (; ";")) (expression_statement "uVar33 = CONCAT44(ppvVar6,psVar14);" (assignment_expression "uVar33 = CONCAT44(ppvVar6,psVar14)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(ppvVar6,psVar14)" (identifier "CONCAT44") (argument_list "(ppvVar6,psVar14)" (( "(") (identifier "ppvVar6") (, ",") (identifier "psVar14") () ")")))) (; ";")) (if_statement "if (local_188 == 0) goto LAB_00011f90;" (if "if") (parenthesized_expression "(local_188 == 0)" (( "(") (binary_expression "local_188 == 0" (identifier "local_188") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00011f90;" (goto "goto") (statement_identifier "LAB_00011f90") (; ";"))) (expression_statement "ppvVar36 = ppvVar18;" (assignment_expression "ppvVar36 = ppvVar18" (identifier "ppvVar36") (= "=") (identifier "ppvVar18")) (; ";")) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18);" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18)" (identifier "pr2serr") (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,\n                        ppvVar18)" (( "(") (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" (" """) (string_content "tried to read %d bytes from %s, got %d bytes") (escape_sequence "\n") (" """)) (, ",") (identifier "local_1a0") (, ",") (identifier "local_1f0") (, ",") (identifier "ppvVar18") () ")"))) (; ";")) (expression_statement "ppvVar6 = ppvVar18;" (assignment_expression "ppvVar6 = ppvVar18" (identifier "ppvVar6") (= "=") (identifier "ppvVar18")) (; ";")) (expression_statement "pr2serr("will send %d bytes",ppvVar18);" (call_expression "pr2serr("will send %d bytes",ppvVar18)" (identifier "pr2serr") (argument_list "("will send %d bytes",ppvVar18)" (( "(") (string_literal ""will send %d bytes"" (" """) (string_content "will send %d bytes") (" """)) (, ",") (identifier "ppvVar18") () ")"))) (; ";")) (expression_statement "uVar33 = CONCAT44(extraout_EDX_18,local_1a8);" (assignment_expression "uVar33 = CONCAT44(extraout_EDX_18,local_1a8)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(extraout_EDX_18,local_1a8)" (identifier "CONCAT44") (argument_list "(extraout_EDX_18,local_1a8)" (( "(") (identifier "extraout_EDX_18") (, ",") (identifier "local_1a8") () ")")))) (; ";")) (if_statement "if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;" (if "if") (parenthesized_expression "((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0))" (( "(") (binary_expression "(0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)" (parenthesized_expression "(0 < (int)local_1a8)" (( "(") (binary_expression "0 < (int)local_1a8" (number_literal "0") (< "<") (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8"))) () ")")) (&& "&&") (parenthesized_expression "((int)local_1a8 < (int)local_1a0)" (( "(") (binary_expression "(int)local_1a8 < (int)local_1a0" (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8")) (< "<") (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0"))) () ")"))) () ")")) (goto_statement "goto LAB_00012469;" (goto "goto") (statement_identifier "LAB_00012469") (; ";"))) (expression_statement "pr2serr("\n",ppvVar6,local_1f0,ppvVar36);" (call_expression "pr2serr("\n",ppvVar6,local_1f0,ppvVar36)" (identifier "pr2serr") (argument_list "("\n",ppvVar6,local_1f0,ppvVar36)" (( "(") (string_literal ""\n"" (" """) (escape_sequence "\n") (" """)) (, ",") (identifier "ppvVar6") (, ",") (identifier "local_1f0") (, ",") (identifier "ppvVar36") () ")"))) (; ";")) (expression_statement "uVar33 = CONCAT44(local_1f0,ppvVar6);" (assignment_expression "uVar33 = CONCAT44(local_1f0,ppvVar6)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(local_1f0,ppvVar6)" (identifier "CONCAT44") (argument_list "(local_1f0,ppvVar6)" (( "(") (identifier "local_1f0") (, ",") (identifier "ppvVar6") () ")")))) (; ";")) (goto_statement "goto LAB_00011f90;" (goto "goto") (statement_identifier "LAB_00011f90") (; ";")) (} "}"))) (expression_statement "ppvVar6 = local_1a0;" (assignment_expression "ppvVar6 = local_1a0" (identifier "ppvVar6") (= "=") (identifier "local_1a0")) (; ";")) (expression_statement "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)\n              ;" (call_expression "pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)" (identifier "pr2serr") (argument_list "("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)" (( "(") (string_literal ""tried to read %d bytes from %s, got %d bytes\n"" (" """) (string_content "tried to read %d bytes from %s, got %d bytes") (escape_sequence "\n") (" """)) (, ",") (identifier "local_1a0") (, ",") (identifier "local_1f0") (, ",") (identifier "ppvVar18") () ")"))) (; ";")) (expression_statement "pr2serr("pad with 0xff bytes and continue\n");" (call_expression "pr2serr("pad with 0xff bytes and continue\n")" (identifier "pr2serr") (argument_list "("pad with 0xff bytes and continue\n")" (( "(") (string_literal ""pad with 0xff bytes and continue\n"" (" """) (string_content "pad with 0xff bytes and continue") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "ppvVar36 = ppvVar18;" (assignment_expression "ppvVar36 = ppvVar18" (identifier "ppvVar36") (= "=") (identifier "ppvVar18")) (; ";")) (expression_statement "ppvVar27 = local_1a0;" (assignment_expression "ppvVar27 = local_1a0" (identifier "ppvVar27") (= "=") (identifier "local_1a0")) (; ";")) (expression_statement "uVar33 = CONCAT44(local_1f0,ppvVar6);" (assignment_expression "uVar33 = CONCAT44(local_1f0,ppvVar6)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(local_1f0,ppvVar6)" (identifier "CONCAT44") (argument_list "(local_1f0,ppvVar6)" (( "(") (identifier "local_1f0") (, ",") (identifier "ppvVar6") () ")")))) (; ";")) (goto_statement "goto LAB_00011f90;" (goto "goto") (statement_identifier "LAB_00011f90") (; ";")) (} "}"))) (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" (identifier "piVar9") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar20 = sg_convert_errno(*piVar9);" (assignment_expression "uVar20 = sg_convert_errno(*piVar9)" (identifier "uVar20") (= "=") (call_expression "sg_convert_errno(*piVar9)" (identifier "sg_convert_errno") (argument_list "(*piVar9)" (( "(") (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) () ")")))) (; ";")) (expression_statement "pcVar10 = "sg_ses_microcode: couldn\'t read from %s";" (assignment_expression "pcVar10 = "sg_ses_microcode: couldn\'t read from %s"" (identifier "pcVar10") (= "=") (string_literal ""sg_ses_microcode: couldn\'t read from %s"" (" """) (string_content "sg_ses_microcode: couldn") (escape_sequence "\'") (string_content "t read from %s") (" """))) (; ";")) (} "}")) (else_clause "else {\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" (else "else") (compound_statement "{\n            if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }\n            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);\n            ppvVar36 = extraout_ECX_09;\n            if (-1 < _Var32) goto LAB_00011f46;\n            piVar9 = __errno_location();\n            uVar20 = sg_convert_errno(*piVar9);\n            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";\n          }" ({ "{") (if_statement "if ((char)uVar23 == '\0') {\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }" (if "if") (parenthesized_expression "((char)uVar23 == '\0')" (( "(") (binary_expression "(char)uVar23 == '\0'" (cast_expression "(char)uVar23" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar23")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n              if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }\n              uVar20 = 0xf;\n              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);\n              goto LAB_00011e75;\n            }" ({ "{") (if_statement "if (local_1e0 == (stat64 *)0x0) {\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }" (if "if") (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 == (stat64 *)0x0" (identifier "local_1e0") (== "==") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                uVar20 = 0xf;\n                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);\n                goto LAB_000118d4;\n              }" ({ "{") (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" (identifier "uVar20") (= "=") (number_literal "0xf")) (; ";")) (expression_statement "pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);" (call_expression "pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7)" (identifier "pr2serr") (argument_list "("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7)" (( "(") (string_literal ""Can\'t skip on stdin\n"" (" """) (string_content "Can") (escape_sequence "\'") (string_content "t skip on stdin") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar35") (, ",") (identifier "ppvVar18") (, ",") (identifier "uVar7") () ")"))) (; ";")) (goto_statement "goto LAB_000118d4;" (goto "goto") (statement_identifier "LAB_000118d4") (; ";")) (} "}"))) (expression_statement "uVar20 = 0xf;" (assignment_expression "uVar20 = 0xf" (identifier "uVar20") (= "=") (number_literal "0xf")) (; ";")) (expression_statement "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7);" (call_expression "pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7)" (identifier "pr2serr") (argument_list "("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,\n                      ppvVar18,uVar7)" (( "(") (string_literal ""sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n"" (" """) (string_content "sg_ses_microcode: not a ") (escape_sequence "\'") (string_content "regular") (escape_sequence "\'") (string_content " file so can") (escape_sequence "\'") (string_content "t apply skip") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar35") (, ",") (identifier "ppvVar18") (, ",") (identifier "uVar7") () ")"))) (; ";")) (goto_statement "goto LAB_00011e75;" (goto "goto") (statement_identifier "LAB_00011e75") (; ";")) (} "}"))) (expression_statement "_Var32 = lseek64(uVar25,(longlong)(int)local_194,0);" (assignment_expression "_Var32 = lseek64(uVar25,(longlong)(int)local_194,0)" (identifier "_Var32") (= "=") (call_expression "lseek64(uVar25,(longlong)(int)local_194,0)" (identifier "lseek64") (argument_list "(uVar25,(longlong)(int)local_194,0)" (( "(") (identifier "uVar25") (, ",") (cast_expression "(longlong)(int)local_194" (( "(") (type_descriptor "longlong" (type_identifier "longlong")) () ")") (cast_expression "(int)local_194" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_194"))) (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "ppvVar36 = extraout_ECX_09;" (assignment_expression "ppvVar36 = extraout_ECX_09" (identifier "ppvVar36") (= "=") (identifier "extraout_ECX_09")) (; ";")) (if_statement "if (-1 < _Var32) goto LAB_00011f46;" (if "if") (parenthesized_expression "(-1 < _Var32)" (( "(") (binary_expression "-1 < _Var32" (number_literal "-1") (< "<") (identifier "_Var32")) () ")")) (goto_statement "goto LAB_00011f46;" (goto "goto") (statement_identifier "LAB_00011f46") (; ";"))) (expression_statement "piVar9 = __errno_location();" (assignment_expression "piVar9 = __errno_location()" (identifier "piVar9") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar20 = sg_convert_errno(*piVar9);" (assignment_expression "uVar20 = sg_convert_errno(*piVar9)" (identifier "uVar20") (= "=") (call_expression "sg_convert_errno(*piVar9)" (identifier "sg_convert_errno") (argument_list "(*piVar9)" (( "(") (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) () ")")))) (; ";")) (expression_statement "pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";" (assignment_expression "pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s"" (identifier "pcVar10") (= "=") (string_literal ""sg_ses_microcode: couldn\'t skip to required position on %s"" (" """) (string_content "sg_ses_microcode: couldn") (escape_sequence "\'") (string_content "t skip to required position on %s") (" """))) (; ";")) (} "}")))) (expression_statement "local_1d4 = local_124;" (assignment_expression "local_1d4 = local_124" (identifier "local_1d4") (= "=") (identifier "local_124")) (; ";")) (expression_statement "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);" (call_expression "__snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0)" (identifier "__snprintf_chk") (argument_list "(local_1d4,0x100,1,0x100,pcVar10,local_1f0)" (( "(") (identifier "local_1d4") (, ",") (number_literal "0x100") (, ",") (number_literal "1") (, ",") (number_literal "0x100") (, ",") (identifier "pcVar10") (, ",") (identifier "local_1f0") () ")"))) (; ";")) (expression_statement "perror((char *)local_1d4);" (call_expression "perror((char *)local_1d4)" (identifier "perror") (argument_list "((char *)local_1d4)" (( "(") (cast_expression "(char *)local_1d4" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "local_1d4")) () ")"))) (; ";")) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;" (if "if") (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 == (stat64 *)0x0" (identifier "local_1e0") (== "==") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_000118d4;" (goto "goto") (statement_identifier "LAB_000118d4") (; ";"))) (goto_statement "goto LAB_00011e75;" (goto "goto") (statement_identifier "LAB_00011e75") (; ";")) (} "}"))) (expression_statement "uVar20 = 99;" (assignment_expression "uVar20 = 99" (identifier "uVar20") (= "=") (number_literal "99")) (; ";")) (expression_statement "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7);" (call_expression "pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7)" (identifier "pr2serr") (argument_list "("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,\n                uVar7)" (( "(") (string_literal ""sg_ses_microcode: out of memory to hold microcode read from FILE\n"" (" """) (string_content "sg_ses_microcode: out of memory to hold microcode read from FILE") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar34") (, ",") (identifier "psVar37") (, ",") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_16;" (assignment_expression "uVar7 = extraout_EDX_16" (identifier "uVar7") (= "=") (identifier "extraout_EDX_16")) (; ";")) (} "}")))) (expression_statement "lVar30 = CONCAT44(uVar7,uVar20);" (assignment_expression "lVar30 = CONCAT44(uVar7,uVar20)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(uVar7,uVar20)" (identifier "CONCAT44") (argument_list "(uVar7,uVar20)" (( "(") (identifier "uVar7") (, ",") (identifier "uVar20") () ")")))) (; ";")) (expression_statement "local_1d8 = (stat64 *)0x0;" (assignment_expression "local_1d8 = (stat64 *)0x0" (identifier "local_1d8") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;" (if "if") (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 == (stat64 *)0x0" (identifier "local_1e0") (== "==") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_000118e5;" (goto "goto") (statement_identifier "LAB_000118e5") (; ";"))) (labeled_statement "LAB_00011e75:\n      close(uVar25);" (statement_identifier "LAB_00011e75") (: ":") (expression_statement "close(uVar25);" (call_expression "close(uVar25)" (identifier "close") (argument_list "(uVar25)" (( "(") (identifier "uVar25") () ")"))) (; ";"))) (expression_statement "lVar30 = CONCAT44(extraout_EDX_07,uVar20);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_07,uVar20)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(extraout_EDX_07,uVar20)" (identifier "CONCAT44") (argument_list "(extraout_EDX_07,uVar20)" (( "(") (identifier "extraout_EDX_07") (, ",") (identifier "uVar20") () ")")))) (; ";")) (goto_statement "goto LAB_00011e81;" (goto "goto") (statement_identifier "LAB_00011e81") (; ";")) (} "}"))) (switch_statement "switch(iVar13) {\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }" (switch "switch") (parenthesized_expression "(iVar13)" (( "(") (identifier "iVar13") () ")")) (compound_statement "{\n    case 0x3f:\n    case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;\n    default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;\n    case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;\n    case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;\n    case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x56:\n      local_1e9 = '\x01';\n      break;\n    case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;\n    case 100:\n      local_1b0._0_1_ = '\x01';\n      break;\n    case 0x65:\n      local_1b0._1_1_ = 1;\n      break;\n    case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;\n    case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;\n    case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;\n    case 0x74:\n      goto code_r0x000113fe;\n    case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;\n    }" ({ "{") (case_statement "case 0x3f:" (case "case") (number_literal "0x3f") (: ":")) (case_statement "case 0x68:\n      local_1e8 = local_1e8 + 1;\n      break;" (case "case") (number_literal "0x68") (: ":") (expression_statement "local_1e8 = local_1e8 + 1;" (assignment_expression "local_1e8 = local_1e8 + 1" (identifier "local_1e8") (= "=") (binary_expression "local_1e8 + 1" (identifier "local_1e8") (+ "+") (number_literal "1"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "default:\n      pcVar5 = "unrecognised option code 0x%x ??\n";\nLAB_000115ef:\n      pr2serr(pcVar5);\n      pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );\n      goto code_r0x00011606;" (default "default") (: ":") (expression_statement "pcVar5 = "unrecognised option code 0x%x ??\n";" (assignment_expression "pcVar5 = "unrecognised option code 0x%x ??\n"" (identifier "pcVar5") (= "=") (string_literal ""unrecognised option code 0x%x ??\n"" (" """) (string_content "unrecognised option code 0x%x ??") (escape_sequence "\n") (" """))) (; ";")) (labeled_statement "LAB_000115ef:\n      pr2serr(pcVar5);" (statement_identifier "LAB_000115ef") (: ":") (expression_statement "pr2serr(pcVar5);" (call_expression "pr2serr(pcVar5)" (identifier "pr2serr") (argument_list "(pcVar5)" (( "(") (identifier "pcVar5") () ")"))) (; ";"))) (expression_statement "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             );" (call_expression "pr2serr(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" (identifier "pr2serr") (argument_list "(\n             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"\n             )" (( "(") (string_literal ""Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"" (" """) (string_content "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]") (escape_sequence "\n") (string_content "                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]") (escape_sequence "\n") (string_content "                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]") (escape_sequence "\n") (string_content "                        [--tlength=TLEN] [--verbose] [--version]") (escape_sequence "\n") (string_content "                        DEVICE") (escape_sequence "\n") (string_content "  where:") (escape_sequence "\n") (string_content "    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic") (escape_sequence "\n") (string_content "                           command (def: 0 -> as many as possible)") (escape_sequence "\n") (string_content "                           can append ") (escape_sequence "\'") (string_content ",act") (escape_sequence "\'") (string_content " to do activate after last") (escape_sequence "\n") (string_content "    --dry-run|-d           skip SCSI commands, do everything else") (escape_sequence "\n") (string_content "    --ealsd|-e             exit after last Send Diagnostic command") (escape_sequence "\n") (string_content "    --help|-h              print out usage message then exit") (escape_sequence "\n") (string_content "    --id=ID|-i ID          buffer identifier (0 (default) to 255)") (escape_sequence "\n") (string_content "    --in=FILE|-I FILE      read from FILE (") (escape_sequence "\'") (string_content "-I -") (escape_sequence "\'") (string_content " read from stdin)") (escape_sequence "\n") (string_content "    --length=LEN|-l LEN    length in bytes to send (def: deduced from") (escape_sequence "\n") (string_content "                           FILE taking SKIP into account)") (escape_sequence "\n") (string_content "    --mode=MO|-m MO        download microcode mode, MO is number or") (escape_sequence "\n") (string_content "                           acronym (def: 0 -> ") (escape_sequence "\'") (string_content "dmc_status") (escape_sequence "\'") (string_content ")") (escape_sequence "\n") (string_content "    --non|-N               non-standard: bypass all receive diagnostic") (escape_sequence "\n") (string_content "                           results commands except after check condition") (escape_sequence "\n") (string_content "    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);") (escape_sequence "\n") (string_content "                           ignored if --bpw=CS given") (escape_sequence "\n") (string_content "    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading") (escape_sequence "\n") (string_content "    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))") (escape_sequence "\n") (string_content "    --tlength=TLEN|-t TLEN    total length of firmware in bytes") (escape_sequence "\n") (string_content "                              (def: 0). Only needed if TLEN>LEN") (escape_sequence "\n") (string_content "    --verbose|-v           increase verbosity") (escape_sequence "\n") (string_content "    --version|-V           print version string and exit") (escape_sequence "\n") (escape_sequence "\n") (string_content "Does one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC") (escape_sequence "\n") (string_content "RESULTS command sequences in order to download microcode. Use ") (escape_sequence "\'") (string_content "-m xxx") (escape_sequence "\'") (escape_sequence "\n") (string_content "to list available modes. With only DEVICE given, the Download Microcode") (escape_sequence "\n") (string_content "Status dpage is output.") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";"))) (case_statement "case 0x49:\n      local_1f0 = *(char **)PTR_optarg_00015ffc;\n      break;" (case "case") (number_literal "0x49") (: ":") (expression_statement "local_1f0 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "local_1f0 = *(char **)PTR_optarg_00015ffc" (identifier "local_1f0") (= "=") (pointer_expression "*(char **)PTR_optarg_00015ffc" (* "*") (cast_expression "(char **)PTR_optarg_00015ffc" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR_optarg_00015ffc")))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x4e:\n      local_1b0._2_1_ = '\x01';\n      break;" (case "case") (number_literal "0x4e") (: ":") (expression_statement "local_1b0._2_1_ = '\x01';" (assignment_expression "local_1b0._2_1_ = '\x01'" (field_expression "local_1b0._2_1_" (identifier "local_1b0") (. ".") (field_identifier "_2_1_")) (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x53:\n      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);\n      if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;" (case "case") (number_literal "0x53") (: ":") (expression_statement "uStack_190 = func_0x00011130(*(undefined4 *)puVar16);" (assignment_expression "uStack_190 = func_0x00011130(*(undefined4 *)puVar16)" (identifier "uStack_190") (= "=") (call_expression "func_0x00011130(*(undefined4 *)puVar16)" (identifier "func_0x00011130") (argument_list "(*(undefined4 *)puVar16)" (( "(") (pointer_expression "*(undefined4 *)puVar16" (* "*") (cast_expression "(undefined4 *)puVar16" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar16"))) () ")")))) (; ";")) (if_statement "if (0xff < uStack_190) {\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "(0xff < uStack_190)" (( "(") (binary_expression "0xff < uStack_190" (number_literal "0xff") (< "<") (identifier "uStack_190")) () ")")) (compound_statement "{\n        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");" (call_expression "pr2serr("expected argument to \'--subenc\' to be 0 to 255\n")" (identifier "pr2serr") (argument_list "("expected argument to \'--subenc\' to be 0 to 255\n")" (( "(") (string_literal ""expected argument to \'--subenc\' to be 0 to 255\n"" (" """) (string_content "expected argument to ") (escape_sequence "\'") (string_content "--subenc") (escape_sequence "\'") (string_content " to be 0 to 255") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x56:\n      local_1e9 = '\x01';\n      break;" (case "case") (number_literal "0x56") (: ":") (expression_statement "local_1e9 = '\x01';" (assignment_expression "local_1e9 = '\x01'" (identifier "local_1e9") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x62:\n      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }\n      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);\n      if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }\n      break;" (case "case") (number_literal "0x62") (: ":") (expression_statement "local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "local_1a8") (= "=") (cast_expression "(void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "func_0x000111e0") (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" (* "*") (cast_expression "(undefined4 *)PTR_optarg_00015ffc" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optarg_00015ffc"))) () ")"))))) (; ";")) (if_statement "if ((int)local_1a8 < 0) {\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "((int)local_1a8 < 0)" (( "(") (binary_expression "(int)local_1a8 < 0" (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        pr2serr("argument to \'--bpw\' should be in a positive number\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("argument to \'--bpw\' should be in a positive number\n");" (call_expression "pr2serr("argument to \'--bpw\' should be in a positive number\n")" (identifier "pr2serr") (argument_list "("argument to \'--bpw\' should be in a positive number\n")" (( "(") (string_literal ""argument to \'--bpw\' should be in a positive number\n"" (" """) (string_content "argument to ") (escape_sequence "\'") (string_content "--bpw") (escape_sequence "\'") (string_content " should be in a positive number") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (expression_statement "iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);" (assignment_expression "iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" (identifier "iVar13") (= "=") (call_expression "func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" (identifier "func_0x00011150") (argument_list "(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8)" (( "(") (pointer_expression "*(undefined4 *)puVar3" (* "*") (cast_expression "(undefined4 *)puVar3" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar3"))) (, ",") (number_literal "0x2c") (, ",") (identifier "local_1a8") (, ",") (identifier "local_1a8") () ")")))) (; ";")) (if_statement "if ((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {\n        local_1b0._3_1_ = '\x01';\n      }" (if "if") (parenthesized_expression "((iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0))" (( "(") (binary_expression "(iVar13 != 0) &&\n         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)" (parenthesized_expression "(iVar13 != 0)" (( "(") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)" (( "(") (comma_expression "iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0" (assignment_expression "iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3)" (identifier "iVar13") (= "=") (call_expression "func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3)" (identifier "func_0x00011200") (argument_list "(&UNK_000146c9,iVar13 + 1,3,puVar3)" (( "(") (pointer_expression "&UNK_000146c9" (& "&") (identifier "UNK_000146c9")) (, ",") (binary_expression "iVar13 + 1" (identifier "iVar13") (+ "+") (number_literal "1")) (, ",") (number_literal "3") (, ",") (identifier "puVar3") () ")")))) (, ",") (binary_expression "iVar13 == 0" (identifier "iVar13") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        local_1b0._3_1_ = '\x01';\n      }" ({ "{") (expression_statement "local_1b0._3_1_ = '\x01';" (assignment_expression "local_1b0._3_1_ = '\x01'" (field_expression "local_1b0._3_1_" (identifier "local_1b0") (. ".") (field_identifier "_3_1_")) (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 100:\n      local_1b0._0_1_ = '\x01';\n      break;" (case "case") (number_literal "100") (: ":") (expression_statement "local_1b0._0_1_ = '\x01';" (assignment_expression "local_1b0._0_1_ = '\x01'" (field_expression "local_1b0._0_1_" (identifier "local_1b0") (. ".") (field_identifier "_0_1_")) (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x65:\n      local_1b0._1_1_ = 1;\n      break;" (case "case") (number_literal "0x65") (: ":") (expression_statement "local_1b0._1_1_ = 1;" (assignment_expression "local_1b0._1_1_ = 1" (field_expression "local_1b0._1_1_" (identifier "local_1b0") (. ".") (field_identifier "_1_1_")) (= "=") (number_literal "1")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x69:\n      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);\n      if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }\n      break;" (case "case") (number_literal "0x69") (: ":") (expression_statement "local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "local_1a4") (= "=") (call_expression "func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "func_0x00011130") (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" (* "*") (cast_expression "(undefined4 *)PTR_optarg_00015ffc" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optarg_00015ffc"))) () ")")))) (; ";")) (if_statement "if (0xff < local_1a4) {\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "(0xff < local_1a4)" (( "(") (binary_expression "0xff < local_1a4" (number_literal "0xff") (< "<") (identifier "local_1a4")) () ")")) (compound_statement "{\n        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("argument to \'--id\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--id\' should be in the range 0 to 255\n")" (identifier "pr2serr") (argument_list "("argument to \'--id\' should be in the range 0 to 255\n")" (( "(") (string_literal ""argument to \'--id\' should be in the range 0 to 255\n"" (" """) (string_content "argument to ") (escape_sequence "\'") (string_content "--id") (escape_sequence "\'") (string_content " should be in the range 0 to 255") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x6c:\n      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }\n      local_1ac = '\x01';\n      break;" (case "case") (number_literal "0x6c") (: ":") (expression_statement "local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "local_1a0") (= "=") (cast_expression "(void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "func_0x000111e0") (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" (* "*") (cast_expression "(undefined4 *)PTR_optarg_00015ffc" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optarg_00015ffc"))) () ")"))))) (; ";")) (if_statement "if ((int)local_1a0 < 0) {\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "((int)local_1a0 < 0)" (( "(") (binary_expression "(int)local_1a0 < 0" (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        pr2serr("bad argument to \'--length\'\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("bad argument to \'--length\'\n");" (call_expression "pr2serr("bad argument to \'--length\'\n")" (identifier "pr2serr") (argument_list "("bad argument to \'--length\'\n")" (( "(") (string_literal ""bad argument to \'--length\'\n"" (" """) (string_content "bad argument to ") (escape_sequence "\'") (string_content "--length") (escape_sequence "\'") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (expression_statement "local_1ac = '\x01';" (assignment_expression "local_1ac = '\x01'" (identifier "local_1ac") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x6d:\n      piVar9 = (int *)func_0x00011240();\n      pcVar5 = *(char **)PTR_optarg_00015ffc;\n      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }\n      break;" (case "case") (number_literal "0x6d") (: ":") (expression_statement "piVar9 = (int *)func_0x00011240();" (assignment_expression "piVar9 = (int *)func_0x00011240()" (identifier "piVar9") (= "=") (cast_expression "(int *)func_0x00011240()" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "func_0x00011240()" (identifier "func_0x00011240") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "pcVar5 = *(char **)PTR_optarg_00015ffc;" (assignment_expression "pcVar5 = *(char **)PTR_optarg_00015ffc" (identifier "pcVar5") (= "=") (pointer_expression "*(char **)PTR_optarg_00015ffc" (* "*") (cast_expression "(char **)PTR_optarg_00015ffc" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR_optarg_00015ffc")))) (; ";")) (if_statement "if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }\n      else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" (if "if") (parenthesized_expression "((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0)" (( "(") (binary_expression "(*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0" (parenthesized_expression "(*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8)" (( "(") (binary_expression "*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8" (pointer_expression "*(byte *)(*piVar9 + 1 + *pcVar5 * 2)" (* "*") (cast_expression "(byte *)(*piVar9 + 1 + *pcVar5 * 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar9 + 1 + *pcVar5 * 2)" (( "(") (binary_expression "*piVar9 + 1 + *pcVar5 * 2" (binary_expression "*piVar9 + 1" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (+ "+") (number_literal "1")) (+ "+") (binary_expression "*pcVar5 * 2" (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5")) (* "*") (number_literal "2"))) () ")")))) (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar25 = 0xffffffff;\n        pcVar26 = pcVar5;\n        do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');\n        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }\n        ppuVar19 = &PTR_s_dmc_status_00016100;\n        puVar24 = PTR_s_dmc_status_00016100;\n        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }\n        local_19c = ppuVar19[1];\n      }" ({ "{") (expression_statement "uVar25 = 0xffffffff;" (assignment_expression "uVar25 = 0xffffffff" (identifier "uVar25") (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "pcVar26 = pcVar5;" (assignment_expression "pcVar26 = pcVar5" (identifier "pcVar26") (= "=") (identifier "pcVar5")) (; ";")) (do_statement "do {\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        } while (cVar4 != '\0');" (do "do") (compound_statement "{\n          if (uVar25 == 0) break;\n          uVar25 = uVar25 - 1;\n          cVar4 = *pcVar26;\n          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;\n        }" ({ "{") (if_statement "if (uVar25 == 0) break;" (if "if") (parenthesized_expression "(uVar25 == 0)" (( "(") (binary_expression "uVar25 == 0" (identifier "uVar25") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar25 = uVar25 - 1;" (assignment_expression "uVar25 = uVar25 - 1" (identifier "uVar25") (= "=") (binary_expression "uVar25 - 1" (identifier "uVar25") (- "-") (number_literal "1"))) (; ";")) (expression_statement "cVar4 = *pcVar26;" (assignment_expression "cVar4 = *pcVar26" (identifier "cVar4") (= "=") (pointer_expression "*pcVar26" (* "*") (identifier "pcVar26"))) (; ";")) (expression_statement "pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;" (assignment_expression "pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1" (identifier "pcVar26") (= "=") (binary_expression "pcVar26 + (uint)bVar29 * -2 + 1" (binary_expression "pcVar26 + (uint)bVar29 * -2" (identifier "pcVar26") (+ "+") (binary_expression "(uint)bVar29 * -2" (cast_expression "(uint)bVar29" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar29")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar4 != '\0')" (( "(") (binary_expression "cVar4 != '\0'" (identifier "cVar4") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (; ";")) (if_statement "if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }" (if "if") (parenthesized_expression "(PTR_s_dmc_status_00016100 == (undefined *)0x0)" (( "(") (binary_expression "PTR_s_dmc_status_00016100 == (undefined *)0x0" (identifier "PTR_s_dmc_status_00016100") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\ncode_r0x00011fdc:\n          FUN_00012620();\n          goto code_r0x00011606;\n        }" ({ "{") (labeled_statement "code_r0x00011fdc:\n          FUN_00012620();" (statement_identifier "code_r0x00011fdc") (: ":") (expression_statement "FUN_00012620();" (call_expression "FUN_00012620()" (identifier "FUN_00012620") (argument_list "()" (( "(") () ")"))) (; ";"))) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (expression_statement "ppuVar19 = &PTR_s_dmc_status_00016100;" (assignment_expression "ppuVar19 = &PTR_s_dmc_status_00016100" (identifier "ppuVar19") (= "=") (pointer_expression "&PTR_s_dmc_status_00016100" (& "&") (identifier "PTR_s_dmc_status_00016100"))) (; ";")) (expression_statement "puVar24 = PTR_s_dmc_status_00016100;" (assignment_expression "puVar24 = PTR_s_dmc_status_00016100" (identifier "puVar24") (= "=") (identifier "PTR_s_dmc_status_00016100")) (; ";")) (while_statement "while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }" (while "while") (parenthesized_expression "(iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0)" (( "(") (comma_expression "iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0" (assignment_expression "iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1)" (identifier "iVar13") (= "=") (call_expression "func_0x00011200(puVar24,pcVar5,~uVar25 - 1)" (identifier "func_0x00011200") (argument_list "(puVar24,pcVar5,~uVar25 - 1)" (( "(") (identifier "puVar24") (, ",") (identifier "pcVar5") (, ",") (binary_expression "~uVar25 - 1" (unary_expression "~uVar25" (~ "~") (identifier "uVar25")) (- "-") (number_literal "1")) () ")")))) (, ",") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n          ppuVar19 = ppuVar19 + 3;\n          puVar24 = *ppuVar19;\n          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;\n        }" ({ "{") (expression_statement "ppuVar19 = ppuVar19 + 3;" (assignment_expression "ppuVar19 = ppuVar19 + 3" (identifier "ppuVar19") (= "=") (binary_expression "ppuVar19 + 3" (identifier "ppuVar19") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "puVar24 = *ppuVar19;" (assignment_expression "puVar24 = *ppuVar19" (identifier "puVar24") (= "=") (pointer_expression "*ppuVar19" (* "*") (identifier "ppuVar19"))) (; ";")) (if_statement "if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;" (if "if") (parenthesized_expression "(puVar24 == (undefined *)0x0)" (( "(") (binary_expression "puVar24 == (undefined *)0x0" (identifier "puVar24") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto code_r0x00011fdc;" (goto "goto") (statement_identifier "code_r0x00011fdc") (; ";"))) (} "}"))) (expression_statement "local_19c = ppuVar19[1];" (assignment_expression "local_19c = ppuVar19[1]" (identifier "local_19c") (= "=") (subscript_expression "ppuVar19[1]" (identifier "ppuVar19") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" (else "else") (compound_statement "{\n        local_19c = (undefined *)func_0x00011130(pcVar5);\n        if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }\n      }" ({ "{") (expression_statement "local_19c = (undefined *)func_0x00011130(pcVar5);" (assignment_expression "local_19c = (undefined *)func_0x00011130(pcVar5)" (identifier "local_19c") (= "=") (cast_expression "(undefined *)func_0x00011130(pcVar5)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "func_0x00011130(pcVar5)" (identifier "func_0x00011130") (argument_list "(pcVar5)" (( "(") (identifier "pcVar5") () ")"))))) (; ";")) (if_statement "if ((undefined *)0xff < local_19c) {\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }" (if "if") (parenthesized_expression "((undefined *)0xff < local_19c)" (( "(") (binary_expression "(undefined *)0xff < local_19c" (cast_expression "(undefined *)0xff" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xff")) (< "<") (identifier "local_19c")) () ")")) (compound_statement "{\n          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");\n          goto code_r0x00011606;\n        }" ({ "{") (expression_statement "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");" (call_expression "pr2serr("argument to \'--mode\' should be in the range 0 to 255\n")" (identifier "pr2serr") (argument_list "("argument to \'--mode\' should be in the range 0 to 255\n")" (( "(") (string_literal ""argument to \'--mode\' should be in the range 0 to 255\n"" (" """) (string_content "argument to ") (escape_sequence "\'") (string_content "--mode") (escape_sequence "\'") (string_content " should be in the range 0 to 255") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (} "}")))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x6f:\n      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }\n      if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }\n      break;" (case "case") (number_literal "0x6f") (: ":") (expression_statement "local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "local_198") (= "=") (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "func_0x000111e0") (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" (* "*") (cast_expression "(undefined4 *)PTR_optarg_00015ffc" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optarg_00015ffc"))) () ")")))) (; ";")) (if_statement "if ((int)local_198 < 0) {\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "((int)local_198 < 0)" (( "(") (binary_expression "(int)local_198 < 0" (cast_expression "(int)local_198" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_198")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        pr2serr("bad argument to \'--offset\'\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("bad argument to \'--offset\'\n");" (call_expression "pr2serr("bad argument to \'--offset\'\n")" (identifier "pr2serr") (argument_list "("bad argument to \'--offset\'\n")" (( "(") (string_literal ""bad argument to \'--offset\'\n"" (" """) (string_content "bad argument to ") (escape_sequence "\'") (string_content "--offset") (escape_sequence "\'") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (if_statement "if ((local_198 & 3) != 0) {\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "((local_198 & 3) != 0)" (( "(") (binary_expression "(local_198 & 3) != 0" (parenthesized_expression "(local_198 & 3)" (( "(") (binary_expression "local_198 & 3" (identifier "local_198") (& "&") (number_literal "3")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        pr2serr("\'--offset\' value needs to be a multiple of 4\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("\'--offset\' value needs to be a multiple of 4\n");" (call_expression "pr2serr("\'--offset\' value needs to be a multiple of 4\n")" (identifier "pr2serr") (argument_list "("\'--offset\' value needs to be a multiple of 4\n")" (( "(") (string_literal ""\'--offset\' value needs to be a multiple of 4\n"" (" """) (escape_sequence "\'") (string_content "--offset") (escape_sequence "\'") (string_content " value needs to be a multiple of 4") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x73:\n      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);\n      if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }\n      break;" (case "case") (number_literal "0x73") (: ":") (expression_statement "local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);" (assignment_expression "local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "local_194") (= "=") (call_expression "func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc)" (identifier "func_0x000111e0") (argument_list "(*(undefined4 *)PTR_optarg_00015ffc)" (( "(") (pointer_expression "*(undefined4 *)PTR_optarg_00015ffc" (* "*") (cast_expression "(undefined4 *)PTR_optarg_00015ffc" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_optarg_00015ffc"))) () ")")))) (; ";")) (if_statement "if ((int)local_194 < 0) {\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }" (if "if") (parenthesized_expression "((int)local_194 < 0)" (( "(") (binary_expression "(int)local_194 < 0" (cast_expression "(int)local_194" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_194")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        pr2serr("bad argument to \'--skip\'\n");\n        goto code_r0x00011606;\n      }" ({ "{") (expression_statement "pr2serr("bad argument to \'--skip\'\n");" (call_expression "pr2serr("bad argument to \'--skip\'\n")" (identifier "pr2serr") (argument_list "("bad argument to \'--skip\'\n")" (( "(") (string_literal ""bad argument to \'--skip\'\n"" (" """) (string_content "bad argument to ") (escape_sequence "\'") (string_content "--skip") (escape_sequence "\'") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (goto_statement "goto code_r0x00011606;" (goto "goto") (statement_identifier "code_r0x00011606") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x74:\n      goto code_r0x000113fe;" (case "case") (number_literal "0x74") (: ":") (goto_statement "goto code_r0x000113fe;" (goto "goto") (statement_identifier "code_r0x000113fe") (; ";"))) (case_statement "case 0x76:\n      local_188 = local_188 + 1;\n      bVar2 = true;" (case "case") (number_literal "0x76") (: ":") (expression_statement "local_188 = local_188 + 1;" (assignment_expression "local_188 = local_188 + 1" (identifier "local_188") (= "=") (binary_expression "local_188 + 1" (identifier "local_188") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" (identifier "bVar2") (= "=") (true "true")) (; ";"))) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (labeled_statement "code_r0x000113fe:\n  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);" (statement_identifier "code_r0x000113fe") (: ":") (expression_statement "local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);" (assignment_expression "local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16)" (identifier "local_18c") (= "=") (cast_expression "(void **)func_0x000111e0(*(undefined4 *)puVar16)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "func_0x000111e0(*(undefined4 *)puVar16)" (identifier "func_0x000111e0") (argument_list "(*(undefined4 *)puVar16)" (( "(") (pointer_expression "*(undefined4 *)puVar16" (* "*") (cast_expression "(undefined4 *)puVar16" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar16"))) () ")"))))) (; ";"))) (if_statement "if ((int)local_18c < 0) goto code_r0x0001141f;" (if "if") (parenthesized_expression "((int)local_18c < 0)" (( "(") (binary_expression "(int)local_18c < 0" (cast_expression "(int)local_18c" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_18c")) (< "<") (number_literal "0")) () ")")) (goto_statement "goto code_r0x0001141f;" (goto "goto") (statement_identifier "code_r0x0001141f") (; ";"))) (goto_statement "goto code_r0x00011330;" (goto "goto") (statement_identifier "code_r0x00011330") (; ";")) (labeled_statement "code_r0x0001141f:\n  pr2serr("bad argument to \'--tlength\'\n");" (statement_identifier "code_r0x0001141f") (: ":") (expression_statement "pr2serr("bad argument to \'--tlength\'\n");" (call_expression "pr2serr("bad argument to \'--tlength\'\n")" (identifier "pr2serr") (argument_list "("bad argument to \'--tlength\'\n")" (( "(") (string_literal ""bad argument to \'--tlength\'\n"" (" """) (string_content "bad argument to ") (escape_sequence "\'") (string_content "--tlength") (escape_sequence "\'") (escape_sequence "\n") (" """)) () ")"))) (; ";"))) (labeled_statement "code_r0x00011606:\n  ppvVar18 = (void **)0x1;" (statement_identifier "code_r0x00011606") (: ":") (expression_statement "ppvVar18 = (void **)0x1;" (assignment_expression "ppvVar18 = (void **)0x1" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x1" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x1"))) (; ";"))) (expression_statement "local_1e0 = (stat64 *)pcVar10;" (assignment_expression "local_1e0 = (stat64 *)pcVar10" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)pcVar10" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pcVar10"))) (; ";")) (labeled_statement "LAB_0001160b:\n  do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );" (statement_identifier "LAB_0001160b") (: ":") (do_statement "do {\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);\n    if (uVar25 == 0) {\n      return ppvVar18;\n    }\n    uVar33 = FUN_00012f60();\nLAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);\n    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);\n    ppvVar27 = ppvVar18;\nLAB_00011f90:\n    local_1a0 = ppvVar27;\n    if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }\nLAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }\n    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }\nLAB_00011e81:\n    uVar20 = (undefined4)lVar30;\n    if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }\nLAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);\n    iVar15 = (int)lVar30;\n    if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }\n    if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }\n    uVar33 = CONCAT44(uVar7,iVar15);\n    if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }\n    ppvVar18 = (void **)uVar33;\n    if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }\n    if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }\n  }" ({ "{") (expression_statement "uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);" (assignment_expression "uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" (identifier "uVar25") (= "=") (binary_expression "local_24 ^ *(uint *)(in_GS_OFFSET + 0x14)" (identifier "local_24") (^ "^") (pointer_expression "*(uint *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(uint *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")")))))) (; ";")) (if_statement "if (uVar25 == 0) {\n      return ppvVar18;\n    }" (if "if") (parenthesized_expression "(uVar25 == 0)" (( "(") (binary_expression "uVar25 == 0" (identifier "uVar25") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return ppvVar18;\n    }" ({ "{") (return_statement "return ppvVar18;" (return "return") (identifier "ppvVar18") (; ";")) (} "}"))) (expression_statement "uVar33 = FUN_00012f60();" (assignment_expression "uVar33 = FUN_00012f60()" (identifier "uVar33") (= "=") (call_expression "FUN_00012f60()" (identifier "FUN_00012f60") (argument_list "()" (( "(") () ")")))) (; ";")) (labeled_statement "LAB_00012469:\n    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);" (statement_identifier "LAB_00012469") (: ":") (expression_statement "ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);" (assignment_expression "ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20)" (identifier "ppvVar36") (= "=") (cast_expression "(void **)((ulonglong)uVar33 >> 0x20)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((ulonglong)uVar33 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar33")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";"))) (expression_statement "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);" (call_expression "pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36)" (identifier "pr2serr") (argument_list "(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36)" (( "(") (string_literal "", %d bytes per WRITE BUFFER command\n"" (" """) (string_content ", %d bytes per WRITE BUFFER command") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar33") (, ",") (identifier "ppvVar36") () ")"))) (; ";")) (expression_statement "ppvVar27 = ppvVar18;" (assignment_expression "ppvVar27 = ppvVar18" (identifier "ppvVar27") (= "=") (identifier "ppvVar18")) (; ";")) (labeled_statement "LAB_00011f90:\n    local_1a0 = ppvVar27;" (statement_identifier "LAB_00011f90") (: ":") (expression_statement "local_1a0 = ppvVar27;" (assignment_expression "local_1a0 = ppvVar27" (identifier "local_1a0") (= "=") (identifier "ppvVar27")) (; ";"))) (if_statement "if (local_1e0 != (stat64 *)0x0) {\n      close(uVar25);\n    }" (if "if") (parenthesized_expression "(local_1e0 != (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 != (stat64 *)0x0" (identifier "local_1e0") (!= "!=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      close(uVar25);\n    }" ({ "{") (expression_statement "close(uVar25);" (call_expression "close(uVar25)" (identifier "close") (argument_list "(uVar25)" (( "(") (identifier "uVar25") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_00011a5c:\n    if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }" (statement_identifier "LAB_00011a5c") (: ":") (if_statement "if ((int)local_18c < (int)local_1a0) {\n      local_18c = local_1a0;\n    }" (if "if") (parenthesized_expression "((int)local_18c < (int)local_1a0)" (( "(") (binary_expression "(int)local_18c < (int)local_1a0" (cast_expression "(int)local_18c" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_18c")) (< "<") (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0"))) () ")")) (compound_statement "{\n      local_18c = local_1a0;\n    }" ({ "{") (expression_statement "local_18c = local_1a0;" (assignment_expression "local_18c = local_1a0" (identifier "local_18c") (= "=") (identifier "local_1a0")) (; ";")) (} "}")))) (if_statement "if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }\n    else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" (if "if") (parenthesized_expression "((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0))" (( "(") (binary_expression "(local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)" (parenthesized_expression "(local_1b0._2_1_ == '\0')" (( "(") (binary_expression "local_1b0._2_1_ == '\0'" (field_expression "local_1b0._2_1_" (identifier "local_1b0") (. ".") (field_identifier "_2_1_")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(local_19c != (undefined *)0x0)" (( "(") (binary_expression "local_19c != (undefined *)0x0" (identifier "local_19c") (!= "!=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n      ppvVar6 = (void **)(uint)(3 < local_188);\n      ppvVar18 = &local_1c0;\n      ppvVar36 = (void **)0x0;\n      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);\n      local_1e0 = (stat64 *)lVar30;\n      if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }\n    }" ({ "{") (expression_statement "ppvVar6 = (void **)(uint)(3 < local_188);" (assignment_expression "ppvVar6 = (void **)(uint)(3 < local_188)" (identifier "ppvVar6") (= "=") (cast_expression "(void **)(uint)(3 < local_188)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "(uint)(3 < local_188)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(3 < local_188)" (( "(") (binary_expression "3 < local_188" (number_literal "3") (< "<") (identifier "local_188")) () ")"))))) (; ";")) (expression_statement "ppvVar18 = &local_1c0;" (assignment_expression "ppvVar18 = &local_1c0" (identifier "ppvVar18") (= "=") (pointer_expression "&local_1c0" (& "&") (identifier "local_1c0"))) (; ";")) (expression_statement "ppvVar36 = (void **)0x0;" (assignment_expression "ppvVar36 = (void **)0x0" (identifier "ppvVar36") (= "=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);" (assignment_expression "lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6)" (identifier "lVar30") (= "=") (call_expression "sg_memalign(0x2000,0,ppvVar18,ppvVar6)" (identifier "sg_memalign") (argument_list "(0x2000,0,ppvVar18,ppvVar6)" (( "(") (number_literal "0x2000") (, ",") (number_literal "0") (, ",") (identifier "ppvVar18") (, ",") (identifier "ppvVar6") () ")")))) (; ";")) (expression_statement "local_1e0 = (stat64 *)lVar30;" (assignment_expression "local_1e0 = (stat64 *)lVar30" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)lVar30" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "lVar30"))) (; ";")) (if_statement "if (local_1e0 == (stat64 *)0x0) {\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }\n      else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" (if "if") (parenthesized_expression "(local_1e0 == (stat64 *)0x0)" (( "(") (binary_expression "local_1e0 == (stat64 *)0x0" (identifier "local_1e0") (== "==") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");\n        lVar30 = CONCAT44(extraout_EDX_17,99);\n      }" ({ "{") (expression_statement "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");" (call_expression "pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n")" (identifier "pr2serr") (argument_list "("sg_ses_microcode: out of memory (data-in buffer)\n")" (( "(") (string_literal ""sg_ses_microcode: out of memory (data-in buffer)\n"" (" """) (string_content "sg_ses_microcode: out of memory (data-in buffer)") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (expression_statement "lVar30 = CONCAT44(extraout_EDX_17,99);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_17,99)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(extraout_EDX_17,99)" (identifier "CONCAT44") (argument_list "(extraout_EDX_17,99)" (( "(") (identifier "extraout_EDX_17") (, ",") (number_literal "99") () ")")))) (; ";")) (} "}")) (else_clause "else {\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" (else "else") (compound_statement "{\n        if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }\n        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }\n        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);\n        if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }\n      }" ({ "{") (if_statement "if ((char)local_1b0 == '\0') {\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }\n        else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" (if "if") (parenthesized_expression "((char)local_1b0 == '\0')" (( "(") (binary_expression "(char)local_1b0 == '\0'" (cast_expression "(char)local_1b0" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "local_1b0")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          iVar15 = 1;\n          if (0 < local_188) {\n            iVar15 = local_188;\n          }\n          lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);\n          ppvVar27 = (void **)lVar30;\n          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar22 = (void **)(0x2000 - local_1c4);\n          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = extraout_ECX_05;\n          ppvVar28 = ppvVar8;\n          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;\n          ppvVar28 = (void **)0x2000;\n          ppvVar36 = (void **)0x2000;\n          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);\n          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);\n          ppvVar12 = (void **)uVar33;\n          puVar16 = extraout_ECX_06;\n          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;\n        }" ({ "{") (expression_statement "iVar15 = 1;" (assignment_expression "iVar15 = 1" (identifier "iVar15") (= "=") (number_literal "1")) (; ";")) (if_statement "if (0 < local_188) {\n            iVar15 = local_188;\n          }" (if "if") (parenthesized_expression "(0 < local_188)" (( "(") (binary_expression "0 < local_188" (number_literal "0") (< "<") (identifier "local_188")) () ")")) (compound_statement "{\n            iVar15 = local_188;\n          }" ({ "{") (expression_statement "iVar15 = local_188;" (assignment_expression "iVar15 = local_188" (identifier "iVar15") (= "=") (identifier "local_188")) (; ";")) (} "}"))) (expression_statement "lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);" (assignment_expression "lVar30 = sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" (identifier "lVar30") (= "=") (call_expression "sg_ll_receive_diag_v2\n                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" (identifier "sg_ll_receive_diag_v2") (argument_list "(local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1)" (( "(") (identifier "local_1dc") (, ",") (number_literal "1") (, ",") (number_literal "0xe") (, ",") (identifier "local_1e0") (, ",") (number_literal "0x2000") (, ",") (number_literal "0") (, ",") (pointer_expression "&local_1c4" (& "&") (identifier "local_1c4")) (, ",") (number_literal "1") (, ",") (binary_expression "iVar15 + -1" (identifier "iVar15") (+ "+") (number_literal "-1")) () ")")))) (; ";")) (expression_statement "ppvVar27 = (void **)lVar30;" (assignment_expression "ppvVar27 = (void **)lVar30" (identifier "ppvVar27") (= "=") (cast_expression "(void **)lVar30" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "lVar30"))) (; ";")) (if_statement "if (ppvVar27 != (void **)0x0) goto LAB_00011e81;" (if "if") (parenthesized_expression "(ppvVar27 != (void **)0x0)" (( "(") (binary_expression "ppvVar27 != (void **)0x0" (identifier "ppvVar27") (!= "!=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00011e81;" (goto "goto") (statement_identifier "LAB_00011e81") (; ";"))) (expression_statement "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" (* "*") (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_1e0->st_dev + 2)" (( "(") (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev")))) (+ "+") (number_literal "2")) () ")"))))) (; ";")) (expression_statement "ppvVar22 = (void **)(0x2000 - local_1c4);" (assignment_expression "ppvVar22 = (void **)(0x2000 - local_1c4)" (identifier "ppvVar22") (= "=") (cast_expression "(void **)(0x2000 - local_1c4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(0x2000 - local_1c4)" (( "(") (binary_expression "0x2000 - local_1c4" (number_literal "0x2000") (- "-") (identifier "local_1c4")) () ")")))) (; ";")) (expression_statement "ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);" (assignment_expression "ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" (identifier "ppvVar8") (= "=") (cast_expression "(void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" (( "(") (binary_expression "(ushort)(uVar1 << 8 | uVar1 >> 8) + 4" (call_expression "(ushort)(uVar1 << 8 | uVar1 >> 8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(uVar1 << 8 | uVar1 >> 8)" (( "(") (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" (identifier "uVar1") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar1 >> 8" (identifier "uVar1") (>> ">>") (number_literal "8"))) () ")"))) (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "puVar16 = extraout_ECX_05;" (assignment_expression "puVar16 = extraout_ECX_05" (identifier "puVar16") (= "=") (identifier "extraout_ECX_05")) (; ";")) (expression_statement "ppvVar28 = ppvVar8;" (assignment_expression "ppvVar28 = ppvVar8" (identifier "ppvVar28") (= "=") (identifier "ppvVar8")) (; ";")) (if_statement "if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;" (if "if") (parenthesized_expression "(ppvVar8 < (void **)0x2001)" (( "(") (binary_expression "ppvVar8 < (void **)0x2001" (identifier "ppvVar8") (< "<") (cast_expression "(void **)0x2001" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x2001"))) () ")")) (goto_statement "goto LAB_00011b07;" (goto "goto") (statement_identifier "LAB_00011b07") (; ";"))) (expression_statement "ppvVar28 = (void **)0x2000;" (assignment_expression "ppvVar28 = (void **)0x2000" (identifier "ppvVar28") (= "=") (cast_expression "(void **)0x2000" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x2000"))) (; ";")) (expression_statement "ppvVar36 = (void **)0x2000;" (assignment_expression "ppvVar36 = (void **)0x2000" (identifier "ppvVar36") (= "=") (cast_expression "(void **)0x2000" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x2000"))) (; ";")) (expression_statement "uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0);" (assignment_expression "uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" (identifier "uVar33") (= "=") (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" (identifier "pr2serr") (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,\n                           ppvVar8,0)" (( "(") (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" (" """) (string_content "<<< warning response buffer too small [%d but need %d]>>>") (escape_sequence "\n") (" """)) (, ",") (number_literal "0x2000") (, ",") (identifier "ppvVar8") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "uVar25 = (uint)((ulonglong)uVar33 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)uVar33 >> 0x20)" (identifier "uVar25") (= "=") (call_expression "(uint)((ulonglong)uVar33 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)uVar33 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar33")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "ppvVar12 = (void **)uVar33;" (assignment_expression "ppvVar12 = (void **)uVar33" (identifier "ppvVar12") (= "=") (cast_expression "(void **)uVar33" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "uVar33"))) (; ";")) (expression_statement "puVar16 = extraout_ECX_06;" (assignment_expression "puVar16 = extraout_ECX_06" (identifier "puVar16") (= "=") (identifier "extraout_ECX_06")) (; ";")) (if_statement "if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;" (if "if") (parenthesized_expression "((int)ppvVar22 < 0x2000)" (( "(") (binary_expression "(int)ppvVar22 < 0x2000" (cast_expression "(int)ppvVar22" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar22")) (< "<") (number_literal "0x2000")) () ")")) (goto_statement "goto LAB_00011ddf;" (goto "goto") (statement_identifier "LAB_00011ddf") (; ";"))) (} "}")) (else_clause "else {\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" (else "else") (compound_statement "{\n          puVar21 = &DAT_00016020;\n          psVar14 = local_1e0;\n          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }\n          ppvVar22 = (void **)0x48;\n          local_1c4 = 0x1fb8;\n          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);\n          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);\n          puVar16 = (undefined *)0x0;\n          ppvVar28 = ppvVar27;\n          if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }\n          if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }\n        }" ({ "{") (expression_statement "puVar21 = &DAT_00016020;" (assignment_expression "puVar21 = &DAT_00016020" (identifier "puVar21") (= "=") (pointer_expression "&DAT_00016020" (& "&") (identifier "DAT_00016020"))) (; ";")) (expression_statement "psVar14 = local_1e0;" (assignment_expression "psVar14 = local_1e0" (identifier "psVar14") (= "=") (identifier "local_1e0")) (; ";")) (for_statement "for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }" (for "for") (( "(") (assignment_expression "iVar15 = 0x12" (identifier "iVar15") (= "=") (number_literal "0x12")) (; ";") (binary_expression "iVar15 != 0" (identifier "iVar15") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "iVar15 = iVar15 + -1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + -1" (identifier "iVar15") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n            *(undefined4 *)&psVar14->st_dev = *puVar21;\n            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;\n            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);\n          }" ({ "{") (expression_statement "*(undefined4 *)&psVar14->st_dev = *puVar21;" (assignment_expression "*(undefined4 *)&psVar14->st_dev = *puVar21" (pointer_expression "*(undefined4 *)&psVar14->st_dev" (* "*") (cast_expression "(undefined4 *)&psVar14->st_dev" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&psVar14->st_dev" (& "&") (field_expression "psVar14->st_dev" (identifier "psVar14") (-> "->") (field_identifier "st_dev"))))) (= "=") (pointer_expression "*puVar21" (* "*") (identifier "puVar21"))) (; ";")) (expression_statement "puVar21 = puVar21 + (uint)bVar29 * -2 + 1;" (assignment_expression "puVar21 = puVar21 + (uint)bVar29 * -2 + 1" (identifier "puVar21") (= "=") (binary_expression "puVar21 + (uint)bVar29 * -2 + 1" (binary_expression "puVar21 + (uint)bVar29 * -2" (identifier "puVar21") (+ "+") (binary_expression "(uint)bVar29 * -2" (cast_expression "(uint)bVar29" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar29")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);" (assignment_expression "psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4)" (identifier "psVar14") (= "=") (cast_expression "(stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4)" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)psVar14 + (uint)bVar29 * -8 + 4)" (( "(") (binary_expression "(int)psVar14 + (uint)bVar29 * -8 + 4" (binary_expression "(int)psVar14 + (uint)bVar29 * -8" (cast_expression "(int)psVar14" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "psVar14")) (+ "+") (binary_expression "(uint)bVar29 * -8" (cast_expression "(uint)bVar29" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar29")) (* "*") (number_literal "-8"))) (+ "+") (number_literal "4")) () ")")))) (; ";")) (} "}"))) (expression_statement "ppvVar22 = (void **)0x48;" (assignment_expression "ppvVar22 = (void **)0x48" (identifier "ppvVar22") (= "=") (cast_expression "(void **)0x48" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x48"))) (; ";")) (expression_statement "local_1c4 = 0x1fb8;" (assignment_expression "local_1c4 = 0x1fb8" (identifier "local_1c4") (= "=") (number_literal "0x1fb8")) (; ";")) (expression_statement "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);" (assignment_expression "uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)((int)&local_1e0->st_dev + 2)" (* "*") (cast_expression "(ushort *)((int)&local_1e0->st_dev + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_1e0->st_dev + 2)" (( "(") (binary_expression "(int)&local_1e0->st_dev + 2" (cast_expression "(int)&local_1e0->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev")))) (+ "+") (number_literal "2")) () ")"))))) (; ";")) (expression_statement "ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);" (assignment_expression "ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" (identifier "ppvVar27") (= "=") (cast_expression "(void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((ushort)(uVar1 << 8 | uVar1 >> 8) + 4)" (( "(") (binary_expression "(ushort)(uVar1 << 8 | uVar1 >> 8) + 4" (call_expression "(ushort)(uVar1 << 8 | uVar1 >> 8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(uVar1 << 8 | uVar1 >> 8)" (( "(") (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" (identifier "uVar1") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar1 >> 8" (identifier "uVar1") (>> ">>") (number_literal "8"))) () ")"))) (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "puVar16 = (undefined *)0x0;" (assignment_expression "puVar16 = (undefined *)0x0" (identifier "puVar16") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "ppvVar28 = ppvVar27;" (assignment_expression "ppvVar28 = ppvVar27" (identifier "ppvVar28") (= "=") (identifier "ppvVar27")) (; ";")) (if_statement "if (ppvVar27 < (void **)0x2001) {\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }\n          else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" (if "if") (parenthesized_expression "(ppvVar27 < (void **)0x2001)" (( "(") (binary_expression "ppvVar27 < (void **)0x2001" (identifier "ppvVar27") (< "<") (cast_expression "(void **)0x2001" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x2001"))) () ")")) (compound_statement "{\nLAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n            ppvVar12 = (void **)lVar30;\n            ppvVar8 = ppvVar18;\n            ppvVar27 = ppvVar6;\n            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;\n          }" ({ "{") (labeled_statement "LAB_00011b07:\n            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (statement_identifier "LAB_00011b07") (: ":") (expression_statement "uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)lVar30 >> 0x20)" (identifier "uVar25") (= "=") (call_expression "(uint)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar30 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar30")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";"))) (expression_statement "ppvVar12 = (void **)lVar30;" (assignment_expression "ppvVar12 = (void **)lVar30" (identifier "ppvVar12") (= "=") (cast_expression "(void **)lVar30" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "lVar30"))) (; ";")) (expression_statement "ppvVar8 = ppvVar18;" (assignment_expression "ppvVar8 = ppvVar18" (identifier "ppvVar8") (= "=") (identifier "ppvVar18")) (; ";")) (expression_statement "ppvVar27 = ppvVar6;" (assignment_expression "ppvVar27 = ppvVar6" (identifier "ppvVar27") (= "=") (identifier "ppvVar6")) (; ";")) (if_statement "if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;" (if "if") (parenthesized_expression "((int)ppvVar22 < (int)ppvVar28)" (( "(") (binary_expression "(int)ppvVar22 < (int)ppvVar28" (cast_expression "(int)ppvVar22" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar22")) (< "<") (cast_expression "(int)ppvVar28" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar28"))) () ")")) (goto_statement "goto LAB_00011ddf;" (goto "goto") (statement_identifier "LAB_00011ddf") (; ";"))) (} "}")) (else_clause "else {\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" (else "else") (compound_statement "{\n            ppvVar28 = (void **)0x2000;\n            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);\nLAB_00011ddf:\n            ppvVar36 = ppvVar22;\n            ppvVar8 = ppvVar28;\n            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);\n            puVar16 = extraout_ECX_07;\n            uVar25 = extraout_EDX_05;\n            ppvVar28 = ppvVar22;\n            ppvVar27 = ppvVar12;\n          }" ({ "{") (expression_statement "ppvVar28 = (void **)0x2000;" (assignment_expression "ppvVar28 = (void **)0x2000" (identifier "ppvVar28") (= "=") (cast_expression "(void **)0x2000" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x2000"))) (; ";")) (expression_statement "ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0);" (assignment_expression "ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" (identifier "ppvVar12") (= "=") (cast_expression "(void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" (identifier "pr2serr") (argument_list "("<<< warning response buffer too small [%d but need %d]>>>\n"\n                                        ,0x2000,ppvVar27,local_1e0)" (( "(") (string_literal ""<<< warning response buffer too small [%d but need %d]>>>\n"" (" """) (string_content "<<< warning response buffer too small [%d but need %d]>>>") (escape_sequence "\n") (" """)) (, ",") (number_literal "0x2000") (, ",") (identifier "ppvVar27") (, ",") (identifier "local_1e0") () ")"))))) (; ";")) (labeled_statement "LAB_00011ddf:\n            ppvVar36 = ppvVar22;" (statement_identifier "LAB_00011ddf") (: ":") (expression_statement "ppvVar36 = ppvVar22;" (assignment_expression "ppvVar36 = ppvVar22" (identifier "ppvVar36") (= "=") (identifier "ppvVar22")) (; ";"))) (expression_statement "ppvVar8 = ppvVar28;" (assignment_expression "ppvVar8 = ppvVar28" (identifier "ppvVar8") (= "=") (identifier "ppvVar28")) (; ";")) (expression_statement "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12);" (call_expression "pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12)" (identifier "pr2serr") (argument_list "("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,\n                    ppvVar28,ppvVar12)" (( "(") (string_literal ""<<< warning response too short [actually got %d but need %d]>>>\n"" (" """) (string_content "<<< warning response too short [actually got %d but need %d]>>>") (escape_sequence "\n") (" """)) (, ",") (identifier "ppvVar22") (, ",") (identifier "ppvVar28") (, ",") (identifier "ppvVar12") () ")"))) (; ";")) (expression_statement "puVar16 = extraout_ECX_07;" (assignment_expression "puVar16 = extraout_ECX_07" (identifier "puVar16") (= "=") (identifier "extraout_ECX_07")) (; ";")) (expression_statement "uVar25 = extraout_EDX_05;" (assignment_expression "uVar25 = extraout_EDX_05" (identifier "uVar25") (= "=") (identifier "extraout_EDX_05")) (; ";")) (expression_statement "ppvVar28 = ppvVar22;" (assignment_expression "ppvVar28 = ppvVar22" (identifier "ppvVar28") (= "=") (identifier "ppvVar22")) (; ";")) (expression_statement "ppvVar27 = ppvVar12;" (assignment_expression "ppvVar27 = ppvVar12" (identifier "ppvVar27") (= "=") (identifier "ppvVar12")) (; ";")) (} "}")))) (if_statement "if ((int)ppvVar28 < 8) {\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }" (if "if") (parenthesized_expression "((int)ppvVar28 < 8)" (( "(") (binary_expression "(int)ppvVar28 < 8" (cast_expression "(int)ppvVar28" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar28")) (< "<") (number_literal "8")) () ")")) (compound_statement "{\n            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);\n            lVar30 = CONCAT44(extraout_EDX_10,99);\n            goto LAB_00011e81;\n          }" ({ "{") (expression_statement "pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);" (call_expression "pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27)" (identifier "pr2serr") (argument_list "("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27)" (( "(") (string_literal ""Download microcode status dpage too short\n"" (" """) (string_content "Download microcode status dpage too short") (escape_sequence "\n") (" """)) (, ",") (identifier "ppvVar36") (, ",") (identifier "ppvVar8") (, ",") (identifier "ppvVar27") () ")"))) (; ";")) (expression_statement "lVar30 = CONCAT44(extraout_EDX_10,99);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_10,99)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(extraout_EDX_10,99)" (identifier "CONCAT44") (argument_list "(extraout_EDX_10,99)" (( "(") (identifier "extraout_EDX_10") (, ",") (number_literal "99") () ")")))) (; ";")) (goto_statement "goto LAB_00011e81;" (goto "goto") (statement_identifier "LAB_00011e81") (; ";")) (} "}"))) (} "}")))) (if_statement "if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }" (if "if") (parenthesized_expression "((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0))))" (( "(") (binary_expression "(2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))" (parenthesized_expression "(2 < local_188)" (( "(") (binary_expression "2 < local_188" (number_literal "2") (< "<") (identifier "local_188")) () ")")) (|| "||") (parenthesized_expression "(((char)local_1b0 != '\0' && (local_188 != 0)))" (( "(") (parenthesized_expression "((char)local_1b0 != '\0' && (local_188 != 0))" (( "(") (binary_expression "(char)local_1b0 != '\0' && (local_188 != 0)" (binary_expression "(char)local_1b0 != '\0'" (cast_expression "(char)local_1b0" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "local_1b0")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (&& "&&") (parenthesized_expression "(local_188 != 0)" (( "(") (binary_expression "local_188 != 0" (identifier "local_188") (!= "!=") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);\n          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);\n          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);\n          ppvVar36 = ppvVar28;\n          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);\n          puVar16 = extraout_ECX_08;\n          uVar25 = extraout_EDX_09;\n        }" ({ "{") (expression_statement "uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar25 = *(uint *)((int)&local_1e0->st_dev + 4)" (identifier "uVar25") (= "=") (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" (* "*") (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_1e0->st_dev + 4)" (( "(") (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev")))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18);" (assignment_expression "ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" (identifier "ppvVar27") (= "=") (cast_expression "(void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18)" (( "(") (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                              uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" (identifier "uVar25") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" (( "(") (binary_expression "uVar25 & 0xff0000" (identifier "uVar25") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" (( "(") (binary_expression "uVar25 & 0xff00" (identifier "uVar25") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar25 << 0x18" (identifier "uVar25") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);" (assignment_expression "ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" (identifier "ppvVar8") (= "=") (binary_expression "(void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1)" (cast_expression "(void **)(uint)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")"))) (* "*") (cast_expression "(byte *)((int)&local_1e0->st_dev + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_1e0->st_dev + 1)" (( "(") (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev")))) (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "ppvVar36 = ppvVar28;" (assignment_expression "ppvVar36 = ppvVar28" (identifier "ppvVar36") (= "=") (identifier "ppvVar28")) (; ";")) (expression_statement "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27);" (call_expression "pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27)" (identifier "pr2serr") (argument_list "("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,\n                  ppvVar27)" (( "(") (string_literal ""rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n"" (" """) (string_content "rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u") (escape_sequence "\n") (" """)) (, ",") (identifier "ppvVar28") (, ",") (identifier "ppvVar8") (, ",") (identifier "ppvVar27") () ")"))) (; ";")) (expression_statement "puVar16 = extraout_ECX_08;" (assignment_expression "puVar16 = extraout_ECX_08" (identifier "puVar16") (= "=") (identifier "extraout_ECX_08")) (; ";")) (expression_statement "uVar25 = extraout_EDX_09;" (assignment_expression "uVar25 = extraout_EDX_09" (identifier "uVar25") (= "=") (identifier "extraout_EDX_09")) (; ";")) (} "}"))) (expression_statement "uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);" (assignment_expression "uVar34 = *(uint *)((int)&local_1e0->st_dev + 4)" (identifier "uVar34") (= "=") (pointer_expression "*(uint *)((int)&local_1e0->st_dev + 4)" (* "*") (cast_expression "(uint *)((int)&local_1e0->st_dev + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_1e0->st_dev + 4)" (( "(") (binary_expression "(int)&local_1e0->st_dev + 4" (cast_expression "(int)&local_1e0->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev")))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (local_19c == (undefined *)0x0) {\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }\n        else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" (if "if") (parenthesized_expression "(local_19c == (undefined *)0x0)" (( "(") (binary_expression "local_19c == (undefined *)0x0" (identifier "local_19c") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          puts("Download microcode status diagnostic page:");\n          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);\n          ppvVar28 = ppvVar28 + -2;\n          uVar7 = extraout_ECX_10;\n          if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }\n          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);\n          __printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);\n          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);\n          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }\n        }" ({ "{") (expression_statement "puts("Download microcode status diagnostic page:");" (call_expression "puts("Download microcode status diagnostic page:")" (identifier "puts") (argument_list "("Download microcode status diagnostic page:")" (( "(") (string_literal ""Download microcode status diagnostic page:"" (" """) (string_content "Download microcode status diagnostic page:") (" """)) () ")"))) (; ";")) (expression_statement "cVar4 = *(char *)((int)&local_1e0->st_dev + 1);" (assignment_expression "cVar4 = *(char *)((int)&local_1e0->st_dev + 1)" (identifier "cVar4") (= "=") (pointer_expression "*(char *)((int)&local_1e0->st_dev + 1)" (* "*") (cast_expression "(char *)((int)&local_1e0->st_dev + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_1e0->st_dev + 1)" (( "(") (binary_expression "(int)&local_1e0->st_dev + 1" (cast_expression "(int)&local_1e0->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev")))) (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "ppvVar28 = ppvVar28 + -2;" (assignment_expression "ppvVar28 = ppvVar28 + -2" (identifier "ppvVar28") (= "=") (binary_expression "ppvVar28 + -2" (identifier "ppvVar28") (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "uVar7 = extraout_ECX_10;" (assignment_expression "uVar7 = extraout_ECX_10" (identifier "uVar7") (= "=") (identifier "extraout_ECX_10")) (; ";")) (if_statement "if (((uint)ppvVar28 & 0xf) != 0) {\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }" (if "if") (parenthesized_expression "(((uint)ppvVar28 & 0xf) != 0)" (( "(") (binary_expression "((uint)ppvVar28 & 0xf) != 0" (parenthesized_expression "((uint)ppvVar28 & 0xf)" (( "(") (binary_expression "(uint)ppvVar28 & 0xf" (cast_expression "(uint)ppvVar28" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "ppvVar28")) (& "&") (number_literal "0xf")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);\n            uVar7 = extraout_ECX_13;\n          }" ({ "{") (expression_statement "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);" (call_expression "pr2serr("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28)" (identifier "pr2serr") (argument_list "("Found %d Download microcode status descriptors, but there is residual\n",\n                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28)" (( "(") (string_literal ""Found %d Download microcode status descriptors, but there is residual\n"" (" """) (string_content "Found %d Download microcode status descriptors, but there is residual") (escape_sequence "\n") (" """)) (, ",") (binary_expression "(int)ppvVar28 >> 4" (cast_expression "(int)ppvVar28" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar28")) (>> ">>") (number_literal "4")) (, ",") (identifier "ppvVar28") (, ",") (identifier "ppvVar28") () ")"))) (; ";")) (expression_statement "uVar7 = extraout_ECX_13;" (assignment_expression "uVar7 = extraout_ECX_13" (identifier "uVar7") (= "=") (identifier "extraout_ECX_13")) (; ";")) (} "}"))) (expression_statement "__printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);" (call_expression "__printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7)" (identifier "__printf_chk") (argument_list "(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7)" (( "(") (number_literal "1") (, ",") (string_literal ""  number of secondary subenclosures: %d\n"" (" """) (string_content "  number of secondary subenclosures: %d") (escape_sequence "\n") (" """)) (, ",") (identifier "cVar4") (, ",") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "__printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18);" (call_expression "__printf_chk(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18)" (identifier "__printf_chk") (argument_list "(1,"  generation code: 0x%x\n",\n                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18)" (( "(") (number_literal "1") (, ",") (string_literal ""  generation code: 0x%x\n"" (" """) (string_content "  generation code: 0x%x") (escape_sequence "\n") (" """)) (, ",") (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |\n                       uVar34 << 0x18" (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8" (binary_expression "uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8" (binary_expression "uVar34 >> 0x18" (identifier "uVar34") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar34 & 0xff0000) >> 8" (parenthesized_expression "(uVar34 & 0xff0000)" (( "(") (binary_expression "uVar34 & 0xff0000" (identifier "uVar34") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar34 & 0xff00) << 8" (parenthesized_expression "(uVar34 & 0xff00)" (( "(") (binary_expression "uVar34 & 0xff00" (identifier "uVar34") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar34 << 0x18" (identifier "uVar34") (<< "<<") (number_literal "0x18"))) () ")"))) (; ";")) (expression_statement "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);" (assignment_expression "local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" (identifier "local_1d4") (= "=") (cast_expression "(stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2)" (( "(") (binary_expression "&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2" (pointer_expression "&local_1e0->st_dev" (& "&") (field_expression "local_1e0->st_dev" (identifier "local_1e0") (-> "->") (field_identifier "st_dev"))) (+ "+") (binary_expression "((int)ppvVar28 >> 4) * 2" (parenthesized_expression "((int)ppvVar28 >> 4)" (( "(") (binary_expression "(int)ppvVar28 >> 4" (cast_expression "(int)ppvVar28" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar28")) (>> ">>") (number_literal "4")) () ")")) (* "*") (number_literal "2"))) () ")")))) (; ";")) (for_statement "for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;\n              psVar14 = (stat64 *)&psVar14->st_mode) {\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }" (for "for") (( "(") (assignment_expression "psVar14 = local_1e0" (identifier "psVar14") (= "=") (identifier "local_1e0")) (; ";") (comma_expression "lVar30 = ZEXT48(local_1e0) << 0x20,\n              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14" (assignment_expression "lVar30 = ZEXT48(local_1e0) << 0x20" (identifier "lVar30") (= "=") (binary_expression "ZEXT48(local_1e0) << 0x20" (call_expression "ZEXT48(local_1e0)" (identifier "ZEXT48") (argument_list "(local_1e0)" (( "(") (identifier "local_1e0") () ")"))) (<< "<<") (number_literal "0x20"))) (, ",") (comma_expression "local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14" (assignment_expression "local_1e0 = (stat64 *)" [primary]"" (identifier "local_1e0") (= "=") (cast_expression "(stat64 *)" [primary]"" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal "" [primary]"" (" """) (string_content " [primary]") (" """)))) (, ",") (binary_expression "local_1d4 != psVar14" (identifier "local_1d4") (!= "!=") (identifier "psVar14")))) (; ";") (assignment_expression "psVar14 = (stat64 *)&psVar14->st_mode" (identifier "psVar14") (= "=") (cast_expression "(stat64 *)&psVar14->st_mode" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&psVar14->st_mode" (& "&") (field_expression "psVar14->st_mode" (identifier "psVar14") (-> "->") (field_identifier "st_mode"))))) () ")") (compound_statement "{\n            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);\n            pcVar10 = "";\n            if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }\n            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);\n            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);\n            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }\n            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));\n            uVar7 = extraout_EDX_13;\nLAB_0001225d:\n            uVar25 = psVar14->__st_ino;\n            __printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);\n            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));\n            uVar25 = psVar14->st_nlink;\n            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);\n            local_1e0 = extraout_EDX_14;\n          }" ({ "{") (expression_statement "cVar4 = *(char *)((int)&psVar14->__pad1 + 1);" (assignment_expression "cVar4 = *(char *)((int)&psVar14->__pad1 + 1)" (identifier "cVar4") (= "=") (pointer_expression "*(char *)((int)&psVar14->__pad1 + 1)" (* "*") (cast_expression "(char *)((int)&psVar14->__pad1 + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&psVar14->__pad1 + 1)" (( "(") (binary_expression "(int)&psVar14->__pad1 + 1" (cast_expression "(int)&psVar14->__pad1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->__pad1" (& "&") (field_expression "psVar14->__pad1" (identifier "psVar14") (-> "->") (field_identifier "__pad1")))) (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "pcVar10 = "";" (assignment_expression "pcVar10 = """ (identifier "pcVar10") (= "=") (string_literal """" (" """) (" """))) (; ";")) (if_statement "if (cVar4 == '\0') {\n              pcVar10 = " [primary]";\n            }" (if "if") (parenthesized_expression "(cVar4 == '\0')" (( "(") (binary_expression "cVar4 == '\0'" (identifier "cVar4") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n              pcVar10 = " [primary]";\n            }" ({ "{") (expression_statement "pcVar10 = " [primary]";" (assignment_expression "pcVar10 = " [primary]"" (identifier "pcVar10") (= "=") (string_literal "" [primary]"" (" """) (string_content " [primary]") (" """))) (; ";")) (} "}"))) (expression_statement "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);" (call_expression "__printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10)" (identifier "__printf_chk") (argument_list "(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10)" (( "(") (number_literal "1") (, ",") (string_literal ""   subenclosure identifier: %d%s\n"" (" """) (string_content "   subenclosure identifier: %d%s") (escape_sequence "\n") (" """)) (, ",") (identifier "cVar4") (, ",") (identifier "pcVar10") () ")"))) (; ";")) (expression_statement "uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);" (assignment_expression "uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2)" (identifier "uVar25") (= "=") (binary_expression "(uint)*(byte *)((int)&psVar14->__pad1 + 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)((int)&psVar14->__pad1 + 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&psVar14->__pad1 + 2)" (( "(") (binary_expression "(int)&psVar14->__pad1 + 2" (cast_expression "(int)&psVar14->__pad1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->__pad1" (& "&") (field_expression "psVar14->__pad1" (identifier "psVar14") (-> "->") (field_identifier "__pad1")))) (+ "+") (number_literal "2")) () ")"))))) (; ";")) (for_statement "for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;\n                puVar11 = puVar11 + 2) {\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" (for "for") (( "(") (assignment_expression "puVar11 = &DAT_00016080" (identifier "puVar11") (= "=") (pointer_expression "&DAT_00016080" (& "&") (identifier "DAT_00016080"))) (; ";") (comma_expression "pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0" (assignment_expression "pcVar10 = (char *)puVar11[1]" (identifier "pcVar10") (= "=") (cast_expression "(char *)puVar11[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar11[1]" (identifier "puVar11") ([ "[") (number_literal "1") (] "]")))) (, ",") (binary_expression "pcVar10 != (char *)0x0" (identifier "pcVar10") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) (; ";") (assignment_expression "puVar11 = puVar11 + 2" (identifier "puVar11") (= "=") (binary_expression "puVar11 + 2" (identifier "puVar11") (+ "+") (number_literal "2"))) () ")") (compound_statement "{\n              if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }\n            }" ({ "{") (if_statement "if (uVar25 == *puVar11) {\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" (if "if") (parenthesized_expression "(uVar25 == *puVar11)" (( "(") (binary_expression "uVar25 == *puVar11" (identifier "uVar25") (== "==") (pointer_expression "*puVar11" (* "*") (identifier "puVar11"))) () ")")) (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }\n                break;\n              }" ({ "{") (if_statement "if (*pcVar10 != '\0') {\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }" (if "if") (parenthesized_expression "(*pcVar10 != '\0')" (( "(") (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" (* "*") (identifier "pcVar10")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);\n                  __printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));\n                  uVar7 = extraout_EDX_15;\n                  goto LAB_0001225d;\n                }" ({ "{") (expression_statement "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);" (call_expression "__printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25)" (identifier "__printf_chk") (argument_list "(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25)" (( "(") (number_literal "1") (, ",") (string_literal ""     download microcode status: %s [0x%x]\n"" (" """) (string_content "     download microcode status: %s [0x%x]") (escape_sequence "\n") (" """)) (, ",") (identifier "pcVar10") (, ",") (identifier "uVar25") () ")"))) (; ";")) (expression_statement "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3))" (identifier "__printf_chk") (argument_list "(1,"     download microcode additional status: 0x%x\n",\n                               *(undefined1 *)((int)&psVar14->__pad1 + 3))" (( "(") (number_literal "1") (, ",") (string_literal ""     download microcode additional status: 0x%x\n"" (" """) (string_content "     download microcode additional status: 0x%x") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "*(undefined1 *)((int)&psVar14->__pad1 + 3)" (* "*") (cast_expression "(undefined1 *)((int)&psVar14->__pad1 + 3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&psVar14->__pad1 + 3)" (( "(") (binary_expression "(int)&psVar14->__pad1 + 3" (cast_expression "(int)&psVar14->__pad1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->__pad1" (& "&") (field_expression "psVar14->__pad1" (identifier "psVar14") (-> "->") (field_identifier "__pad1")))) (+ "+") (number_literal "3")) () ")")))) () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_15;" (assignment_expression "uVar7 = extraout_EDX_15" (identifier "uVar7") (= "=") (identifier "extraout_EDX_15")) (; ";")) (goto_statement "goto LAB_0001225d;" (goto "goto") (statement_identifier "LAB_0001225d") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}"))) (expression_statement "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));" (call_expression "__printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3))" (identifier "__printf_chk") (argument_list "(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25\n                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3))" (( "(") (number_literal "1") (, ",") (string_literal ""     download microcode status: 0x%x [additional status: 0x%x]\n"" (" """) (string_content "     download microcode status: 0x%x [additional status: 0x%x]") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar25") (, ",") (pointer_expression "*(undefined1 *)((int)&psVar14->__pad1 + 3)" (* "*") (cast_expression "(undefined1 *)((int)&psVar14->__pad1 + 3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&psVar14->__pad1 + 3)" (( "(") (binary_expression "(int)&psVar14->__pad1 + 3" (cast_expression "(int)&psVar14->__pad1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->__pad1" (& "&") (field_expression "psVar14->__pad1" (identifier "psVar14") (-> "->") (field_identifier "__pad1")))) (+ "+") (number_literal "3")) () ")")))) () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_13;" (assignment_expression "uVar7 = extraout_EDX_13" (identifier "uVar7") (= "=") (identifier "extraout_EDX_13")) (; ";")) (labeled_statement "LAB_0001225d:\n            uVar25 = psVar14->__st_ino;" (statement_identifier "LAB_0001225d") (: ":") (expression_statement "uVar25 = psVar14->__st_ino;" (assignment_expression "uVar25 = psVar14->__st_ino" (identifier "uVar25") (= "=") (field_expression "psVar14->__st_ino" (identifier "psVar14") (-> "->") (field_identifier "__st_ino"))) (; ";"))) (expression_statement "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7);" (call_expression "__printf_chk(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7)" (identifier "__printf_chk") (argument_list "(1,"     download microcode maximum size: %u bytes\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18,uVar7)" (( "(") (number_literal "1") (, ",") (string_literal ""     download microcode maximum size: %u bytes\n"" (" """) (string_content "     download microcode maximum size: %u bytes") (escape_sequence "\n") (" """)) (, ",") (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" (identifier "uVar25") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" (( "(") (binary_expression "uVar25 & 0xff0000" (identifier "uVar25") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" (( "(") (binary_expression "uVar25 & 0xff00" (identifier "uVar25") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar25 << 0x18" (identifier "uVar25") (<< "<<") (number_literal "0x18"))) (, ",") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3));" (call_expression "__printf_chk(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3))" (identifier "__printf_chk") (argument_list "(1,"     download microcode expected buffer id: 0x%x\n",\n                         *(undefined1 *)((int)&psVar14->st_mode + 3))" (( "(") (number_literal "1") (, ",") (string_literal ""     download microcode expected buffer id: 0x%x\n"" (" """) (string_content "     download microcode expected buffer id: 0x%x") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "*(undefined1 *)((int)&psVar14->st_mode + 3)" (* "*") (cast_expression "(undefined1 *)((int)&psVar14->st_mode + 3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&psVar14->st_mode + 3)" (( "(") (binary_expression "(int)&psVar14->st_mode + 3" (cast_expression "(int)&psVar14->st_mode" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&psVar14->st_mode" (& "&") (field_expression "psVar14->st_mode" (identifier "psVar14") (-> "->") (field_identifier "st_mode")))) (+ "+") (number_literal "3")) () ")")))) () ")"))) (; ";")) (expression_statement "uVar25 = psVar14->st_nlink;" (assignment_expression "uVar25 = psVar14->st_nlink" (identifier "uVar25") (= "=") (field_expression "psVar14->st_nlink" (identifier "psVar14") (-> "->") (field_identifier "st_nlink"))) (; ";")) (expression_statement "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18);" (call_expression "__printf_chk(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18)" (identifier "__printf_chk") (argument_list "(1,"     download microcode expected buffer id offset: %u\n",\n                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18)" (( "(") (number_literal "1") (, ",") (string_literal ""     download microcode expected buffer id offset: %u\n"" (" """) (string_content "     download microcode expected buffer id offset: %u") (escape_sequence "\n") (" """)) (, ",") (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |\n                         uVar25 << 0x18" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8" (binary_expression "uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8" (binary_expression "uVar25 >> 0x18" (identifier "uVar25") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar25 & 0xff0000) >> 8" (parenthesized_expression "(uVar25 & 0xff0000)" (( "(") (binary_expression "uVar25 & 0xff0000" (identifier "uVar25") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar25 & 0xff00) << 8" (parenthesized_expression "(uVar25 & 0xff00)" (( "(") (binary_expression "uVar25 & 0xff00" (identifier "uVar25") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar25 << 0x18" (identifier "uVar25") (<< "<<") (number_literal "0x18"))) () ")"))) (; ";")) (expression_statement "local_1e0 = extraout_EDX_14;" (assignment_expression "local_1e0 = extraout_EDX_14" (identifier "local_1e0") (= "=") (identifier "extraout_EDX_14")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" (else "else") (compound_statement "{\n          puVar24 = local_19c;\n          if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }\n          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);\n        }" ({ "{") (expression_statement "puVar24 = local_19c;" (assignment_expression "puVar24 = local_19c" (identifier "puVar24") (= "=") (identifier "local_19c")) (; ";")) (if_statement "if ((byte)local_1d4 == '\0') {\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }\n          else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" (if "if") (parenthesized_expression "((byte)local_1d4 == '\0')" (( "(") (binary_expression "(byte)local_1d4 == '\0'" (cast_expression "(byte)local_1d4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1d4")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\nLAB_0001201a:\n            psVar14 = (stat64 *)0x0;\n            ppvVar18 = (void **)0x0;\n            puVar16 = puVar24;\n          }" ({ "{") (labeled_statement "LAB_0001201a:\n            psVar14 = (stat64 *)0x0;" (statement_identifier "LAB_0001201a") (: ":") (expression_statement "psVar14 = (stat64 *)0x0;" (assignment_expression "psVar14 = (stat64 *)0x0" (identifier "psVar14") (= "=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";"))) (expression_statement "ppvVar18 = (void **)0x0;" (assignment_expression "ppvVar18 = (void **)0x0" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "puVar16 = puVar24;" (assignment_expression "puVar16 = puVar24" (identifier "puVar16") (= "=") (identifier "puVar24")) (; ";")) (} "}")) (else_clause "else {\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" (else "else") (compound_statement "{\n            iVar15 = 0;\n            if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }\n            psVar14 = local_1d8;\n            ppvVar18 = local_1a0;\n            if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }\n          }" ({ "{") (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < (int)local_1a8) {\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }" (if "if") (parenthesized_expression "(0 < (int)local_1a8)" (( "(") (binary_expression "0 < (int)local_1a8" (number_literal "0") (< "<") (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8"))) () ")")) (compound_statement "{\n              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }\n              puVar24 = (undefined *)0x0;\n              lVar30 = (ulonglong)uVar25 << 0x20;\n              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;\n              local_19c = (undefined *)0xf;\n              if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }\n              goto LAB_0001201a;\n            }" ({ "{") (for_statement "for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }" (for "for") (( "(") (; ";") (binary_expression "iVar15 < (int)local_1a0" (identifier "iVar15") (< "<") (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0"))) (; ";") (assignment_expression "iVar15 = (int)ppvVar18 + iVar15" (identifier "iVar15") (= "=") (binary_expression "(int)ppvVar18 + iVar15" (cast_expression "(int)ppvVar18" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar18")) (+ "+") (identifier "iVar15"))) () ")") (compound_statement "{\n                ppvVar8 = local_1a8;\n                ppvVar18 = local_1a8;\n                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }\n                if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }\n                ppvVar36 = (void **)&local_1b0;\n                ppvVar27 = ppvVar8;\n                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);\n                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);\n                if ((int)lVar30 != 0) goto LAB_00011e81;\n              }" ({ "{") (expression_statement "ppvVar8 = local_1a8;" (assignment_expression "ppvVar8 = local_1a8" (identifier "ppvVar8") (= "=") (identifier "local_1a8")) (; ";")) (expression_statement "ppvVar18 = local_1a8;" (assignment_expression "ppvVar18 = local_1a8" (identifier "ppvVar18") (= "=") (identifier "local_1a8")) (; ";")) (if_statement "if ((int)local_1a0 - iVar15 <= (int)local_1a8) {\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }" (if "if") (parenthesized_expression "((int)local_1a0 - iVar15 <= (int)local_1a8)" (( "(") (binary_expression "(int)local_1a0 - iVar15 <= (int)local_1a8" (binary_expression "(int)local_1a0 - iVar15" (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0")) (- "-") (identifier "iVar15")) (<= "<=") (cast_expression "(int)local_1a8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a8"))) () ")")) (compound_statement "{\n                  local_1e9 = (byte)local_1d4;\n                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);\n                  ppvVar18 = (void **)((int)local_1a0 - iVar15);\n                }" ({ "{") (expression_statement "local_1e9 = (byte)local_1d4;" (assignment_expression "local_1e9 = (byte)local_1d4" (identifier "local_1e9") (= "=") (cast_expression "(byte)local_1d4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1d4"))) (; ";")) (expression_statement "ppvVar8 = (void **)((uint)local_1d4 & 0xff);" (assignment_expression "ppvVar8 = (void **)((uint)local_1d4 & 0xff)" (identifier "ppvVar8") (= "=") (cast_expression "(void **)((uint)local_1d4 & 0xff)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((uint)local_1d4 & 0xff)" (( "(") (binary_expression "(uint)local_1d4 & 0xff" (cast_expression "(uint)local_1d4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_1d4")) (& "&") (number_literal "0xff")) () ")")))) (; ";")) (expression_statement "ppvVar18 = (void **)((int)local_1a0 - iVar15);" (assignment_expression "ppvVar18 = (void **)((int)local_1a0 - iVar15)" (identifier "ppvVar18") (= "=") (cast_expression "(void **)((int)local_1a0 - iVar15)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((int)local_1a0 - iVar15)" (( "(") (binary_expression "(int)local_1a0 - iVar15" (cast_expression "(int)local_1a0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1a0")) (- "-") (identifier "iVar15")) () ")")))) (; ";")) (} "}"))) (if_statement "if (local_188 != 0) {\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }" (if "if") (parenthesized_expression "(local_188 != 0)" (( "(") (binary_expression "local_188 != 0" (identifier "local_188") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);\n                }" ({ "{") (expression_statement "ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8);" (assignment_expression "ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" (identifier "ppvVar8") (= "=") (cast_expression "(void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" (identifier "pr2serr") (argument_list "("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"\n                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,\n                                             ppvVar8)" (( "(") (string_literal ""bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"" (" """) (string_content "bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d") (escape_sequence "\n") (" """)) (, ",") (identifier "local_19c") (, ",") (identifier "local_1a4") (, ",") (identifier "iVar15") (, ",") (identifier "ppvVar18") (, ",") (identifier "local_1e9") (, ",") (identifier "ppvVar8") (, ",") (identifier "ppvVar8") () ")"))))) (; ";")) (} "}"))) (expression_statement "ppvVar36 = (void **)&local_1b0;" (assignment_expression "ppvVar36 = (void **)&local_1b0" (identifier "ppvVar36") (= "=") (cast_expression "(void **)&local_1b0" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (pointer_expression "&local_1b0" (& "&") (identifier "local_1b0")))) (; ";")) (expression_statement "ppvVar27 = ppvVar8;" (assignment_expression "ppvVar27 = ppvVar8" (identifier "ppvVar27") (= "=") (identifier "ppvVar8")) (; ";")) (expression_statement "lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9);" (assignment_expression "lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" (identifier "lVar30") (= "=") (call_expression "FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" (identifier "FUN_000126a0") (argument_list "((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0\n                                      ,local_1e9)" (( "(") (binary_expression "(int)&local_1d8->st_dev + iVar15" (cast_expression "(int)&local_1d8->st_dev" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_1d8->st_dev" (& "&") (field_expression "local_1d8->st_dev" (identifier "local_1d8") (-> "->") (field_identifier "st_dev")))) (+ "+") (identifier "iVar15")) (, ",") (identifier "ppvVar18") (, ",") (pointer_expression "&local_1bc" (& "&") (identifier "local_1bc")) (, ",") (identifier "local_1e0") (, ",") (identifier "local_1e9") () ")")))) (; ";")) (expression_statement "uVar25 = (uint)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar25 = (uint)((ulonglong)lVar30 >> 0x20)" (identifier "uVar25") (= "=") (call_expression "(uint)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar30 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar30")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (if_statement "if ((int)lVar30 != 0) goto LAB_00011e81;" (if "if") (parenthesized_expression "((int)lVar30 != 0)" (( "(") (binary_expression "(int)lVar30 != 0" (cast_expression "(int)lVar30" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar30")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00011e81;" (goto "goto") (statement_identifier "LAB_00011e81") (; ";"))) (} "}"))) (expression_statement "puVar24 = (undefined *)0x0;" (assignment_expression "puVar24 = (undefined *)0x0" (identifier "puVar24") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "lVar30 = (ulonglong)uVar25 << 0x20;" (assignment_expression "lVar30 = (ulonglong)uVar25 << 0x20" (identifier "lVar30") (= "=") (binary_expression "(ulonglong)uVar25 << 0x20" (cast_expression "(ulonglong)uVar25" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar25")) (<< "<<") (number_literal "0x20"))) (; ";")) (if_statement "if (local_1b0._3_1_ == '\0') goto LAB_00011e81;" (if "if") (parenthesized_expression "(local_1b0._3_1_ == '\0')" (( "(") (binary_expression "local_1b0._3_1_ == '\0'" (field_expression "local_1b0._3_1_" (identifier "local_1b0") (. ".") (field_identifier "_3_1_")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_00011e81;" (goto "goto") (statement_identifier "LAB_00011e81") (; ";"))) (expression_statement "local_19c = (undefined *)0xf;" (assignment_expression "local_19c = (undefined *)0xf" (identifier "local_19c") (= "=") (cast_expression "(undefined *)0xf" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xf"))) (; ";")) (if_statement "if (local_188 != 0) {\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }" (if "if") (parenthesized_expression "(local_188 != 0)" (( "(") (binary_expression "local_188 != 0" (identifier "local_188") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);\n              }" ({ "{") (expression_statement "pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);" (call_expression "pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27)" (identifier "pr2serr") (argument_list "("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27)" (( "(") (string_literal ""sending Activate deferred microcode [0xf]\n"" (" """) (string_content "sending Activate deferred microcode [0xf]") (escape_sequence "\n") (" """)) (, ",") (identifier "ppvVar36") (, ",") (identifier "ppvVar8") (, ",") (identifier "ppvVar27") () ")"))) (; ";")) (} "}"))) (goto_statement "goto LAB_0001201a;" (goto "goto") (statement_identifier "LAB_0001201a") (; ";")) (} "}"))) (expression_statement "psVar14 = local_1d8;" (assignment_expression "psVar14 = local_1d8" (identifier "psVar14") (= "=") (identifier "local_1d8")) (; ";")) (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" (identifier "ppvVar18") (= "=") (identifier "local_1a0")) (; ";")) (if_statement "if (local_188 != 0) {\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }" (if "if") (parenthesized_expression "(local_188 != 0)" (( "(") (binary_expression "local_188 != 0" (identifier "local_188") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);\n              ppvVar18 = local_1a0;\n              puVar16 = extraout_ECX_12;\n            }" ({ "{") (expression_statement "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0);" (call_expression "pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0)" (identifier "pr2serr") (argument_list "("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,\n                      local_1a0)" (( "(") (string_literal ""single: mode=0x%x, id=%d, offset=%d, len=%d\n"" (" """) (string_content "single: mode=0x%x, id=%d, offset=%d, len=%d") (escape_sequence "\n") (" """)) (, ",") (identifier "local_19c") (, ",") (identifier "local_1a4") (, ",") (identifier "local_198") (, ",") (identifier "local_1a0") () ")"))) (; ";")) (expression_statement "ppvVar18 = local_1a0;" (assignment_expression "ppvVar18 = local_1a0" (identifier "ppvVar18") (= "=") (identifier "local_1a0")) (; ";")) (expression_statement "puVar16 = extraout_ECX_12;" (assignment_expression "puVar16 = extraout_ECX_12" (identifier "puVar16") (= "=") (identifier "extraout_ECX_12")) (; ";")) (} "}"))) (} "}")))) (expression_statement "lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);" (assignment_expression "lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" (identifier "lVar30") (= "=") (call_expression "FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" (identifier "FUN_000126a0") (argument_list "(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16)" (( "(") (identifier "psVar14") (, ",") (identifier "ppvVar18") (, ",") (pointer_expression "&local_1bc" (& "&") (identifier "local_1bc")) (, ",") (identifier "local_1e0") (, ",") (number_literal "1") (, ",") (pointer_expression "&local_1b0" (& "&") (identifier "local_1b0")) (, ",") (identifier "puVar16") (, ",") (identifier "puVar16") () ")")))) (; ";")) (} "}")))) (} "}")))) (} "}")) (else_clause "else {\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" (else "else") (compound_statement "{\n      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);\n      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;\n    }" ({ "{") (expression_statement "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36);" (call_expression "pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36)" (identifier "pr2serr") (argument_list "("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"\n              ,uVar33,ppvVar36)" (( "(") (string_literal ""Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"" (" """) (string_content "Do nothing because ") (escape_sequence "\'") (string_content "--non") (escape_sequence "\'") (string_content " given so fetching the Download microcode status") (escape_sequence "\n") (string_content "dpage might be dangerous") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar33") (, ",") (identifier "ppvVar36") () ")"))) (; ";")) (expression_statement "lVar30 = (ulonglong)extraout_EDX_11 << 0x20;" (assignment_expression "lVar30 = (ulonglong)extraout_EDX_11 << 0x20" (identifier "lVar30") (= "=") (binary_expression "(ulonglong)extraout_EDX_11 << 0x20" (cast_expression "(ulonglong)extraout_EDX_11" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "extraout_EDX_11")) (<< "<<") (number_literal "0x20"))) (; ";")) (} "}")))) (labeled_statement "LAB_00011e81:\n    uVar20 = (undefined4)lVar30;" (statement_identifier "LAB_00011e81") (: ":") (expression_statement "uVar20 = (undefined4)lVar30;" (assignment_expression "uVar20 = (undefined4)lVar30" (identifier "uVar20") (= "=") (cast_expression "(undefined4)lVar30" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (identifier "lVar30"))) (; ";"))) (if_statement "if (local_1d8 != (stat64 *)0x0) {\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }" (if "if") (parenthesized_expression "(local_1d8 != (stat64 *)0x0)" (( "(") (binary_expression "local_1d8 != (stat64 *)0x0" (identifier "local_1d8") (!= "!=") (cast_expression "(stat64 *)0x0" (( "(") (type_descriptor "stat64 *" (type_identifier "stat64") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_000118d4:\n      free(local_1d8);\n      lVar30 = CONCAT44(extraout_EDX_00,uVar20);\n    }" ({ "{") (labeled_statement "LAB_000118d4:\n      free(local_1d8);" (statement_identifier "LAB_000118d4") (: ":") (expression_statement "free(local_1d8);" (call_expression "free(local_1d8)" (identifier "free") (argument_list "(local_1d8)" (( "(") (identifier "local_1d8") () ")"))) (; ";"))) (expression_statement "lVar30 = CONCAT44(extraout_EDX_00,uVar20);" (assignment_expression "lVar30 = CONCAT44(extraout_EDX_00,uVar20)" (identifier "lVar30") (= "=") (call_expression "CONCAT44(extraout_EDX_00,uVar20)" (identifier "CONCAT44") (argument_list "(extraout_EDX_00,uVar20)" (( "(") (identifier "extraout_EDX_00") (, ",") (identifier "uVar20") () ")")))) (; ";")) (} "}"))) (labeled_statement "LAB_000118e5:\n    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);" (statement_identifier "LAB_000118e5") (: ":") (expression_statement "uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);" (assignment_expression "uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20)" (identifier "uVar7") (= "=") (call_expression "(undefined4)((ulonglong)lVar30 >> 0x20)" (parenthesized_expression "(undefined4)" (( "(") (identifier "undefined4") () ")")) (argument_list "((ulonglong)lVar30 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar30 >> 0x20" (cast_expression "(ulonglong)lVar30" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar30")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";"))) (expression_statement "iVar15 = (int)lVar30;" (assignment_expression "iVar15 = (int)lVar30" (identifier "iVar15") (= "=") (cast_expression "(int)lVar30" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar30"))) (; ";")) (if_statement "if (local_1b8 != (void *)0x0) {\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }" (if "if") (parenthesized_expression "(local_1b8 != (void *)0x0)" (( "(") (binary_expression "local_1b8 != (void *)0x0" (identifier "local_1b8") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      free(local_1b8);\n      uVar7 = extraout_EDX_01;\n    }" ({ "{") (expression_statement "free(local_1b8);" (call_expression "free(local_1b8)" (identifier "free") (argument_list "(local_1b8)" (( "(") (identifier "local_1b8") () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_01;" (assignment_expression "uVar7 = extraout_EDX_01" (identifier "uVar7") (= "=") (identifier "extraout_EDX_01")) (; ";")) (} "}"))) (if_statement "if (local_1c0 != (void *)0x0) {\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }" (if "if") (parenthesized_expression "(local_1c0 != (void *)0x0)" (( "(") (binary_expression "local_1c0 != (void *)0x0" (identifier "local_1c0") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      free(local_1c0);\n      uVar7 = extraout_EDX_02;\n    }" ({ "{") (expression_statement "free(local_1c0);" (call_expression "free(local_1c0)" (identifier "free") (argument_list "(local_1c0)" (( "(") (identifier "local_1c0") () ")"))) (; ";")) (expression_statement "uVar7 = extraout_EDX_02;" (assignment_expression "uVar7 = extraout_EDX_02" (identifier "uVar7") (= "=") (identifier "extraout_EDX_02")) (; ";")) (} "}"))) (expression_statement "uVar33 = CONCAT44(uVar7,iVar15);" (assignment_expression "uVar33 = CONCAT44(uVar7,iVar15)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(uVar7,iVar15)" (identifier "CONCAT44") (argument_list "(uVar7,iVar15)" (( "(") (identifier "uVar7") (, ",") (identifier "iVar15") () ")")))) (; ";")) (if_statement "if (-1 < (int)local_1dc) {\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }" (if "if") (parenthesized_expression "(-1 < (int)local_1dc)" (( "(") (binary_expression "-1 < (int)local_1dc" (number_literal "-1") (< "<") (cast_expression "(int)local_1dc" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_1dc"))) () ")")) (compound_statement "{\n      uVar31 = sg_cmds_close_device(local_1dc);\n      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);\n      if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }\n    }" ({ "{") (expression_statement "uVar31 = sg_cmds_close_device(local_1dc);" (assignment_expression "uVar31 = sg_cmds_close_device(local_1dc)" (identifier "uVar31") (= "=") (call_expression "sg_cmds_close_device(local_1dc)" (identifier "sg_cmds_close_device") (argument_list "(local_1dc)" (( "(") (identifier "local_1dc") () ")")))) (; ";")) (expression_statement "uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);" (assignment_expression "uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15)" (identifier "uVar33") (= "=") (call_expression "CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15)" (identifier "CONCAT44") (argument_list "((int)((ulonglong)uVar31 >> 0x20),iVar15)" (( "(") (cast_expression "(int)((ulonglong)uVar31 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar31 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar31 >> 0x20" (cast_expression "(ulonglong)uVar31" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar31")) (>> ">>") (number_literal "0x20")) () ")"))) (, ",") (identifier "iVar15") () ")")))) (; ";")) (if_statement "if ((int)uVar31 < 0) {\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }" (if "if") (parenthesized_expression "((int)uVar31 < 0)" (( "(") (binary_expression "(int)uVar31 < 0" (cast_expression "(int)uVar31" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar31")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        iVar13 = -(int)uVar31;\n        uVar7 = safe_strerror(iVar13);\n        pr2serr("close error: %s\n",uVar7);\n        uVar33 = CONCAT44(extraout_EDX_04,iVar15);\n        if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }\n      }" ({ "{") (expression_statement "iVar13 = -(int)uVar31;" (assignment_expression "iVar13 = -(int)uVar31" (identifier "iVar13") (= "=") (unary_expression "-(int)uVar31" (- "-") (cast_expression "(int)uVar31" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar31")))) (; ";")) (expression_statement "uVar7 = safe_strerror(iVar13);" (assignment_expression "uVar7 = safe_strerror(iVar13)" (identifier "uVar7") (= "=") (call_expression "safe_strerror(iVar13)" (identifier "safe_strerror") (argument_list "(iVar13)" (( "(") (identifier "iVar13") () ")")))) (; ";")) (expression_statement "pr2serr("close error: %s\n",uVar7);" (call_expression "pr2serr("close error: %s\n",uVar7)" (identifier "pr2serr") (argument_list "("close error: %s\n",uVar7)" (( "(") (string_literal ""close error: %s\n"" (" """) (string_content "close error: %s") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "uVar33 = CONCAT44(extraout_EDX_04,iVar15);" (assignment_expression "uVar33 = CONCAT44(extraout_EDX_04,iVar15)" (identifier "uVar33") (= "=") (call_expression "CONCAT44(extraout_EDX_04,iVar15)" (identifier "CONCAT44") (argument_list "(extraout_EDX_04,iVar15)" (( "(") (identifier "extraout_EDX_04") (, ",") (identifier "iVar15") () ")")))) (; ";")) (if_statement "if (iVar15 == 0) {\n          uVar33 = sg_convert_errno(iVar13);\n        }" (if "if") (parenthesized_expression "(iVar15 == 0)" (( "(") (binary_expression "iVar15 == 0" (identifier "iVar15") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar33 = sg_convert_errno(iVar13);\n        }" ({ "{") (expression_statement "uVar33 = sg_convert_errno(iVar13);" (assignment_expression "uVar33 = sg_convert_errno(iVar13)" (identifier "uVar33") (= "=") (call_expression "sg_convert_errno(iVar13)" (identifier "sg_convert_errno") (argument_list "(iVar13)" (( "(") (identifier "iVar13") () ")")))) (; ";")) (} "}"))) (} "}"))) (} "}"))) (expression_statement "ppvVar18 = (void **)uVar33;" (assignment_expression "ppvVar18 = (void **)uVar33" (identifier "ppvVar18") (= "=") (cast_expression "(void **)uVar33" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "uVar33"))) (; ";")) (if_statement "if ((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')) {\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" (if "if") (parenthesized_expression "((local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0'))" (( "(") (binary_expression "(local_188 == 0) &&\n       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')" (parenthesized_expression "(local_188 == 0)" (( "(") (binary_expression "local_188 == 0" (identifier "local_188") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0')" (( "(") (comma_expression "cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                ), cVar4 == '\0'" (assignment_expression "cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" (identifier "cVar4") (= "=") (call_expression "sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" (identifier "sg_if_can2stderr") (argument_list "("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)\n                                )" (( "(") (string_literal ""sg_ses_mocrocode failed: "" (" """) (string_content "sg_ses_mocrocode failed: ") (" """)) (, ",") (identifier "uVar33") (, ",") (cast_expression "(int)((ulonglong)uVar33 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar33 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar33 >> 0x20" (cast_expression "(ulonglong)uVar33" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar33")) (>> ">>") (number_literal "0x20")) () ")"))) () ")")))) (, ",") (binary_expression "cVar4 == '\0'" (identifier "cVar4") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")"))) () ")")) (compound_statement "{\n      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");\n    }" ({ "{") (expression_statement "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");" (call_expression "pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" (identifier "pr2serr") (argument_list "("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n")" (( "(") (string_literal ""Some error occurred, try again with \'-v\' or \'-vv\' for more information\n"" (" """) (string_content "Some error occurred, try again with ") (escape_sequence "\'") (string_content "-v") (escape_sequence "\'") (string_content " or ") (escape_sequence "\'") (string_content "-vv") (escape_sequence "\'") (string_content " for more information") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if ((int)ppvVar18 < 0) {\n      ppvVar18 = (void **)0x63;\n    }" (if "if") (parenthesized_expression "((int)ppvVar18 < 0)" (( "(") (binary_expression "(int)ppvVar18 < 0" (cast_expression "(int)ppvVar18" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppvVar18")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      ppvVar18 = (void **)0x63;\n    }" ({ "{") (expression_statement "ppvVar18 = (void **)0x63;" (assignment_expression "ppvVar18 = (void **)0x63" (identifier "ppvVar18") (= "=") (cast_expression "(void **)0x63" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x63"))) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int function_1(int argc,char **argv)

{
  uint8_t uVar1;
  type_1 var_48;
  bool bVar3;
  type_2 *puVar4;
  type_2 *puVar5;
  type_2 *puVar6;
  char var_40;
  type_1 **ppuVar8;
  char *var_35;
  char *var_39;
  type_3 *poVar11;
  type_4 var_51;
  type_5 uVar13;
  type_3 *var_49;
  int *piVar14;
  char *var_57;
  type_6 *var_58;
  type_3 *poVar17;
  int var_2;
  char **extraout_ECX;
  type_5 extraout_ECX_00;
  type_5 extraout_ECX_01;
  type_5 extraout_ECX_02;
  type_3 *extraout_ECX_03;
  char **extraout_ECX_04;
  char **ppcVar19;
  int var_7;
  type_3 *op_00;
  type_3 *extraout_ECX_05;
  type_3 *extraout_ECX_06;
  type_3 *extraout_ECX_07;
  type_3 *extraout_ECX_08;
  type_3 *extraout_ECX_09;
  type_5 extraout_ECX_10;
  type_5 extraout_ECX_11;
  type_3 *extraout_ECX_12;
  type_5 extraout_ECX_13;
  type_7 var_16;
  type_5 extraout_EDX;
  type_5 extraout_EDX_00;
  type_5 extraout_EDX_01;
  type_5 extraout_EDX_02;
  type_8 *extraout_EDX_03;
  type_4 extraout_EDX_04;
  type_5 extraout_EDX_05;
  type_4 extraout_EDX_06;
  type_5 extraout_EDX_07;
  type_5 extraout_EDX_08;
  type_5 extraout_EDX_09;
  type_4 extraout_EDX_10;
  type_5 extraout_EDX_11;
  type_5 extraout_EDX_12;
  type_4 extraout_EDX_13;
  type_5 extraout_EDX_14;
  type_5 extraout_EDX_15;
  type_8 *extraout_EDX_16;
  type_5 extraout_EDX_17;
  type_5 extraout_EDX_18;
  type_5 extraout_EDX_19;
  type_5 extraout_EDX_20;
  type_5 extraout_EDX_21;
  type_3 *poVar22;
  type_9 *var_41;
  type_5 uVar24;
  uint8_t *var_50;
  type_3 *poVar26;
  type_5 uVar27;
  type_4 var_38;
  type_3 *var_46;
  type_10 *off_off;
  type_8 *var_56;
  type_3 *poVar31;
  int var_1;
  type_7 bVar32;
  type_11 lVar33;
  type_12 uVar34;
  type_13 var_30;
  type_12 uVar36;
  type_10 last;
  type_5 uVar37;
  type_3 *poVar38;
  type_8 *psVar39;
  char *var_14;
  type_7 var_8;
  int var_4;
  type_8 *var_9;
  type_14 *local_1dc;
  type_8 *var_26;
  type_8 *var_55;
  int var_47;
  void *var_62;
  type_15 local_1bc;
  type_3 local_1b0;
  type_8 local_184;
  type_8 local_124 [2];
  type_4 var_42;
  int *local_18;
  
  ppcVar19 = argv;
  var_7 = argc;
  puVar5 = PTR_optarg_00015ffc;
  bVar32 = 0;
  local_18 = &argc;
  var_55 = (type_8 *)argv;
  var_42 = *(type_4 *)(var_1 + 0x14);
  var_62 = (void *)0x0;
  local_1bc.doutp = (uint8_t *)0x0;
  local_1bc.free_doutp = (uint8_t *)0x0;
  local_1bc.dout_len = 0;
  var_14 = (char *)0x0;
  poVar22 = &local_1b0;
  for (var_2 = 0xb; var_2 != 0; var_2 = var_2 + -1) {
    poVar22->dry_run = false;
    poVar22->ealsd = false;
    poVar22->mc_non = false;
    poVar22->bpw_then_activate = false;
    poVar22 = (type_3 *)&poVar22->mc_len_given;
  }
  var_56 = &local_184;
  var_4 = 0;
  local_1dc = long_options;
  var_57 = "b:dehi:I:l:m:No:s:S:t:vV";
  var_8 = 0;
  bVar3 = false;
LAB_00011330:
  do {
    local_184.st_dev._0_4_ = 0;
    var_2 = var_3(var_7,ppcVar19,"b:dehi:I:l:m:No:s:S:t:vV",long_options,var_56);
    puVar6 = PTR_optarg_00015ffc;
    puVar4 = PTR_optind_00015fe8;
    var_9 = (type_8 *)var_57;
    var_26 = var_56;
    if (var_2 == -1) {
      if (var_4 != 0) {
        if (var_4 == 1) {
          poVar22 = (type_3 *)0x0;
          var_5(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
        }
        else {
          poVar22 = (type_3 *)0x0;
          var_5(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
          var_5("\n");
          var_6();
        }
        goto LAB_0001160b;
      }
      var_2 = *(int *)PTR_optind_00015fe8;
      if (var_2 < var_7) {
        var_9 = (type_8 *)ppcVar19[var_2];
        var_2 = var_2 + 1;
        *(int *)PTR_optind_00015fe8 = var_2;
        if (var_7 <= var_2) goto LAB_000116cd;
        do {
          var_35 = ppcVar19[var_2];
          var_56 = var_9;
          psVar39 = var_9;
          var_5("Unexpected extra argument: %s\n",var_35,var_9,var_9);
          var_2 = *(int *)puVar4 + 1;
          *(int *)puVar4 = var_2;
          var_9 = extraout_EDX_03;
        } while (var_2 < var_7);
        poVar22 = (type_3 *)0x1;
        var_5("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                ,var_35,var_56,psVar39);
        var_9 = (type_8 *)var_57;
        var_26 = (type_8 *)"Unexpected extra argument: %s\n";
        goto LAB_0001160b;
      }
      var_9 = (type_8 *)0x0;
      ppcVar19 = extraout_ECX;
LAB_000116cd:
      if (bVar3) {
        if (var_8 != 0) {
          var_5("Not in DEBUG mode, so \'-vV\' has no special action\n");
          ppcVar19 = extraout_ECX_04;
LAB_000119bc:
          poVar22 = (type_3 *)0x0;
          var_5("sg_ses_microcode: version: %s\n","1.16 20180628",ppcVar19,ppcVar19);
          var_9 = (type_8 *)var_57;
          goto LAB_0001160b;
        }
      }
      else if (var_8 != 0) goto LAB_000119bc;
      if (var_9 == (type_8 *)0x0) {
        var_35 = "missing device name!\n\n";
        goto LAB_000115ef;
      }
      if (local_1b0.mc_mode < 8) {
        if (local_1b0.mc_mode < 6) {
          var_55 = (type_8 *)0x0;
          if ((type_3 *)local_1b0.mc_mode != (type_3 *)0x0) goto LAB_0001171b;
        }
        else {
LAB_00011c5b:
          var_55 = (type_8 *)0x1;
        }
      }
      else if (((type_3 *)local_1b0.mc_mode == (type_3 *)0xf) ||
              ((type_3 *)local_1b0.mc_mode == (type_3 *)0xff)) {
        var_55 = (type_8 *)0x0;
      }
      else {
        if ((type_3 *)local_1b0.mc_mode == (type_3 *)0xe) goto LAB_00011c5b;
LAB_0001171b:
        var_5("%s: mc_mode=0x%x, continue for now\n","main",local_1b0.mc_mode,var_9);
        var_55 = (type_8 *)0x0;
      }
      if ((0 < local_1b0.mc_len) && (local_1b0.mc_len < local_1b0.bpw)) {
        var_5("trim chunk size (CS) to be the same as LEN\n");
        local_1b0.bpw = local_1b0.mc_len;
      }
      poVar38 = (type_3 *)local_1b0.mc_len;
      if ((0 < local_1b0.mc_offset) && (0 < local_1b0.bpw)) {
        local_1b0.mc_offset = 0;
        poVar38 = (type_3 *)
                  var_5(
                         "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"
                         );
      }
      uVar13 = 0;
      var_7 = local_1b0.verbose;
      local_1dc = (type_14 *)var_10(var_9,0,local_1b0.verbose,poVar38);
      uVar36 = var_11(var_7,uVar13);
      if ((int)local_1dc < 0) {
        if (local_1b0.verbose != 0) {
          uVar13 = var_12(-(int)local_1dc);
          var_5("sg_ses_microcode: open error: %s: %s\n",var_9,uVar13);
          var_55 = var_9;
        }
        lVar33 = var_13(-(int)local_1dc);
        goto LAB_000118e5;
      }
      var_16 = var_14 != (char *)0x0 & ((type_7)var_55 ^ 1);
      uVar27 = var_15((int3)((type_4)var_9 >> 8),var_16);
      if (var_16 != 0) {
        var_5("ignoring --in=FILE option\n");
        uVar36 = var_11(var_7,uVar13);
        var_26 = (type_8 *)0x0;
        goto LAB_00011a5c;
      }
      if (var_14 == (char *)0x0) {
        var_26 = (type_8 *)0x0;
        if ((type_7)var_55 == 0) goto LAB_00011a5c;
        var_5("need --in=FILE option with given mode\n");
        lVar33 = var_11(extraout_EDX_09,0x1f);
        goto LAB_000118e5;
      }
      var_9 = (type_8 *)var_17(var_14,"-");
      if (var_9 == (type_8 *)0x0) {
        var_38 = 0;
        uVar13 = extraout_ECX_00;
      }
      else {
        var_38 = var_18(var_14,0,var_9,var_9);
        if ((int)var_38 < 0) {
          piVar14 = var_19();
          uVar13 = var_13(*piVar14);
          var_20(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",
                         var_14);
          var_21((char *)local_124);
          lVar33 = var_11(extraout_EDX_14,uVar13);
          goto LAB_000118e5;
        }
        var_7 = var_22(var_38);
        uVar13 = extraout_ECX_01;
        if (var_7 < 0) {
          var_21("sg_set_binary_mode");
          uVar13 = extraout_ECX_11;
        }
      }
      var_51 = var_38;
      var_7 = var_23(3,var_38,var_56);
      if ((var_7 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {
        if ((type_3 *)local_1b0.mc_len == (type_3 *)0x0) {
          var_7 = (local_1b0.mc_skip >> 0x1f) - local_184.st_size._4_4_;
          if ((var_24(local_1b0.mc_skip >> 0x1f,local_184.st_size._4_4_) !=
              var_24(var_7,(type_4)((type_4)local_1b0.mc_skip < (type_4)local_184.st_size))) !=
              (int)(var_7 - (type_4)((type_4)local_1b0.mc_skip < (type_4)local_184.st_size)) < 0) {
            local_1b0.mc_len = (type_4)local_184.st_size - local_1b0.mc_skip;
            uVar27 = 1;
            goto LAB_00011e31;
          }
          uVar24 = 0xf;
          var_5("skip exceeds file size of %d bytes\n",(type_4)local_184.st_size,extraout_EDX,
                  extraout_EDX);
          uVar13 = extraout_EDX_21;
        }
        else {
          uVar27 = 1;
LAB_00011e31:
          if (local_1b0.mc_len < 0x8000001) goto LAB_0001185d;
          uVar24 = 0xf;
          var_5("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",
                  local_1b0.mc_len,0x8000000,uVar27);
          uVar13 = extraout_EDX_07;
        }
      }
      else {
        if ((type_3 *)local_1b0.mc_len != (type_3 *)0x0) goto LAB_00011e31;
        local_1b0.mc_len = 0x800000;
LAB_0001185d:
        poVar22 = (type_3 *)local_1b0.mc_len;
        var_26 = (type_8 *)var_25(local_1b0.mc_len);
        if (var_26 != (type_8 *)0x0) {
          uVar37 = 0xff;
          uVar13 = extraout_ECX_02;
          var_27(var_26,0xff,(size_t)poVar22);
          poVar38 = extraout_ECX_03;
          if (local_1b0.mc_skip < 1) {
LAB_00011f46:
            var_56 = var_26;
            poVar11 = (type_3 *)local_1b0.mc_len;
            poVar22 = (type_3 *)var_28(var_38,var_26,local_1b0.mc_len);
            if (-1 < (int)poVar22) {
              var_46 = (type_3 *)local_1b0.mc_len;
              uVar36 = var_11(poVar11,var_56);
              if (local_1b0.mc_len <= (int)poVar22) goto LAB_00011f90;
              if (local_1b0.mc_len_given == false) {
                var_46 = poVar22;
                uVar36 = var_11(poVar11,var_56);
                if (local_1b0.verbose == 0) goto LAB_00011f90;
                poVar38 = poVar22;
                var_5("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,var_14,
                        poVar22);
                poVar11 = poVar22;
                var_5("will send %d bytes",poVar22);
                uVar36 = var_11(extraout_EDX_20,local_1b0.bpw);
                if ((0 < local_1b0.bpw) && (local_1b0.bpw < local_1b0.mc_len)) goto LAB_00012469;
                var_5("\n",poVar11,var_14,poVar38);
                uVar36 = var_11(var_14,poVar11);
                goto LAB_00011f90;
              }
              poVar11 = (type_3 *)local_1b0.mc_len;
              var_5("tried to read %d bytes from %s, got %d bytes\n",local_1b0.mc_len,var_14,
                      poVar22);
              var_5("pad with 0xff bytes and continue\n");
              poVar38 = poVar22;
              var_46 = (type_3 *)local_1b0.mc_len;
              uVar36 = var_11(var_14,poVar11);
              goto LAB_00011f90;
            }
            piVar14 = var_19();
            uVar24 = var_13(*piVar14);
            var_57 = "sg_ses_microcode: couldn\'t read from %s";
          }
          else {
            if ((char)uVar27 == '\0') {
              if (var_9 == (type_8 *)0x0) {
                uVar24 = 0xf;
                var_5("Can\'t skip on stdin\n",uVar37,poVar22,uVar13);
                goto LAB_000118d4;
              }
              uVar24 = 0xf;
              var_5("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar37,
                      poVar22,uVar13);
              goto LAB_00011e75;
            }
            var_30 = var_29(var_38,(type_11)local_1b0.mc_skip,0);
            poVar38 = extraout_ECX_09;
            if (-1 < var_30) goto LAB_00011f46;
            piVar14 = var_19();
            uVar24 = var_13(*piVar14);
            var_57 = "sg_ses_microcode: couldn\'t skip to required position on %s";
          }
          var_55 = local_124;
          var_20(var_55,0x100,1,0x100,var_57,var_14);
          var_21((char *)var_55);
          if (var_9 == (type_8 *)0x0) goto LAB_000118d4;
          goto LAB_00011e75;
        }
        uVar24 = 99;
        var_5("sg_ses_microcode: out of memory to hold microcode read from FILE\n",var_51,var_56,
                uVar13);
        uVar13 = extraout_EDX_18;
      }
      lVar33 = var_11(uVar13,uVar24);
      var_26 = (type_8 *)0x0;
      if (var_9 == (type_8 *)0x0) goto LAB_000118e5;
LAB_00011e75:
      var_31(var_38);
      lVar33 = var_11(extraout_EDX_08,uVar24);
      goto LAB_00011e81;
    }
    switch(var_2) {
    case 0x3f:
    case 0x68:
      var_4 = var_4 + 1;
      break;
    default:
      var_35 = "unrecognised option code 0x%x ??\n";
LAB_000115ef:
      var_5(var_35);
      var_5(
             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
             );
      goto LAB_00011606;
    case 0x49:
      var_14 = *(char **)PTR_optarg_00015ffc;
      break;
    case 0x4e:
      local_1b0.mc_non = true;
      break;
    case 0x53:
      local_1b0.mc_subenc = var_32(*(type_5 *)puVar5);
      if (0xff < (type_4)local_1b0.mc_subenc) {
        var_5("expected argument to \'--subenc\' to be 0 to 255\n");
        goto LAB_00011606;
      }
      break;
    case 0x56:
      var_8 = 1;
      break;
    case 0x62:
      local_1b0.bpw = var_33(*(type_5 *)PTR_optarg_00015ffc);
      if (local_1b0.bpw < 0) {
        var_5("argument to \'--bpw\' should be in a positive number\n");
        goto LAB_00011606;
      }
      var_35 = var_34(*(char **)puVar6,0x2c);
      if ((var_35 != (char *)0x0) && (var_2 = var_36("act",var_35 + 1,3), var_2 == 0)) {
        local_1b0.bpw_then_activate = true;
      }
      break;
    case 100:
      local_1b0.dry_run = true;
      break;
    case 0x65:
      local_1b0.ealsd = true;
      break;
    case 0x69:
      local_1b0.mc_id = var_32(*(type_5 *)PTR_optarg_00015ffc);
      if (0xff < (type_4)local_1b0.mc_id) {
        var_5("argument to \'--id\' should be in the range 0 to 255\n");
        goto LAB_00011606;
      }
      break;
    case 0x6c:
      local_1b0.mc_len = var_33(*(type_5 *)PTR_optarg_00015ffc);
      if (local_1b0.mc_len < 0) {
        var_5("bad argument to \'--length\'\n");
        goto LAB_00011606;
      }
      local_1b0.mc_len_given = true;
      break;
    case 0x6d:
      ppuVar8 = var_37();
      var_35 = *(char **)PTR_optarg_00015ffc;
      if ((*(type_7 *)((int)*ppuVar8 + *var_35 * 2 + 1) & 8) == 0) {
        var_38 = 0xffffffff;
        var_39 = var_35;
        do {
          if (var_38 == 0) break;
          var_38 = var_38 - 1;
          var_40 = *var_39;
          var_39 = var_39 + (type_4)bVar32 * -2 + 1;
        } while (var_40 != '\0');
        if (mode_arr[0].mode_string == (char *)0x0) {
LAB_00011fdc:
          var_6();
          goto LAB_00011606;
        }
        var_41 = mode_arr;
        var_39 = mode_arr[0].mode_string;
        while (var_2 = var_36(var_39,var_35,~var_38 - 1), var_2 != 0) {
          var_41 = var_41 + 1;
          var_39 = var_41->mode_string;
          if (var_39 == (char *)0x0) goto LAB_00011fdc;
        }
        local_1b0.mc_mode = var_41->mode;
      }
      else {
        local_1b0.mc_mode = var_32(var_35);
        if ((type_3 *)0xff < (type_4)local_1b0.mc_mode) {
          var_5("argument to \'--mode\' should be in the range 0 to 255\n");
          goto LAB_00011606;
        }
      }
      break;
    case 0x6f:
      local_1b0.mc_offset = var_33(*(type_5 *)PTR_optarg_00015ffc);
      if (local_1b0.mc_offset < 0) {
        var_5("bad argument to \'--offset\'\n");
        goto LAB_00011606;
      }
      if ((local_1b0.mc_offset & 3U) != 0) {
        var_5("\'--offset\' value needs to be a multiple of 4\n");
        goto LAB_00011606;
      }
      break;
    case 0x73:
      local_1b0.mc_skip = var_33(*(type_5 *)PTR_optarg_00015ffc);
      if (local_1b0.mc_skip < 0) {
        var_5("bad argument to \'--skip\'\n");
        goto LAB_00011606;
      }
      break;
    case 0x74:
      goto _L157;
    case 0x76:
      local_1b0.verbose = local_1b0.verbose + 1;
      bVar3 = true;
    }
  } while( true );
_L157:
  local_1b0.mc_tlen = var_33(*(type_5 *)puVar5);
  if (local_1b0.mc_tlen < 0) goto code_r0x0001141f;
  goto LAB_00011330;
code_r0x0001141f:
  var_5("bad argument to \'--tlength\'\n");
LAB_00011606:
  poVar22 = (type_3 *)0x1;
  var_9 = (type_8 *)var_57;
LAB_0001160b:
  do {
    var_38 = var_42 ^ *(type_4 *)(var_1 + 0x14);
    if (var_38 == 0) {
      return (int)poVar22;
    }
    uVar36 = var_43();
LAB_00012469:
    poVar38 = (type_3 *)((type_16)uVar36 >> 0x20);
    var_5(", %d bytes per WRITE BUFFER command\n",uVar36,poVar38);
    var_46 = poVar22;
LAB_00011f90:
    local_1b0.mc_len = (int)var_46;
    if (var_9 != (type_8 *)0x0) {
      var_31(var_38);
    }
LAB_00011a5c:
    if (local_1b0.mc_tlen < local_1b0.mc_len) {
      local_1b0.mc_tlen = local_1b0.mc_len;
    }
    if ((local_1b0.mc_non == false) || ((type_3 *)local_1b0.mc_mode != (type_3 *)0x0)) {
      poVar11 = (type_3 *)(type_4)(3 < local_1b0.verbose);
      poVar22 = (type_3 *)&var_62;
      poVar38 = (type_3 *)0x0;
      lVar33 = var_44(0x2000,0,poVar22,poVar11);
      var_9 = (type_8 *)lVar33;
      if (var_9 == (type_8 *)0x0) {
        var_5("sg_ses_microcode: out of memory (data-in buffer)\n");
        lVar33 = var_11(extraout_EDX_19,99);
      }
      else {
        if (local_1b0.dry_run == false) {
          var_7 = 1;
          if (0 < local_1b0.verbose) {
            var_7 = local_1b0.verbose;
          }
          lVar33 = var_45
                             (local_1dc,1,0xe,var_9,0x2000,0,&var_47,1,var_7 + -1);
          var_46 = (type_3 *)lVar33;
          if (var_46 != (type_3 *)0x0) goto LAB_00011e81;
          var_48 = *(type_1 *)((int)&var_9->st_dev + 2);
          poVar26 = (type_3 *)(0x2000 - var_47);
          var_49 = (type_3 *)((type_1)(var_48 << 8 | var_48 >> 8) + 4);
          op_00 = extraout_ECX_05;
          poVar31 = var_49;
          if (var_49 < (type_3 *)0x2001) goto LAB_00011b07;
          poVar31 = (type_3 *)0x2000;
          poVar38 = (type_3 *)0x2000;
          uVar36 = var_5("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,var_49,0
                          );
          var_38 = (type_4)((type_16)uVar36 >> 0x20);
          poVar17 = (type_3 *)uVar36;
          op_00 = extraout_ECX_06;
          if ((int)poVar26 < 0x2000) goto LAB_00011ddf;
        }
        else {
          var_50 = dummy_rd_resp;
          var_56 = var_9;
          for (var_7 = 0x12; var_7 != 0; var_7 = var_7 + -1) {
            *(type_5 *)&var_56->st_dev = *(type_5 *)var_50;
            var_50 = var_50 + ((type_4)bVar32 * -2 + 1) * 4;
            var_56 = (type_8 *)((int)var_56 + (type_4)bVar32 * -8 + 4);
          }
          poVar26 = (type_3 *)0x48;
          var_47 = 0x1fb8;
          var_48 = *(type_1 *)((int)&var_9->st_dev + 2);
          var_46 = (type_3 *)((type_1)(var_48 << 8 | var_48 >> 8) + 4);
          op_00 = (type_3 *)0x0;
          poVar31 = var_46;
          if (var_46 < (type_3 *)0x2001) {
LAB_00011b07:
            var_38 = (type_4)((type_16)lVar33 >> 0x20);
            poVar17 = (type_3 *)lVar33;
            var_49 = poVar22;
            var_46 = poVar11;
            if ((int)poVar26 < (int)poVar31) goto LAB_00011ddf;
          }
          else {
            poVar31 = (type_3 *)0x2000;
            poVar17 = (type_3 *)
                      var_5("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,
                              var_46,var_9);
LAB_00011ddf:
            poVar38 = poVar26;
            var_49 = poVar31;
            var_5("<<< warning response too short [actually got %d but need %d]>>>\n",poVar26,
                    poVar31,poVar17);
            op_00 = extraout_ECX_07;
            var_38 = extraout_EDX_06;
            poVar31 = poVar26;
            var_46 = poVar17;
          }
          if ((int)poVar31 < 8) {
            var_5("Download microcode status dpage too short\n",poVar38,var_49,var_46);
            lVar33 = var_11(extraout_EDX_12,99);
            goto LAB_00011e81;
          }
        }
        if ((2 < local_1b0.verbose) || ((local_1b0.dry_run != false && (local_1b0.verbose != 0)))) {
          var_38 = *(type_4 *)((int)&var_9->st_dev + 4);
          var_46 = (type_3 *)
                    (var_38 >> 0x18 | (var_38 & 0xff0000) >> 8 | (var_38 & 0xff00) << 8 |
                    var_38 << 0x18);
          var_49 = (type_3 *)(type_4)*(type_7 *)((int)&var_9->st_dev + 1);
          poVar38 = poVar31;
          var_5("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",poVar31,var_49,var_46);
          op_00 = extraout_ECX_08;
          var_38 = extraout_EDX_10;
        }
        var_51 = *(type_4 *)((int)&var_9->st_dev + 4);
        var_51 = var_51 >> 0x18 | (var_51 & 0xff0000) >> 8 | (var_51 & 0xff00) << 8 | var_51 << 0x18
        ;
        if ((type_3 *)local_1b0.mc_mode == (type_3 *)0x0) {
          var_52("Download microcode status diagnostic page:");
          uVar1 = *(uint8_t *)((int)&var_9->st_dev + 1);
          piVar14 = &poVar31[-1].mc_tlen;
          uVar13 = extraout_ECX_10;
          if (((type_4)piVar14 & 0xf) != 0) {
            var_5("Found %d Download microcode status descriptors, but there is residual\n",
                    (int)piVar14 >> 4,piVar14,piVar14);
            uVar13 = extraout_ECX_13;
          }
          var_53(1,"  number of secondary subenclosures: %d\n",uVar1,uVar13);
          var_53(1,"  generation code: 0x%x\n",var_51);
          var_55 = (type_8 *)(&var_9->st_dev + ((int)piVar14 >> 4) * 2);
          for (var_56 = var_9; lVar33 = var_54(var_9) << 0x20,
              var_9 = (type_8 *)" [primary]", var_55 != var_56;
              var_56 = (type_8 *)&var_56->st_mode) {
            var_40 = *(char *)((int)&var_56->__pad1 + 1);
            var_57 = "";
            if (var_40 == '\0') {
              var_57 = " [primary]";
            }
            var_53(1,"   subenclosure identifier: %d%s\n",var_40,var_57);
            var_38 = (type_4)*(type_7 *)((int)&var_56->__pad1 + 2);
            for (var_58 = mc_status_arr; var_57 = var_58->desc, var_57 != (char *)0x0;
                var_58 = var_58 + 1) {
              if (var_38 == var_58->page_code) {
                if (*var_57 != '\0') {
                  var_53(1,"     download microcode status: %s [0x%x]\n",var_57,var_38);
                  var_53(1,"     download microcode additional status: 0x%x\n",
                               *(type_17 *)((int)&var_56->__pad1 + 3));
                  uVar13 = extraout_EDX_17;
                  goto LAB_0001225d;
                }
                break;
              }
            }
            var_53(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",var_38
                         ,*(type_17 *)((int)&var_56->__pad1 + 3));
            uVar13 = extraout_EDX_15;
LAB_0001225d:
            var_38 = var_56->__st_ino;
            var_53(1,"     download microcode maximum size: %u bytes\n",
                         var_38 >> 0x18 | (var_38 & 0xff0000) >> 8 | (var_38 & 0xff00) << 8 |
                         var_38 << 0x18,uVar13);
            var_53(1,"     download microcode expected buffer id: 0x%x\n",
                         *(type_17 *)((int)&var_56->st_mode + 3));
            var_38 = var_56->st_nlink;
            var_53(1,"     download microcode expected buffer id offset: %u\n",
                         var_38 >> 0x18 | (var_38 & 0xff0000) >> 8 | (var_38 & 0xff00) << 8 |
                         var_38 << 0x18);
            var_9 = extraout_EDX_16;
          }
        }
        else {
          last = var_59(&local_1b0,0);
          poVar22 = (type_3 *)local_1b0.mc_mode;
          if ((type_7)var_55 == 0) {
LAB_0001201a:
            var_56 = (type_8 *)0x0;
            poVar38 = (type_3 *)0x0;
            op_00 = poVar22;
          }
          else {
            off_off = (type_10 *)0x0;
            if (0 < local_1b0.bpw) {
              for (; (int)off_off < local_1b0.mc_len; off_off = &poVar22->dry_run + (int)off_off) {
                var_49 = (type_3 *)local_1b0.bpw;
                poVar22 = (type_3 *)local_1b0.bpw;
                if (local_1b0.mc_len - (int)off_off <= local_1b0.bpw) {
                  var_8 = (type_7)var_55;
                  var_49 = (type_3 *)((type_4)var_55 & 0xff);
                  poVar22 = (type_3 *)(local_1b0.mc_len - (int)off_off);
                }
                if (local_1b0.verbose != 0) {
                  var_49 = (type_3 *)
                       var_5("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n",
                               local_1b0.mc_mode,local_1b0.mc_id,off_off,poVar22,(type_4)var_8,var_49,
                               var_49);
                }
                poVar38 = &local_1b0;
                var_46 = var_49;
                var_7 = var_60((int)local_1dc,var_51,(int)off_off,
                                           (type_10 *)((int)&var_26->st_dev + (int)off_off),
                                           (int)poVar22,&local_1bc,(uint8_t *)var_9,
                                           (type_4)var_8,last,var_49);
                lVar33 = var_11(extraout_EDX_04,var_7);
                if (var_7 != 0) goto LAB_00011e81;
                var_38 = extraout_EDX_04;
              }
              poVar22 = (type_3 *)0x0;
              lVar33 = (type_16)var_38 << 0x20;
              if (local_1b0.bpw_then_activate == false) goto LAB_00011e81;
              local_1b0.mc_mode = 0xf;
              if (local_1b0.verbose != 0) {
                var_5("sending Activate deferred microcode [0xf]\n",poVar38,var_49,var_46);
              }
              goto LAB_0001201a;
            }
            var_56 = var_26;
            poVar38 = (type_3 *)local_1b0.mc_len;
            if (local_1b0.verbose != 0) {
              var_5("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_1b0.mc_mode,
                      local_1b0.mc_id,local_1b0.mc_offset,local_1b0.mc_len);
              poVar38 = (type_3 *)local_1b0.mc_len;
              op_00 = extraout_ECX_12;
            }
          }
          var_7 = var_60((int)local_1dc,var_51,0,(uint8_t *)var_56,(int)poVar38,
                                     &local_1bc,(uint8_t *)var_9,1,last,op_00);
          lVar33 = var_11(extraout_EDX_11,var_7);
        }
      }
    }
    else {
      var_5("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"
              ,uVar36,poVar38);
      lVar33 = (type_16)extraout_EDX_13 << 0x20;
    }
LAB_00011e81:
    uVar24 = (type_5)lVar33;
    if (var_26 != (type_8 *)0x0) {
LAB_000118d4:
      var_61(var_26);
      lVar33 = var_11(extraout_EDX_00,uVar24);
    }
LAB_000118e5:
    uVar13 = (type_5)((type_16)lVar33 >> 0x20);
    var_7 = (int)lVar33;
    if (local_1bc.free_doutp != (uint8_t *)0x0) {
      var_61(local_1bc.free_doutp);
      uVar13 = extraout_EDX_01;
    }
    if (var_62 != (void *)0x0) {
      var_61(var_62);
      uVar13 = extraout_EDX_02;
    }
    uVar36 = var_11(uVar13,var_7);
    if (-1 < (int)local_1dc) {
      uVar34 = var_63(local_1dc);
      uVar36 = var_11((int)((type_16)uVar34 >> 0x20),var_7);
      if ((int)uVar34 < 0) {
        var_2 = -(int)uVar34;
        uVar13 = var_12(var_2);
        var_5("close error: %s\n",uVar13);
        uVar36 = var_11(extraout_EDX_05,var_7);
        if (var_7 == 0) {
          uVar36 = var_13(var_2);
        }
      }
    }
    poVar22 = (type_3 *)uVar36;
    if ((local_1b0.verbose == 0) &&
       (var_40 = var_64("sg_ses_mocrocode failed: ",uVar36,(int)((type_16)uVar36 >> 0x20)
                                ), var_40 == '\0')) {
      var_5("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");
    }
    if ((int)poVar22 < 0) {
      poVar22 = (type_3 *)0x63;
    }
  } while( true );
}


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (pointer_expression argument: (identifier))))) (for_statement initializer: (assignment_expression left: (identifier) right: (number_literal)) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (identifier) right: (false))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (field_expression argument: (field_expression argument: (identifier) field: (field_identifier)) field: (field_identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (string_literal (string_content)) (pointer_expression argument: (identifier)) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (escape_sequence))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (string_literal (string_content)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence) (escape_sequence)))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (pointer_expression argument: (identifier)) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence))))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal) (string_literal (string_content)) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (field_expression argument: (field_expression argument: (identifier) field: (field_identifier)) field: (field_identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) (field_expression argument: (field_expression argument: (identifier) field: (field_identifier)) field: (field_identifier)))) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (field_expression argument: (identifier) field: (field_identifier)))))))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (field_expression argument: (identifier) field: (field_identifier))))))))) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (field_expression argument: (identifier) field: (field_identifier))) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (cast_expression type: (type_descriptor type: (type_identifier)) value: (field_expression argument: (identifier) field: (field_identifier))) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (number_literal) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence) (string_content))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence) (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (goto_statement label: (statement_identifier)))) (switch_statement condition: (parenthesized_expression (identifier)) body: (compound_statement (case_statement value: (number_literal)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (break_statement)) (case_statement (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier))) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (char_literal (escape_sequence)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) (number_literal) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal)) (number_literal) (identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (char_literal (escape_sequence)))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (char_literal (escape_sequence)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier))))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence))))) (goto_statement label: (statement_identifier)))) (break_statement)) (case_statement value: (number_literal) (goto_statement label: (statement_identifier))) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (true))))))) condition: (parenthesized_expression (true)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (char_literal (escape_sequence)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (identifier) (number_literal) (number_literal) (pointer_expression argument: (identifier)) (number_literal) (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (number_literal) (identifier) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (for_statement initializer: (assignment_expression left: (identifier) right: (number_literal)) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier))))) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (number_literal) (identifier) (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal))))) (goto_statement label: (statement_identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (number_literal))))))) (for_statement initializer: (assignment_expression left: (identifier) right: (identifier)) condition: (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (identifier))) right: (number_literal))) right: (comma_expression left: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content)))) right: (binary_expression left: (identifier) right: (identifier)))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (string_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal))))))) (for_statement initializer: (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))) condition: (comma_expression left: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (break_statement))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (field_expression argument: (identifier) field: (field_identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (field_expression argument: (identifier) field: (field_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (for_statement condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) update: (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier) (identifier) (identifier) (identifier) (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (field_expression argument: (identifier) field: (field_identifier)))) right: (identifier)) (identifier) (pointer_expression argument: (identifier)) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier)))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)) (identifier) (number_literal) (pointer_expression argument: (identifier)) (identifier) (identifier)))))))))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) right: (binary_expression left: (identifier) right: (char_literal (escape_sequence))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal))))))) condition: (parenthesized_expression (true)))))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void ** MASKED(int param_1,stat64 *param_2)

{
  ushort uVar1;
  bool bVar2;
  undefined *puVar3;
  char cVar4;
  char *pcVar5;
  void **ppvVar6;
  undefined4 uVar7;
  void **ppvVar8;
  int *piVar9;
  char *pcVar10;
  uint *puVar11;
  void **ppvVar12;
  int iVar13;
  stat64 *extraout_ECX;
  undefined4 extraout_ECX_00;
  undefined4 extraout_ECX_01;
  undefined4 extraout_ECX_02;
  void **extraout_ECX_03;
  stat64 *extraout_ECX_04;
  stat64 *psVar14;
  int iVar15;
  undefined *puVar16;
  undefined *extraout_ECX_05;
  undefined *extraout_ECX_06;
  undefined *extraout_ECX_07;
  undefined *extraout_ECX_08;
  void **extraout_ECX_09;
  undefined4 extraout_ECX_10;
  undefined4 extraout_ECX_11;
  undefined *extraout_ECX_12;
  undefined4 extraout_ECX_13;
  byte bVar17;
  undefined4 extraout_EDX;
  undefined4 extraout_EDX_00;
  undefined4 extraout_EDX_01;
  undefined4 extraout_EDX_02;
  stat64 *extraout_EDX_03;
  undefined4 extraout_EDX_04;
  uint extraout_EDX_05;
  undefined4 extraout_EDX_06;
  undefined4 extraout_EDX_07;
  undefined4 extraout_EDX_08;
  uint extraout_EDX_09;
  undefined4 extraout_EDX_10;
  uint extraout_EDX_11;
  undefined4 extraout_EDX_12;
  undefined4 extraout_EDX_13;
  stat64 *extraout_EDX_14;
  undefined4 extraout_EDX_15;
  undefined4 extraout_EDX_16;
  undefined4 extraout_EDX_17;
  undefined4 extraout_EDX_18;
  undefined4 extraout_EDX_19;
  void **ppvVar18;
  undefined **ppuVar19;
  undefined4 uVar20;
  undefined4 *puVar21;
  void **ppvVar22;
  undefined4 uVar23;
  undefined *puVar24;
  uint uVar25;
  char *pcVar26;
  void **ppvVar27;
  void **ppvVar28;
  int in_GS_OFFSET;
  byte bVar29;
  longlong lVar30;
  undefined8 uVar31;
  __off64_t _Var32;
  undefined8 uVar33;
  uint uVar34;
  undefined4 uVar35;
  void **ppvVar36;
  stat64 *psVar37;
  stat64 *psVar38;
  char *local_1f0;
  char local_1e9;
  int local_1e8;
  stat64 *local_1e0;
  undefined **local_1dc;
  stat64 *local_1d8;
  stat64 *local_1d4;
  int local_1c4;
  void *local_1c0;
  undefined4 local_1bc;
  void *local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0;
  char local_1ac;
  void **local_1a8;
  uint local_1a4;
  void **local_1a0;
  undefined *local_19c;
  uint local_198;
  uint local_194;
  uint uStack_190;
  void **local_18c;
  int local_188;
  stat64 local_184;
  stat64 local_124 [2];
  uint local_24;
  undefined4 *local_18;
  
  psVar14 = param_2;
  iVar15 = param_1;
  puVar16 = PTR_optarg_00015ffc;
  bVar29 = 0;
  local_18 = &param_1;
  local_1d4 = param_2;
  local_24 = *(uint *)(in_GS_OFFSET + 0x14);
  local_1c0 = (void *)0x0;
  local_1bc = 0;
  local_1b8 = (void *)0x0;
  local_1b4 = 0;
  local_1f0 = (char *)0x0;
  ppvVar18 = (void **)&local_1b0;
  for (iVar13 = 0xb; iVar13 != 0; iVar13 = iVar13 + -1) {
    *ppvVar18 = (void *)0x0;
    ppvVar18 = ppvVar18 + 1;
  }
  psVar37 = &local_184;
  local_1e8 = 0;
  local_1dc = &PTR_DAT_00016160;
  pcVar10 = "b:dehi:I:l:m:No:s:S:t:vV";
  local_1e9 = '\0';
  bVar2 = false;
code_r0x00011330:
  do {
    local_184.st_dev._0_4_ = 0;
    iVar13 = getopt_long(iVar15,psVar14,"b:dehi:I:l:m:No:s:S:t:vV",&PTR_DAT_00016160,psVar37);
    puVar3 = PTR_optarg_00015ffc;
    puVar24 = PTR_optind_00015fe8;
    local_1e0 = (stat64 *)pcVar10;
    local_1d8 = psVar37;
    if (iVar13 == -1) {
      if (local_1e8 != 0) {
        if (local_1e8 == 1) {
          ppvVar18 = (void **)0x0;
          pr2serr(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
        }
        else {
          ppvVar18 = (void **)0x0;
          pr2serr(
                 "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                 );
          pr2serr("\n");
          FUN_00012620();
        }
        goto LAB_0001160b;
      }
      iVar13 = *(int *)PTR_optind_00015fe8;
      if (iVar13 < iVar15) {
        local_1e0 = *(stat64 **)((int)&psVar14->st_dev + iVar13 * 4);
        iVar13 = iVar13 + 1;
        *(int *)PTR_optind_00015fe8 = iVar13;
        if (iVar15 <= iVar13) goto LAB_000116cd;
        do {
          uVar7 = *(undefined4 *)((int)&psVar14->st_dev + iVar13 * 4);
          psVar37 = local_1e0;
          psVar38 = local_1e0;
          pr2serr("Unexpected extra argument: %s\n",uVar7,local_1e0,local_1e0);
          iVar13 = *(int *)puVar24 + 1;
          *(int *)puVar24 = iVar13;
          local_1e0 = extraout_EDX_03;
        } while (iVar13 < iVar15);
        ppvVar18 = (void **)0x1;
        pr2serr("Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
                ,uVar7,psVar37,psVar38);
        local_1e0 = (stat64 *)pcVar10;
        local_1d8 = (stat64 *)"Unexpected extra argument: %s\n";
        goto LAB_0001160b;
      }
      local_1e0 = (stat64 *)0x0;
      psVar14 = extraout_ECX;
LAB_000116cd:
      if (bVar2) {
        if (local_1e9 != '\0') {
          pr2serr("Not in DEBUG mode, so \'-vV\' has no special action\n");
          psVar14 = extraout_ECX_04;
LAB_000119bc:
          ppvVar18 = (void **)0x0;
          pr2serr("sg_ses_microcode: version: %s\n","1.16 20180628",psVar14,psVar14);
          local_1e0 = (stat64 *)pcVar10;
          goto LAB_0001160b;
        }
      }
      else if (local_1e9 != '\0') goto LAB_000119bc;
      if (local_1e0 == (stat64 *)0x0) {
        pcVar5 = "missing device name!\n\n";
        goto LAB_000115ef;
      }
      if ((int)local_19c < 8) {
        if ((int)local_19c < 6) {
          local_1d4 = (stat64 *)0x0;
          if (local_19c != (undefined *)0x0) goto LAB_0001171b;
        }
        else {
LAB_00011c5b:
          local_1d4 = (stat64 *)0x1;
        }
      }
      else if ((local_19c == (undefined *)0xf) || (local_19c == (undefined *)0xff)) {
        local_1d4 = (stat64 *)0x0;
      }
      else {
        if (local_19c == (undefined *)0xe) goto LAB_00011c5b;
LAB_0001171b:
        pr2serr("%s: mc_mode=0x%x, continue for now\n",&DAT_000149dc,local_19c,local_1e0);
        local_1d4 = (stat64 *)0x0;
      }
      if ((0 < (int)local_1a0) && ((int)local_1a0 < (int)local_1a8)) {
        pr2serr("trim chunk size (CS) to be the same as LEN\n");
        local_1a8 = local_1a0;
      }
      ppvVar36 = local_1a0;
      if ((0 < (int)local_198) && (0 < (int)local_1a8)) {
        local_198 = 0;
        ppvVar36 = (void **)pr2serr(
                                   "WARNING: --offset= ignored (set back to 0) when --bpw= argument given (and > 0)\n"
                                   );
      }
      uVar7 = 0;
      iVar15 = local_188;
      local_1dc = (undefined **)sg_cmds_open_device(local_1e0,0,local_188,ppvVar36);
      uVar33 = CONCAT44(iVar15,uVar7);
      if ((int)local_1dc < 0) {
        if (local_188 != 0) {
          uVar7 = safe_strerror(-(int)local_1dc);
          pr2serr("sg_ses_microcode: open error: %s: %s\n",local_1e0,uVar7);
          local_1d4 = local_1e0;
        }
        lVar30 = sg_convert_errno(-(int)local_1dc);
        goto LAB_000118e5;
      }
      bVar17 = local_1f0 != (char *)0x0 & ((byte)local_1d4 ^ 1);
      uVar23 = CONCAT31((int3)((uint)local_1e0 >> 8),bVar17);
      if (bVar17 != 0) {
        pr2serr("ignoring --in=FILE option\n");
        uVar33 = CONCAT44(iVar15,uVar7);
        local_1d8 = (stat64 *)0x0;
        goto LAB_00011a5c;
      }
      if (local_1f0 == (char *)0x0) {
        local_1d8 = (stat64 *)0x0;
        if ((byte)local_1d4 == 0) goto LAB_00011a5c;
        pr2serr("need --in=FILE option with given mode\n");
        lVar30 = CONCAT44(extraout_EDX_08,0x1f);
        goto LAB_000118e5;
      }
      local_1e0 = (stat64 *)strcmp(local_1f0,"-");
      if (local_1e0 == (stat64 *)0x0) {
        uVar25 = 0;
        uVar7 = extraout_ECX_00;
      }
      else {
        uVar25 = open64(local_1f0,0,local_1e0,local_1e0);
        if ((int)uVar25 < 0) {
          piVar9 = __errno_location();
          uVar7 = sg_convert_errno(*piVar9);
          __snprintf_chk(local_124,0x100,1,0x100,"sg_ses_microcode: could not open %s for reading",
                         local_1f0);
          perror((char *)local_124);
          lVar30 = CONCAT44(extraout_EDX_12,uVar7);
          goto LAB_000118e5;
        }
        iVar15 = sg_set_binary_mode(uVar25);
        uVar7 = extraout_ECX_01;
        if (iVar15 < 0) {
          perror("sg_set_binary_mode");
          uVar7 = extraout_ECX_11;
        }
      }
      uVar34 = uVar25;
      iVar15 = __fxstat64(3,uVar25,psVar37);
      if ((iVar15 == 0) && ((local_184.st_mode & 0xf000) == 0x8000)) {
        if (local_1a0 == (void **)0x0) {
          iVar15 = ((int)local_194 >> 0x1f) - local_184.st_size._4_4_;
          if ((SBORROW4((int)local_194 >> 0x1f,local_184.st_size._4_4_) !=
              SBORROW4(iVar15,(uint)(local_194 < (uint)local_184.st_size))) !=
              (int)(iVar15 - (uint)(local_194 < (uint)local_184.st_size)) < 0) {
            local_1a0 = (void **)((uint)local_184.st_size - local_194);
            uVar23 = 1;
            goto LAB_00011e31;
          }
          uVar20 = 0xf;
          pr2serr("skip exceeds file size of %d bytes\n",(uint)local_184.st_size,extraout_EDX,
                  extraout_EDX);
          uVar7 = extraout_EDX_19;
        }
        else {
          uVar23 = 1;
LAB_00011e31:
          if ((int)local_1a0 < 0x8000001) goto LAB_0001185d;
          uVar20 = 0xf;
          pr2serr("file size or requested length (%d) exceeds MAX_XFER_LEN of %d bytes\n",local_1a0,
                  0x8000000,uVar23);
          uVar7 = extraout_EDX_06;
        }
      }
      else {
        if (local_1a0 != (void **)0x0) goto LAB_00011e31;
        local_1a0 = (void **)0x800000;
LAB_0001185d:
        ppvVar18 = local_1a0;
        local_1d8 = (stat64 *)malloc((size_t)local_1a0);
        if (local_1d8 != (stat64 *)0x0) {
          uVar35 = 0xff;
          uVar7 = extraout_ECX_02;
          memset(local_1d8,0xff,(size_t)ppvVar18);
          ppvVar36 = extraout_ECX_03;
          if ((int)local_194 < 1) {
LAB_00011f46:
            psVar14 = local_1d8;
            ppvVar6 = local_1a0;
            ppvVar18 = (void **)read(uVar25,local_1d8,(size_t)local_1a0);
            if (-1 < (int)ppvVar18) {
              ppvVar27 = local_1a0;
              uVar33 = CONCAT44(ppvVar6,psVar14);
              if ((int)local_1a0 <= (int)ppvVar18) goto LAB_00011f90;
              if (local_1ac == '\0') {
                ppvVar27 = ppvVar18;
                uVar33 = CONCAT44(ppvVar6,psVar14);
                if (local_188 == 0) goto LAB_00011f90;
                ppvVar36 = ppvVar18;
                pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,
                        ppvVar18);
                ppvVar6 = ppvVar18;
                pr2serr("will send %d bytes",ppvVar18);
                uVar33 = CONCAT44(extraout_EDX_18,local_1a8);
                if ((0 < (int)local_1a8) && ((int)local_1a8 < (int)local_1a0)) goto LAB_00012469;
                pr2serr("\n",ppvVar6,local_1f0,ppvVar36);
                uVar33 = CONCAT44(local_1f0,ppvVar6);
                goto LAB_00011f90;
              }
              ppvVar6 = local_1a0;
              pr2serr("tried to read %d bytes from %s, got %d bytes\n",local_1a0,local_1f0,ppvVar18)
              ;
              pr2serr("pad with 0xff bytes and continue\n");
              ppvVar36 = ppvVar18;
              ppvVar27 = local_1a0;
              uVar33 = CONCAT44(local_1f0,ppvVar6);
              goto LAB_00011f90;
            }
            piVar9 = __errno_location();
            uVar20 = sg_convert_errno(*piVar9);
            pcVar10 = "sg_ses_microcode: couldn\'t read from %s";
          }
          else {
            if ((char)uVar23 == '\0') {
              if (local_1e0 == (stat64 *)0x0) {
                uVar20 = 0xf;
                pr2serr("Can\'t skip on stdin\n",uVar35,ppvVar18,uVar7);
                goto LAB_000118d4;
              }
              uVar20 = 0xf;
              pr2serr("sg_ses_microcode: not a \'regular\' file so can\'t apply skip\n",uVar35,
                      ppvVar18,uVar7);
              goto LAB_00011e75;
            }
            _Var32 = lseek64(uVar25,(longlong)(int)local_194,0);
            ppvVar36 = extraout_ECX_09;
            if (-1 < _Var32) goto LAB_00011f46;
            piVar9 = __errno_location();
            uVar20 = sg_convert_errno(*piVar9);
            pcVar10 = "sg_ses_microcode: couldn\'t skip to required position on %s";
          }
          local_1d4 = local_124;
          __snprintf_chk(local_1d4,0x100,1,0x100,pcVar10,local_1f0);
          perror((char *)local_1d4);
          if (local_1e0 == (stat64 *)0x0) goto LAB_000118d4;
          goto LAB_00011e75;
        }
        uVar20 = 99;
        pr2serr("sg_ses_microcode: out of memory to hold microcode read from FILE\n",uVar34,psVar37,
                uVar7);
        uVar7 = extraout_EDX_16;
      }
      lVar30 = CONCAT44(uVar7,uVar20);
      local_1d8 = (stat64 *)0x0;
      if (local_1e0 == (stat64 *)0x0) goto LAB_000118e5;
LAB_00011e75:
      close(uVar25);
      lVar30 = CONCAT44(extraout_EDX_07,uVar20);
      goto LAB_00011e81;
    }
    switch(iVar13) {
    case 0x3f:
    case 0x68:
      local_1e8 = local_1e8 + 1;
      break;
    default:
      pcVar5 = "unrecognised option code 0x%x ??\n";
LAB_000115ef:
      pr2serr(pcVar5);
      pr2serr(
             "Usage: sg_ses_microcode [--bpw=CS] [--dry-run] [--ealsd] [--help] [--id=ID]\n                        [--in=FILE] [--length=LEN] [--mode=MO] [--non]\n                        [--offset=OFF] [--skip=SKIP] [--subenc=SEID]\n                        [--tlength=TLEN] [--verbose] [--version]\n                        DEVICE\n  where:\n    --bpw=CS|-b CS         CS is chunk size: bytes per send diagnostic\n                           command (def: 0 -> as many as possible)\n                           can append \',act\' to do activate after last\n    --dry-run|-d           skip SCSI commands, do everything else\n    --ealsd|-e             exit after last Send Diagnostic command\n    --help|-h              print out usage message then exit\n    --id=ID|-i ID          buffer identifier (0 (default) to 255)\n    --in=FILE|-I FILE      read from FILE (\'-I -\' read from stdin)\n    --length=LEN|-l LEN    length in bytes to send (def: deduced from\n                           FILE taking SKIP into account)\n    --mode=MO|-m MO        download microcode mode, MO is number or\n                           acronym (def: 0 -> \'dmc_status\')\n    --non|-N               non-standard: bypass all receive diagnostic\n                           results commands except after check condition\n    --offset=OFF|-o OFF    buffer offset (unit: bytes, def: 0);\n                           ignored if --bpw=CS given\n    --skip=SKIP|-s SKIP    bytes in file FILE to skip before reading\n    --subenc=SEID|-S SEID     subenclosure identifier (def: 0 (primary))\n    --tlength=TLEN|-t TLEN    total length of firmware in bytes\n                              (def: 0). Only needed if TLEN>LEN\n    --verbose|-v           increase verbosity\n    --version|-V           print version string and exit\n\nDoes one or more SCSI SEND DIAGNOSTIC followed by RECEIVE DIAGNOSTIC\nRESULTS command sequences in order to download microcode. Use \'-m xxx\'\nto list available modes. With only DEVICE given, the Download Microcode\nStatus dpage is output.\n"
             );
      goto code_r0x00011606;
    case 0x49:
      local_1f0 = *(char **)PTR_optarg_00015ffc;
      break;
    case 0x4e:
      local_1b0._2_1_ = '\x01';
      break;
    case 0x53:
      uStack_190 = func_0x00011130(*(undefined4 *)puVar16);
      if (0xff < uStack_190) {
        pr2serr("expected argument to \'--subenc\' to be 0 to 255\n");
        goto code_r0x00011606;
      }
      break;
    case 0x56:
      local_1e9 = '\x01';
      break;
    case 0x62:
      local_1a8 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_1a8 < 0) {
        pr2serr("argument to \'--bpw\' should be in a positive number\n");
        goto code_r0x00011606;
      }
      iVar13 = func_0x00011150(*(undefined4 *)puVar3,0x2c,local_1a8,local_1a8);
      if ((iVar13 != 0) &&
         (iVar13 = func_0x00011200(&UNK_000146c9,iVar13 + 1,3,puVar3), iVar13 == 0)) {
        local_1b0._3_1_ = '\x01';
      }
      break;
    case 100:
      local_1b0._0_1_ = '\x01';
      break;
    case 0x65:
      local_1b0._1_1_ = 1;
      break;
    case 0x69:
      local_1a4 = func_0x00011130(*(undefined4 *)PTR_optarg_00015ffc);
      if (0xff < local_1a4) {
        pr2serr("argument to \'--id\' should be in the range 0 to 255\n");
        goto code_r0x00011606;
      }
      break;
    case 0x6c:
      local_1a0 = (void **)func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_1a0 < 0) {
        pr2serr("bad argument to \'--length\'\n");
        goto code_r0x00011606;
      }
      local_1ac = '\x01';
      break;
    case 0x6d:
      piVar9 = (int *)func_0x00011240();
      pcVar5 = *(char **)PTR_optarg_00015ffc;
      if ((*(byte *)(*piVar9 + 1 + *pcVar5 * 2) & 8) == 0) {
        uVar25 = 0xffffffff;
        pcVar26 = pcVar5;
        do {
          if (uVar25 == 0) break;
          uVar25 = uVar25 - 1;
          cVar4 = *pcVar26;
          pcVar26 = pcVar26 + (uint)bVar29 * -2 + 1;
        } while (cVar4 != '\0');
        if (PTR_s_dmc_status_00016100 == (undefined *)0x0) {
code_r0x00011fdc:
          FUN_00012620();
          goto code_r0x00011606;
        }
        ppuVar19 = &PTR_s_dmc_status_00016100;
        puVar24 = PTR_s_dmc_status_00016100;
        while (iVar13 = func_0x00011200(puVar24,pcVar5,~uVar25 - 1), iVar13 != 0) {
          ppuVar19 = ppuVar19 + 3;
          puVar24 = *ppuVar19;
          if (puVar24 == (undefined *)0x0) goto code_r0x00011fdc;
        }
        local_19c = ppuVar19[1];
      }
      else {
        local_19c = (undefined *)func_0x00011130(pcVar5);
        if ((undefined *)0xff < local_19c) {
          pr2serr("argument to \'--mode\' should be in the range 0 to 255\n");
          goto code_r0x00011606;
        }
      }
      break;
    case 0x6f:
      local_198 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_198 < 0) {
        pr2serr("bad argument to \'--offset\'\n");
        goto code_r0x00011606;
      }
      if ((local_198 & 3) != 0) {
        pr2serr("\'--offset\' value needs to be a multiple of 4\n");
        goto code_r0x00011606;
      }
      break;
    case 0x73:
      local_194 = func_0x000111e0(*(undefined4 *)PTR_optarg_00015ffc);
      if ((int)local_194 < 0) {
        pr2serr("bad argument to \'--skip\'\n");
        goto code_r0x00011606;
      }
      break;
    case 0x74:
      goto code_r0x000113fe;
    case 0x76:
      local_188 = local_188 + 1;
      bVar2 = true;
    }
  } while( true );
code_r0x000113fe:
  local_18c = (void **)func_0x000111e0(*(undefined4 *)puVar16);
  if ((int)local_18c < 0) goto code_r0x0001141f;
  goto code_r0x00011330;
code_r0x0001141f:
  pr2serr("bad argument to \'--tlength\'\n");
code_r0x00011606:
  ppvVar18 = (void **)0x1;
  local_1e0 = (stat64 *)pcVar10;
LAB_0001160b:
  do {
    uVar25 = local_24 ^ *(uint *)(in_GS_OFFSET + 0x14);
    if (uVar25 == 0) {
      return ppvVar18;
    }
    uVar33 = FUN_00012f60();
LAB_00012469:
    ppvVar36 = (void **)((ulonglong)uVar33 >> 0x20);
    pr2serr(", %d bytes per WRITE BUFFER command\n",uVar33,ppvVar36);
    ppvVar27 = ppvVar18;
LAB_00011f90:
    local_1a0 = ppvVar27;
    if (local_1e0 != (stat64 *)0x0) {
      close(uVar25);
    }
LAB_00011a5c:
    if ((int)local_18c < (int)local_1a0) {
      local_18c = local_1a0;
    }
    if ((local_1b0._2_1_ == '\0') || (local_19c != (undefined *)0x0)) {
      ppvVar6 = (void **)(uint)(3 < local_188);
      ppvVar18 = &local_1c0;
      ppvVar36 = (void **)0x0;
      lVar30 = sg_memalign(0x2000,0,ppvVar18,ppvVar6);
      local_1e0 = (stat64 *)lVar30;
      if (local_1e0 == (stat64 *)0x0) {
        pr2serr("sg_ses_microcode: out of memory (data-in buffer)\n");
        lVar30 = CONCAT44(extraout_EDX_17,99);
      }
      else {
        if ((char)local_1b0 == '\0') {
          iVar15 = 1;
          if (0 < local_188) {
            iVar15 = local_188;
          }
          lVar30 = sg_ll_receive_diag_v2
                             (local_1dc,1,0xe,local_1e0,0x2000,0,&local_1c4,1,iVar15 + -1);
          ppvVar27 = (void **)lVar30;
          if (ppvVar27 != (void **)0x0) goto LAB_00011e81;
          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);
          ppvVar22 = (void **)(0x2000 - local_1c4);
          ppvVar8 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);
          puVar16 = extraout_ECX_05;
          ppvVar28 = ppvVar8;
          if (ppvVar8 < (void **)0x2001) goto LAB_00011b07;
          ppvVar28 = (void **)0x2000;
          ppvVar36 = (void **)0x2000;
          uVar33 = pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n",0x2000,
                           ppvVar8,0);
          uVar25 = (uint)((ulonglong)uVar33 >> 0x20);
          ppvVar12 = (void **)uVar33;
          puVar16 = extraout_ECX_06;
          if ((int)ppvVar22 < 0x2000) goto LAB_00011ddf;
        }
        else {
          puVar21 = &DAT_00016020;
          psVar14 = local_1e0;
          for (iVar15 = 0x12; iVar15 != 0; iVar15 = iVar15 + -1) {
            *(undefined4 *)&psVar14->st_dev = *puVar21;
            puVar21 = puVar21 + (uint)bVar29 * -2 + 1;
            psVar14 = (stat64 *)((int)psVar14 + (uint)bVar29 * -8 + 4);
          }
          ppvVar22 = (void **)0x48;
          local_1c4 = 0x1fb8;
          uVar1 = *(ushort *)((int)&local_1e0->st_dev + 2);
          ppvVar27 = (void **)((ushort)(uVar1 << 8 | uVar1 >> 8) + 4);
          puVar16 = (undefined *)0x0;
          ppvVar28 = ppvVar27;
          if (ppvVar27 < (void **)0x2001) {
LAB_00011b07:
            uVar25 = (uint)((ulonglong)lVar30 >> 0x20);
            ppvVar12 = (void **)lVar30;
            ppvVar8 = ppvVar18;
            ppvVar27 = ppvVar6;
            if ((int)ppvVar22 < (int)ppvVar28) goto LAB_00011ddf;
          }
          else {
            ppvVar28 = (void **)0x2000;
            ppvVar12 = (void **)pr2serr("<<< warning response buffer too small [%d but need %d]>>>\n"
                                        ,0x2000,ppvVar27,local_1e0);
LAB_00011ddf:
            ppvVar36 = ppvVar22;
            ppvVar8 = ppvVar28;
            pr2serr("<<< warning response too short [actually got %d but need %d]>>>\n",ppvVar22,
                    ppvVar28,ppvVar12);
            puVar16 = extraout_ECX_07;
            uVar25 = extraout_EDX_05;
            ppvVar28 = ppvVar22;
            ppvVar27 = ppvVar12;
          }
          if ((int)ppvVar28 < 8) {
            pr2serr("Download microcode status dpage too short\n",ppvVar36,ppvVar8,ppvVar27);
            lVar30 = CONCAT44(extraout_EDX_10,99);
            goto LAB_00011e81;
          }
        }
        if ((2 < local_188) || (((char)local_1b0 != '\0' && (local_188 != 0)))) {
          uVar25 = *(uint *)((int)&local_1e0->st_dev + 4);
          ppvVar27 = (void **)(uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |
                              uVar25 << 0x18);
          ppvVar8 = (void **)(uint)*(byte *)((int)&local_1e0->st_dev + 1);
          ppvVar36 = ppvVar28;
          pr2serr("rec diag(ini): rsp_len=%d, num_sub-enc=%u rec_gen_code=%u\n",ppvVar28,ppvVar8,
                  ppvVar27);
          puVar16 = extraout_ECX_08;
          uVar25 = extraout_EDX_09;
        }
        uVar34 = *(uint *)((int)&local_1e0->st_dev + 4);
        if (local_19c == (undefined *)0x0) {
          puts("Download microcode status diagnostic page:");
          cVar4 = *(char *)((int)&local_1e0->st_dev + 1);
          ppvVar28 = ppvVar28 + -2;
          uVar7 = extraout_ECX_10;
          if (((uint)ppvVar28 & 0xf) != 0) {
            pr2serr("Found %d Download microcode status descriptors, but there is residual\n",
                    (int)ppvVar28 >> 4,ppvVar28,ppvVar28);
            uVar7 = extraout_ECX_13;
          }
          __printf_chk(1,"  number of secondary subenclosures: %d\n",cVar4,uVar7);
          __printf_chk(1,"  generation code: 0x%x\n",
                       uVar34 >> 0x18 | (uVar34 & 0xff0000) >> 8 | (uVar34 & 0xff00) << 8 |
                       uVar34 << 0x18);
          local_1d4 = (stat64 *)(&local_1e0->st_dev + ((int)ppvVar28 >> 4) * 2);
          for (psVar14 = local_1e0; lVar30 = ZEXT48(local_1e0) << 0x20,
              local_1e0 = (stat64 *)" [primary]", local_1d4 != psVar14;
              psVar14 = (stat64 *)&psVar14->st_mode) {
            cVar4 = *(char *)((int)&psVar14->__pad1 + 1);
            pcVar10 = "";
            if (cVar4 == '\0') {
              pcVar10 = " [primary]";
            }
            __printf_chk(1,"   subenclosure identifier: %d%s\n",cVar4,pcVar10);
            uVar25 = (uint)*(byte *)((int)&psVar14->__pad1 + 2);
            for (puVar11 = &DAT_00016080; pcVar10 = (char *)puVar11[1], pcVar10 != (char *)0x0;
                puVar11 = puVar11 + 2) {
              if (uVar25 == *puVar11) {
                if (*pcVar10 != '\0') {
                  __printf_chk(1,"     download microcode status: %s [0x%x]\n",pcVar10,uVar25);
                  __printf_chk(1,"     download microcode additional status: 0x%x\n",
                               *(undefined1 *)((int)&psVar14->__pad1 + 3));
                  uVar7 = extraout_EDX_15;
                  goto LAB_0001225d;
                }
                break;
              }
            }
            __printf_chk(1,"     download microcode status: 0x%x [additional status: 0x%x]\n",uVar25
                         ,*(undefined1 *)((int)&psVar14->__pad1 + 3));
            uVar7 = extraout_EDX_13;
LAB_0001225d:
            uVar25 = psVar14->__st_ino;
            __printf_chk(1,"     download microcode maximum size: %u bytes\n",
                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |
                         uVar25 << 0x18,uVar7);
            __printf_chk(1,"     download microcode expected buffer id: 0x%x\n",
                         *(undefined1 *)((int)&psVar14->st_mode + 3));
            uVar25 = psVar14->st_nlink;
            __printf_chk(1,"     download microcode expected buffer id offset: %u\n",
                         uVar25 >> 0x18 | (uVar25 & 0xff0000) >> 8 | (uVar25 & 0xff00) << 8 |
                         uVar25 << 0x18);
            local_1e0 = extraout_EDX_14;
          }
        }
        else {
          puVar24 = local_19c;
          if ((byte)local_1d4 == '\0') {
LAB_0001201a:
            psVar14 = (stat64 *)0x0;
            ppvVar18 = (void **)0x0;
            puVar16 = puVar24;
          }
          else {
            iVar15 = 0;
            if (0 < (int)local_1a8) {
              for (; iVar15 < (int)local_1a0; iVar15 = (int)ppvVar18 + iVar15) {
                ppvVar8 = local_1a8;
                ppvVar18 = local_1a8;
                if ((int)local_1a0 - iVar15 <= (int)local_1a8) {
                  local_1e9 = (byte)local_1d4;
                  ppvVar8 = (void **)((uint)local_1d4 & 0xff);
                  ppvVar18 = (void **)((int)local_1a0 - iVar15);
                }
                if (local_188 != 0) {
                  ppvVar8 = (void **)pr2serr("bpw loop: mode=0x%x, id=%d, off_off=%d, len=%d, last=%d\n"
                                             ,local_19c,local_1a4,iVar15,ppvVar18,local_1e9,ppvVar8,
                                             ppvVar8);
                }
                ppvVar36 = (void **)&local_1b0;
                ppvVar27 = ppvVar8;
                lVar30 = FUN_000126a0((int)&local_1d8->st_dev + iVar15,ppvVar18,&local_1bc,local_1e0
                                      ,local_1e9);
                uVar25 = (uint)((ulonglong)lVar30 >> 0x20);
                if ((int)lVar30 != 0) goto LAB_00011e81;
              }
              puVar24 = (undefined *)0x0;
              lVar30 = (ulonglong)uVar25 << 0x20;
              if (local_1b0._3_1_ == '\0') goto LAB_00011e81;
              local_19c = (undefined *)0xf;
              if (local_188 != 0) {
                pr2serr("sending Activate deferred microcode [0xf]\n",ppvVar36,ppvVar8,ppvVar27);
              }
              goto LAB_0001201a;
            }
            psVar14 = local_1d8;
            ppvVar18 = local_1a0;
            if (local_188 != 0) {
              pr2serr("single: mode=0x%x, id=%d, offset=%d, len=%d\n",local_19c,local_1a4,local_198,
                      local_1a0);
              ppvVar18 = local_1a0;
              puVar16 = extraout_ECX_12;
            }
          }
          lVar30 = FUN_000126a0(psVar14,ppvVar18,&local_1bc,local_1e0,1,&local_1b0,puVar16,puVar16);
        }
      }
    }
    else {
      pr2serr("Do nothing because \'--non\' given so fetching the Download microcode status\ndpage might be dangerous\n"
              ,uVar33,ppvVar36);
      lVar30 = (ulonglong)extraout_EDX_11 << 0x20;
    }
LAB_00011e81:
    uVar20 = (undefined4)lVar30;
    if (local_1d8 != (stat64 *)0x0) {
LAB_000118d4:
      free(local_1d8);
      lVar30 = CONCAT44(extraout_EDX_00,uVar20);
    }
LAB_000118e5:
    uVar7 = (undefined4)((ulonglong)lVar30 >> 0x20);
    iVar15 = (int)lVar30;
    if (local_1b8 != (void *)0x0) {
      free(local_1b8);
      uVar7 = extraout_EDX_01;
    }
    if (local_1c0 != (void *)0x0) {
      free(local_1c0);
      uVar7 = extraout_EDX_02;
    }
    uVar33 = CONCAT44(uVar7,iVar15);
    if (-1 < (int)local_1dc) {
      uVar31 = sg_cmds_close_device(local_1dc);
      uVar33 = CONCAT44((int)((ulonglong)uVar31 >> 0x20),iVar15);
      if ((int)uVar31 < 0) {
        iVar13 = -(int)uVar31;
        uVar7 = safe_strerror(iVar13);
        pr2serr("close error: %s\n",uVar7);
        uVar33 = CONCAT44(extraout_EDX_04,iVar15);
        if (iVar15 == 0) {
          uVar33 = sg_convert_errno(iVar13);
        }
      }
    }
    ppvVar18 = (void **)uVar33;
    if ((local_188 == 0) &&
       (cVar4 = sg_if_can2stderr("sg_ses_mocrocode failed: ",uVar33,(int)((ulonglong)uVar33 >> 0x20)
                                ), cVar4 == '\0')) {
      pr2serr("Some error occurred, try again with \'-v\' or \'-vv\' for more information\n");
    }
    if ((int)ppvVar18 < 0) {
      ppvVar18 = (void **)0x63;
    }
  } while( true );
}

