
/* WARNING: Switch with 1 destination removed at 0x000177b0 */

_Bool sg_is_scsi_cdb(uint8_t *cdbp,int clen)

{
  byte bVar1;
  byte bVar2;
  _Bool _Var3;
  
  _Var3 = false;
  if (5 < clen) {
    bVar1 = *cdbp;
    bVar2 = bVar1 >> 5;
    if (bVar2 == 3) {
      if ((0xb < clen) && ((clen & 3U) == 0)) {
        if (bVar1 == 0x7e) {
          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;
        }
        if (bVar1 == 0x7f) {
          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;
        }
      }
    }
    else if (clen < 0x11) {
      if (clen == 10) {
        _Var3 = true;
        if (bVar2 < 6) {
          return (byte)(bVar2 - 1) < 2;
        }
      }
      else if (clen < 0xb) {
        if (clen == 6) {
          return 4 < (byte)(bVar2 - 1);
        }
      }
      else {
        if (clen == 0xc) {
          return 4 < bVar2;
        }
        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {
          _Var3 = bVar2 == 4;
        }
      }
    }
  }
  return _Var3;
}



/* WARNING: Switch with 1 destination removed at 0x000177b0 */

uint sg_is_scsi_cdb(byte *param_1,uint param_2)

{
  byte bVar1;
  uint uVar2;
  byte bVar3;
  
  uVar2 = 0;
  if (5 < (int)param_2) {
    bVar1 = *param_1;
    bVar3 = bVar1 >> 5;
    if (bVar3 == 3) {
      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {
        if (bVar1 == 0x7e) {
          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;
          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);
        }
        if (bVar1 == 0x7f) {
          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &
                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);
        }
      }
    }
    else if ((int)param_2 < 0x11) {
      if (param_2 == 10) {
        uVar2 = 1;
        if (bVar3 < 6) {
          return (uint)((byte)(bVar3 - 1) < 2);
        }
      }
      else if ((int)param_2 < 0xb) {
        if (param_2 == 6) {
          return (uint)(4 < (byte)(bVar3 - 1));
        }
      }
      else {
        if (param_2 == 0xc) {
          return (uint)(4 < bVar3);
        }
        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {
          uVar2 = (uint)(bVar3 == 4);
        }
      }
    }
  }
  return uVar2;
}


JMP dword ptr [EBX + 0x1e8]
(translation_unit "/* WARNING: Switch with 1 destination removed at 0x000177b0 */\n\nuint sg_is_scsi_cdb(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}\n\n" comment (function_definition "uint sg_is_scsi_cdb(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}" type_identifier (function_declarator "sg_is_scsi_cdb(byte *param_1,uint param_2)" identifier (parameter_list "(byte *param_1,uint param_2)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }" if (parenthesized_expression "(5 < (int)param_2)" ( (binary_expression "5 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar3 = bVar1 >> 5;" (assignment_expression "bVar3 = bVar1 >> 5" identifier = (binary_expression "bVar1 >> 5" identifier >> number_literal)) ;) (if_statement "if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" if (parenthesized_expression "(bVar3 == 3)" ( (binary_expression "bVar3 == 3" identifier == number_literal) )) (compound_statement "{\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }" { (if_statement "if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }" if (parenthesized_expression "((0xb < (int)param_2) && ((param_2 & 3) == 0))" ( (binary_expression "(0xb < (int)param_2) && ((param_2 & 3) == 0)" (parenthesized_expression "(0xb < (int)param_2)" ( (binary_expression "0xb < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((param_2 & 3) == 0)" ( (binary_expression "(param_2 & 3) == 0" (parenthesized_expression "(param_2 & 3)" ( (binary_expression "param_2 & 3" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }" { (if_statement "if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }" if (parenthesized_expression "(bVar1 == 0x7e)" ( (binary_expression "bVar1 == 0x7e" identifier == number_literal) )) (compound_statement "{\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }" { (expression_statement "uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;" (assignment_expression "uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4" identifier = (binary_expression "(ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4" (call_expression "(ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8)" ( (binary_expression "*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8" (binary_expression "*(ushort *)(param_1 + 2) << 8" (pointer_expression "*(ushort *)(param_1 + 2)" * (cast_expression "(ushort *)(param_1 + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) << number_literal) | (binary_expression "*(ushort *)(param_1 + 2) >> 8" (pointer_expression "*(ushort *)(param_1 + 2)" * (cast_expression "(ushort *)(param_1 + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) >> number_literal)) ))) + number_literal)) ;) (return_statement "return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);" return (call_expression "CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2)" identifier (argument_list "((int3)(uVar2 >> 8),uVar2 == param_2)" ( (call_expression "(int3)(uVar2 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar2 >> 8)" ( (binary_expression "uVar2 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar2 == param_2" identifier == identifier) ))) ;) })) (if_statement "if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }" if (parenthesized_expression "(bVar1 == 0x7f)" ( (binary_expression "bVar1 == 0x7f" identifier == number_literal) )) (compound_statement "{\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }" { (return_statement "return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);" return (binary_expression "CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" (call_expression "CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2)" identifier (argument_list "((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2)" ( (call_expression "(int3)(param_1[7] + 8 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(param_1[7] + 8 >> 8)" ( (binary_expression "param_1[7] + 8 >> 8" (binary_expression "param_1[7] + 8" (subscript_expression "param_1[7]" identifier [ number_literal ]) + number_literal) >> number_literal) ))) , (binary_expression "param_1[7] + 8 == param_2" (binary_expression "param_1[7] + 8" (subscript_expression "param_1[7]" identifier [ number_literal ]) + number_literal) == identifier) ))) & (call_expression "CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" identifier (argument_list "((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" ( (call_expression "(int3)(param_2 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(param_2 >> 8)" ( (binary_expression "param_2 >> 8" identifier >> number_literal) ))) , (binary_expression "*(short *)(param_1 + 8) != 0" (pointer_expression "*(short *)(param_1 + 8)" * (cast_expression "(short *)(param_1 + 8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) != number_literal) )))) ;) })) })) }) (else_clause "else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" else (if_statement "if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" if (parenthesized_expression "((int)param_2 < 0x11)" ( (binary_expression "(int)param_2 < 0x11" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" { (if_statement "if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" if (parenthesized_expression "(param_2 == 10)" ( (binary_expression "param_2 == 10" identifier == number_literal) )) (compound_statement "{\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }" { (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }" if (parenthesized_expression "(bVar3 < 6)" ( (binary_expression "bVar3 < 6" identifier < number_literal) )) (compound_statement "{\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }" { (return_statement "return (uint)((byte)(bVar3 - 1) < 2);" return (call_expression "(uint)((byte)(bVar3 - 1) < 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((byte)(bVar3 - 1) < 2)" ( (binary_expression "(byte)(bVar3 - 1) < 2" (call_expression "(byte)(bVar3 - 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(bVar3 - 1)" ( (binary_expression "bVar3 - 1" identifier - number_literal) ))) < number_literal) ))) ;) })) }) (else_clause "else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" else (if_statement "if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" if (parenthesized_expression "((int)param_2 < 0xb)" ( (binary_expression "(int)param_2 < 0xb" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }" { (if_statement "if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }" if (parenthesized_expression "(param_2 == 6)" ( (binary_expression "param_2 == 6" identifier == number_literal) )) (compound_statement "{\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }" { (return_statement "return (uint)(4 < (byte)(bVar3 - 1));" return (call_expression "(uint)(4 < (byte)(bVar3 - 1))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(4 < (byte)(bVar3 - 1))" ( (binary_expression "4 < (byte)(bVar3 - 1)" number_literal < (call_expression "(byte)(bVar3 - 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(bVar3 - 1)" ( (binary_expression "bVar3 - 1" identifier - number_literal) )))) ))) ;) })) }) (else_clause "else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" else (compound_statement "{\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" { (if_statement "if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }" if (parenthesized_expression "(param_2 == 0xc)" ( (binary_expression "param_2 == 0xc" identifier == number_literal) )) (compound_statement "{\n          return (uint)(4 < bVar3);\n        }" { (return_statement "return (uint)(4 < bVar3);" return (call_expression "(uint)(4 < bVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(4 < bVar3)" ( (binary_expression "4 < bVar3" number_literal < identifier) ))) ;) })) (if_statement "if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }" if (parenthesized_expression "((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6))" ( (binary_expression "(param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)" (parenthesized_expression "(param_2 == 0x10)" ( (binary_expression "param_2 == 0x10" identifier == number_literal) )) && (parenthesized_expression "(uVar2 = 1, bVar3 < 6)" ( (comma_expression "uVar2 = 1, bVar3 < 6" (assignment_expression "uVar2 = 1" identifier = number_literal) , (binary_expression "bVar3 < 6" identifier < number_literal)) ))) )) (compound_statement "{\n          uVar2 = (uint)(bVar3 == 4);\n        }" { (expression_statement "uVar2 = (uint)(bVar3 == 4);" (assignment_expression "uVar2 = (uint)(bVar3 == 4)" identifier = (call_expression "(uint)(bVar3 == 4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar3 == 4)" ( (binary_expression "bVar3 == 4" identifier == number_literal) )))) ;) })) }))))) })))) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "/* WARNING: Switch with 1 destination removed at 0x000177b0 */\n\n_Bool sg_is_scsi_cdb(uint8_t *cdbp,int clen)\n\n{\n  byte bVar1;\n  byte bVar2;\n  _Bool _Var3;\n  \n  _Var3 = false;\n  if (5 < clen) {\n    bVar1 = *cdbp;\n    bVar2 = bVar1 >> 5;\n    if (bVar2 == 3) {\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }\n    else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }\n  }\n  return _Var3;\n}\n\n" comment (function_definition "_Bool sg_is_scsi_cdb(uint8_t *cdbp,int clen)\n\n{\n  byte bVar1;\n  byte bVar2;\n  _Bool _Var3;\n  \n  _Var3 = false;\n  if (5 < clen) {\n    bVar1 = *cdbp;\n    bVar2 = bVar1 >> 5;\n    if (bVar2 == 3) {\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }\n    else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }\n  }\n  return _Var3;\n}" type_identifier (function_declarator "sg_is_scsi_cdb(uint8_t *cdbp,int clen)" identifier (parameter_list "(uint8_t *cdbp,int clen)" ( (parameter_declaration "uint8_t *cdbp" primitive_type (pointer_declarator "*cdbp" * identifier)) , (parameter_declaration "int clen" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  _Bool _Var3;\n  \n  _Var3 = false;\n  if (5 < clen) {\n    bVar1 = *cdbp;\n    bVar2 = bVar1 >> 5;\n    if (bVar2 == 3) {\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }\n    else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }\n  }\n  return _Var3;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "_Bool _Var3;" type_identifier identifier ;) (expression_statement "_Var3 = false;" (assignment_expression "_Var3 = false" identifier = false) ;) (if_statement "if (5 < clen) {\n    bVar1 = *cdbp;\n    bVar2 = bVar1 >> 5;\n    if (bVar2 == 3) {\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }\n    else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }\n  }" if (parenthesized_expression "(5 < clen)" ( (binary_expression "5 < clen" number_literal < identifier) )) (compound_statement "{\n    bVar1 = *cdbp;\n    bVar2 = bVar1 >> 5;\n    if (bVar2 == 3) {\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }\n    else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }\n  }" { (expression_statement "bVar1 = *cdbp;" (assignment_expression "bVar1 = *cdbp" identifier = (pointer_expression "*cdbp" * identifier)) ;) (expression_statement "bVar2 = bVar1 >> 5;" (assignment_expression "bVar2 = bVar1 >> 5" identifier = (binary_expression "bVar1 >> 5" identifier >> number_literal)) ;) (if_statement "if (bVar2 == 3) {\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }\n    else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }" if (parenthesized_expression "(bVar2 == 3)" ( (binary_expression "bVar2 == 3" identifier == number_literal) )) (compound_statement "{\n      if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }\n    }" { (if_statement "if ((0xb < clen) && ((clen & 3U) == 0)) {\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }" if (parenthesized_expression "((0xb < clen) && ((clen & 3U) == 0))" ( (binary_expression "(0xb < clen) && ((clen & 3U) == 0)" (parenthesized_expression "(0xb < clen)" ( (binary_expression "0xb < clen" number_literal < identifier) )) && (parenthesized_expression "((clen & 3U) == 0)" ( (binary_expression "(clen & 3U) == 0" (parenthesized_expression "(clen & 3U)" ( (binary_expression "clen & 3U" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }\n        if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }\n      }" { (if_statement "if (bVar1 == 0x7e) {\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }" if (parenthesized_expression "(bVar1 == 0x7e)" ( (binary_expression "bVar1 == 0x7e" identifier == number_literal) )) (compound_statement "{\n          return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;\n        }" { (return_statement "return (ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen;" return (binary_expression "(ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4 == clen" (binary_expression "(ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8) + 4" (call_expression "(ushort)(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8)" ( (binary_expression "*(ushort *)(cdbp + 2) << 8 | *(ushort *)(cdbp + 2) >> 8" (binary_expression "*(ushort *)(cdbp + 2) << 8" (pointer_expression "*(ushort *)(cdbp + 2)" * (cast_expression "(ushort *)(cdbp + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(cdbp + 2)" ( (binary_expression "cdbp + 2" identifier + number_literal) )))) << number_literal) | (binary_expression "*(ushort *)(cdbp + 2) >> 8" (pointer_expression "*(ushort *)(cdbp + 2)" * (cast_expression "(ushort *)(cdbp + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(cdbp + 2)" ( (binary_expression "cdbp + 2" identifier + number_literal) )))) >> number_literal)) ))) + number_literal) == identifier) ;) })) (if_statement "if (bVar1 == 0x7f) {\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }" if (parenthesized_expression "(bVar1 == 0x7f)" ( (binary_expression "bVar1 == 0x7f" identifier == number_literal) )) (compound_statement "{\n          return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;\n        }" { (return_statement "return cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0;" return (binary_expression "cdbp[7] + 8 == clen && *(short *)(cdbp + 8) != 0" (binary_expression "cdbp[7] + 8 == clen" (binary_expression "cdbp[7] + 8" (subscript_expression "cdbp[7]" identifier [ number_literal ]) + number_literal) == identifier) && (binary_expression "*(short *)(cdbp + 8) != 0" (pointer_expression "*(short *)(cdbp + 8)" * (cast_expression "(short *)(cdbp + 8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(cdbp + 8)" ( (binary_expression "cdbp + 8" identifier + number_literal) )))) != number_literal)) ;) })) })) }) (else_clause "else if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }" else (if_statement "if (clen < 0x11) {\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }" if (parenthesized_expression "(clen < 0x11)" ( (binary_expression "clen < 0x11" identifier < number_literal) )) (compound_statement "{\n      if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }\n    }" { (if_statement "if (clen == 10) {\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }\n      else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }" if (parenthesized_expression "(clen == 10)" ( (binary_expression "clen == 10" identifier == number_literal) )) (compound_statement "{\n        _Var3 = true;\n        if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }\n      }" { (expression_statement "_Var3 = true;" (assignment_expression "_Var3 = true" identifier = true) ;) (if_statement "if (bVar2 < 6) {\n          return (byte)(bVar2 - 1) < 2;\n        }" if (parenthesized_expression "(bVar2 < 6)" ( (binary_expression "bVar2 < 6" identifier < number_literal) )) (compound_statement "{\n          return (byte)(bVar2 - 1) < 2;\n        }" { (return_statement "return (byte)(bVar2 - 1) < 2;" return (binary_expression "(byte)(bVar2 - 1) < 2" (call_expression "(byte)(bVar2 - 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(bVar2 - 1)" ( (binary_expression "bVar2 - 1" identifier - number_literal) ))) < number_literal) ;) })) }) (else_clause "else if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }" else (if_statement "if (clen < 0xb) {\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }\n      else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }" if (parenthesized_expression "(clen < 0xb)" ( (binary_expression "clen < 0xb" identifier < number_literal) )) (compound_statement "{\n        if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }\n      }" { (if_statement "if (clen == 6) {\n          return 4 < (byte)(bVar2 - 1);\n        }" if (parenthesized_expression "(clen == 6)" ( (binary_expression "clen == 6" identifier == number_literal) )) (compound_statement "{\n          return 4 < (byte)(bVar2 - 1);\n        }" { (return_statement "return 4 < (byte)(bVar2 - 1);" return (binary_expression "4 < (byte)(bVar2 - 1)" number_literal < (call_expression "(byte)(bVar2 - 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(bVar2 - 1)" ( (binary_expression "bVar2 - 1" identifier - number_literal) )))) ;) })) }) (else_clause "else {\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }" else (compound_statement "{\n        if (clen == 0xc) {\n          return 4 < bVar2;\n        }\n        if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }\n      }" { (if_statement "if (clen == 0xc) {\n          return 4 < bVar2;\n        }" if (parenthesized_expression "(clen == 0xc)" ( (binary_expression "clen == 0xc" identifier == number_literal) )) (compound_statement "{\n          return 4 < bVar2;\n        }" { (return_statement "return 4 < bVar2;" return (binary_expression "4 < bVar2" number_literal < identifier) ;) })) (if_statement "if ((clen == 0x10) && (_Var3 = true, bVar2 < 6)) {\n          _Var3 = bVar2 == 4;\n        }" if (parenthesized_expression "((clen == 0x10) && (_Var3 = true, bVar2 < 6))" ( (binary_expression "(clen == 0x10) && (_Var3 = true, bVar2 < 6)" (parenthesized_expression "(clen == 0x10)" ( (binary_expression "clen == 0x10" identifier == number_literal) )) && (parenthesized_expression "(_Var3 = true, bVar2 < 6)" ( (comma_expression "_Var3 = true, bVar2 < 6" (assignment_expression "_Var3 = true" identifier = true) , (binary_expression "bVar2 < 6" identifier < number_literal)) ))) )) (compound_statement "{\n          _Var3 = bVar2 == 4;\n        }" { (expression_statement "_Var3 = bVar2 == 4;" (assignment_expression "_Var3 = bVar2 == 4" identifier = (binary_expression "bVar2 == 4" identifier == number_literal)) ;) })) }))))) })))) })) (return_statement "return _Var3;" return identifier ;) })))
(translation_unit "uint sg_is_scsi_cdb(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}\n\n" (function_definition "uint sg_is_scsi_cdb(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}" type_identifier (function_declarator "sg_is_scsi_cdb(byte *param_1,uint param_2)" identifier (parameter_list "(byte *param_1,uint param_2)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }" if (parenthesized_expression "(5 < (int)param_2)" ( (binary_expression "5 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }" { (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar3 = bVar1 >> 5;" (assignment_expression "bVar3 = bVar1 >> 5" identifier = (binary_expression "bVar1 >> 5" identifier >> number_literal)) ;) (if_statement "if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" if (parenthesized_expression "(bVar3 == 3)" ( (binary_expression "bVar3 == 3" identifier == number_literal) )) (compound_statement "{\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }" { (if_statement "if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }" if (parenthesized_expression "((0xb < (int)param_2) && ((param_2 & 3) == 0))" ( (binary_expression "(0xb < (int)param_2) && ((param_2 & 3) == 0)" (parenthesized_expression "(0xb < (int)param_2)" ( (binary_expression "0xb < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((param_2 & 3) == 0)" ( (binary_expression "(param_2 & 3) == 0" (parenthesized_expression "(param_2 & 3)" ( (binary_expression "param_2 & 3" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }" { (if_statement "if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }" if (parenthesized_expression "(bVar1 == 0x7e)" ( (binary_expression "bVar1 == 0x7e" identifier == number_literal) )) (compound_statement "{\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }" { (expression_statement "uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;" (assignment_expression "uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4" identifier = (binary_expression "(ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4" (call_expression "(ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8)" ( (binary_expression "*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8" (binary_expression "*(ushort *)(param_1 + 2) << 8" (pointer_expression "*(ushort *)(param_1 + 2)" * (cast_expression "(ushort *)(param_1 + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) << number_literal) | (binary_expression "*(ushort *)(param_1 + 2) >> 8" (pointer_expression "*(ushort *)(param_1 + 2)" * (cast_expression "(ushort *)(param_1 + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) >> number_literal)) ))) + number_literal)) ;) (return_statement "return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);" return (call_expression "CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2)" identifier (argument_list "((int3)(uVar2 >> 8),uVar2 == param_2)" ( (call_expression "(int3)(uVar2 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar2 >> 8)" ( (binary_expression "uVar2 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar2 == param_2" identifier == identifier) ))) ;) })) (if_statement "if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }" if (parenthesized_expression "(bVar1 == 0x7f)" ( (binary_expression "bVar1 == 0x7f" identifier == number_literal) )) (compound_statement "{\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }" { (return_statement "return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);" return (binary_expression "CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" (call_expression "CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2)" identifier (argument_list "((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2)" ( (call_expression "(int3)(param_1[7] + 8 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(param_1[7] + 8 >> 8)" ( (binary_expression "param_1[7] + 8 >> 8" (binary_expression "param_1[7] + 8" (subscript_expression "param_1[7]" identifier [ number_literal ]) + number_literal) >> number_literal) ))) , (binary_expression "param_1[7] + 8 == param_2" (binary_expression "param_1[7] + 8" (subscript_expression "param_1[7]" identifier [ number_literal ]) + number_literal) == identifier) ))) & (call_expression "CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" identifier (argument_list "((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" ( (call_expression "(int3)(param_2 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(param_2 >> 8)" ( (binary_expression "param_2 >> 8" identifier >> number_literal) ))) , (binary_expression "*(short *)(param_1 + 8) != 0" (pointer_expression "*(short *)(param_1 + 8)" * (cast_expression "(short *)(param_1 + 8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) != number_literal) )))) ;) })) })) }) (else_clause "else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" else (if_statement "if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" if (parenthesized_expression "((int)param_2 < 0x11)" ( (binary_expression "(int)param_2 < 0x11" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" { (if_statement "if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" if (parenthesized_expression "(param_2 == 10)" ( (binary_expression "param_2 == 10" identifier == number_literal) )) (compound_statement "{\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }" { (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }" if (parenthesized_expression "(bVar3 < 6)" ( (binary_expression "bVar3 < 6" identifier < number_literal) )) (compound_statement "{\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }" { (return_statement "return (uint)((byte)(bVar3 - 1) < 2);" return (call_expression "(uint)((byte)(bVar3 - 1) < 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((byte)(bVar3 - 1) < 2)" ( (binary_expression "(byte)(bVar3 - 1) < 2" (call_expression "(byte)(bVar3 - 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(bVar3 - 1)" ( (binary_expression "bVar3 - 1" identifier - number_literal) ))) < number_literal) ))) ;) })) }) (else_clause "else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" else (if_statement "if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" if (parenthesized_expression "((int)param_2 < 0xb)" ( (binary_expression "(int)param_2 < 0xb" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }" { (if_statement "if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }" if (parenthesized_expression "(param_2 == 6)" ( (binary_expression "param_2 == 6" identifier == number_literal) )) (compound_statement "{\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }" { (return_statement "return (uint)(4 < (byte)(bVar3 - 1));" return (call_expression "(uint)(4 < (byte)(bVar3 - 1))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(4 < (byte)(bVar3 - 1))" ( (binary_expression "4 < (byte)(bVar3 - 1)" number_literal < (call_expression "(byte)(bVar3 - 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(bVar3 - 1)" ( (binary_expression "bVar3 - 1" identifier - number_literal) )))) ))) ;) })) }) (else_clause "else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" else (compound_statement "{\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" { (if_statement "if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }" if (parenthesized_expression "(param_2 == 0xc)" ( (binary_expression "param_2 == 0xc" identifier == number_literal) )) (compound_statement "{\n          return (uint)(4 < bVar3);\n        }" { (return_statement "return (uint)(4 < bVar3);" return (call_expression "(uint)(4 < bVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(4 < bVar3)" ( (binary_expression "4 < bVar3" number_literal < identifier) ))) ;) })) (if_statement "if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }" if (parenthesized_expression "((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6))" ( (binary_expression "(param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)" (parenthesized_expression "(param_2 == 0x10)" ( (binary_expression "param_2 == 0x10" identifier == number_literal) )) && (parenthesized_expression "(uVar2 = 1, bVar3 < 6)" ( (comma_expression "uVar2 = 1, bVar3 < 6" (assignment_expression "uVar2 = 1" identifier = number_literal) , (binary_expression "bVar3 < 6" identifier < number_literal)) ))) )) (compound_statement "{\n          uVar2 = (uint)(bVar3 == 4);\n        }" { (expression_statement "uVar2 = (uint)(bVar3 == 4);" (assignment_expression "uVar2 = (uint)(bVar3 == 4)" identifier = (call_expression "(uint)(bVar3 == 4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar3 == 4)" ( (binary_expression "bVar3 == 4" identifier == number_literal) )))) ;) })) }))))) })))) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT) | (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT)) ))) + LIT)) ;) (return_statement return (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression IDENT == IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (binary_expression (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) >> LIT) ))) , (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) == IDENT) ))) & (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )))) ;) })) })) }) (else_clause else (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 = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) < LIT) ))) ;) })) }) (else_clause else (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 { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) )))) ))) ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression IDENT < LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) )))) ;) })) }))))) })))) })) (return_statement return IDENT ;) })))
(function_definition "uint sg_is_scsi_cdb(byte *param_1,uint param_2)\n\n{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}" (type_identifier "uint") (function_declarator "sg_is_scsi_cdb(byte *param_1,uint param_2)" (identifier "sg_is_scsi_cdb") (parameter_list "(byte *param_1,uint param_2)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  byte bVar3;\n  \n  uVar2 = 0;\n  if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }\n  return uVar2;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (if_statement "if (5 < (int)param_2) {\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }" (if "if") (parenthesized_expression "(5 < (int)param_2)" (( "(") (binary_expression "5 < (int)param_2" (number_literal "5") (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")")) (compound_statement "{\n    bVar1 = *param_1;\n    bVar3 = bVar1 >> 5;\n    if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }\n  }" ({ "{") (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "bVar3 = bVar1 >> 5;" (assignment_expression "bVar3 = bVar1 >> 5" (identifier "bVar3") (= "=") (binary_expression "bVar1 >> 5" (identifier "bVar1") (>> ">>") (number_literal "5"))) (; ";")) (if_statement "if (bVar3 == 3) {\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }\n    else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" (if "if") (parenthesized_expression "(bVar3 == 3)" (( "(") (binary_expression "bVar3 == 3" (identifier "bVar3") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }\n    }" ({ "{") (if_statement "if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }" (if "if") (parenthesized_expression "((0xb < (int)param_2) && ((param_2 & 3) == 0))" (( "(") (binary_expression "(0xb < (int)param_2) && ((param_2 & 3) == 0)" (parenthesized_expression "(0xb < (int)param_2)" (( "(") (binary_expression "0xb < (int)param_2" (number_literal "0xb") (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")")) (&& "&&") (parenthesized_expression "((param_2 & 3) == 0)" (( "(") (binary_expression "(param_2 & 3) == 0" (parenthesized_expression "(param_2 & 3)" (( "(") (binary_expression "param_2 & 3" (identifier "param_2") (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }\n        if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }\n      }" ({ "{") (if_statement "if (bVar1 == 0x7e) {\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }" (if "if") (parenthesized_expression "(bVar1 == 0x7e)" (( "(") (binary_expression "bVar1 == 0x7e" (identifier "bVar1") (== "==") (number_literal "0x7e")) () ")")) (compound_statement "{\n          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;\n          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);\n        }" ({ "{") (expression_statement "uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;" (assignment_expression "uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4" (identifier "uVar2") (= "=") (binary_expression "(ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4" (call_expression "(ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8)" (( "(") (binary_expression "*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8" (binary_expression "*(ushort *)(param_1 + 2) << 8" (pointer_expression "*(ushort *)(param_1 + 2)" (* "*") (cast_expression "(ushort *)(param_1 + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) (<< "<<") (number_literal "8")) (| "|") (binary_expression "*(ushort *)(param_1 + 2) >> 8" (pointer_expression "*(ushort *)(param_1 + 2)" (* "*") (cast_expression "(ushort *)(param_1 + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) (>> ">>") (number_literal "8"))) () ")"))) (+ "+") (number_literal "4"))) (; ";")) (return_statement "return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);" (return "return") (call_expression "CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2)" (identifier "CONCAT31") (argument_list "((int3)(uVar2 >> 8),uVar2 == param_2)" (( "(") (call_expression "(int3)(uVar2 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(uVar2 >> 8)" (( "(") (binary_expression "uVar2 >> 8" (identifier "uVar2") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar2 == param_2" (identifier "uVar2") (== "==") (identifier "param_2")) () ")"))) (; ";")) (} "}"))) (if_statement "if (bVar1 == 0x7f) {\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }" (if "if") (parenthesized_expression "(bVar1 == 0x7f)" (( "(") (binary_expression "bVar1 == 0x7f" (identifier "bVar1") (== "==") (number_literal "0x7f")) () ")")) (compound_statement "{\n          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);\n        }" ({ "{") (return_statement "return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);" (return "return") (binary_expression "CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &\n                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" (call_expression "CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2)" (identifier "CONCAT31") (argument_list "((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2)" (( "(") (call_expression "(int3)(param_1[7] + 8 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(param_1[7] + 8 >> 8)" (( "(") (binary_expression "param_1[7] + 8 >> 8" (binary_expression "param_1[7] + 8" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (+ "+") (number_literal "8")) (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "param_1[7] + 8 == param_2" (binary_expression "param_1[7] + 8" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (+ "+") (number_literal "8")) (== "==") (identifier "param_2")) () ")"))) (& "&") (call_expression "CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" (identifier "CONCAT31") (argument_list "((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0)" (( "(") (call_expression "(int3)(param_2 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(param_2 >> 8)" (( "(") (binary_expression "param_2 >> 8" (identifier "param_2") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "*(short *)(param_1 + 8) != 0" (pointer_expression "*(short *)(param_1 + 8)" (* "*") (cast_expression "(short *)(param_1 + 8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")))) (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" (else "else") (if_statement "if ((int)param_2 < 0x11) {\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" (if "if") (parenthesized_expression "((int)param_2 < 0x11)" (( "(") (binary_expression "(int)param_2 < 0x11" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "0x11")) () ")")) (compound_statement "{\n      if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }\n    }" ({ "{") (if_statement "if (param_2 == 10) {\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }\n      else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" (if "if") (parenthesized_expression "(param_2 == 10)" (( "(") (binary_expression "param_2 == 10" (identifier "param_2") (== "==") (number_literal "10")) () ")")) (compound_statement "{\n        uVar2 = 1;\n        if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }\n      }" ({ "{") (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" (identifier "uVar2") (= "=") (number_literal "1")) (; ";")) (if_statement "if (bVar3 < 6) {\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }" (if "if") (parenthesized_expression "(bVar3 < 6)" (( "(") (binary_expression "bVar3 < 6" (identifier "bVar3") (< "<") (number_literal "6")) () ")")) (compound_statement "{\n          return (uint)((byte)(bVar3 - 1) < 2);\n        }" ({ "{") (return_statement "return (uint)((byte)(bVar3 - 1) < 2);" (return "return") (call_expression "(uint)((byte)(bVar3 - 1) < 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((byte)(bVar3 - 1) < 2)" (( "(") (binary_expression "(byte)(bVar3 - 1) < 2" (call_expression "(byte)(bVar3 - 1)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(bVar3 - 1)" (( "(") (binary_expression "bVar3 - 1" (identifier "bVar3") (- "-") (number_literal "1")) () ")"))) (< "<") (number_literal "2")) () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" (else "else") (if_statement "if ((int)param_2 < 0xb) {\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }\n      else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" (if "if") (parenthesized_expression "((int)param_2 < 0xb)" (( "(") (binary_expression "(int)param_2 < 0xb" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "0xb")) () ")")) (compound_statement "{\n        if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }\n      }" ({ "{") (if_statement "if (param_2 == 6) {\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }" (if "if") (parenthesized_expression "(param_2 == 6)" (( "(") (binary_expression "param_2 == 6" (identifier "param_2") (== "==") (number_literal "6")) () ")")) (compound_statement "{\n          return (uint)(4 < (byte)(bVar3 - 1));\n        }" ({ "{") (return_statement "return (uint)(4 < (byte)(bVar3 - 1));" (return "return") (call_expression "(uint)(4 < (byte)(bVar3 - 1))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(4 < (byte)(bVar3 - 1))" (( "(") (binary_expression "4 < (byte)(bVar3 - 1)" (number_literal "4") (< "<") (call_expression "(byte)(bVar3 - 1)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(bVar3 - 1)" (( "(") (binary_expression "bVar3 - 1" (identifier "bVar3") (- "-") (number_literal "1")) () ")")))) () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" (else "else") (compound_statement "{\n        if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }\n        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }\n      }" ({ "{") (if_statement "if (param_2 == 0xc) {\n          return (uint)(4 < bVar3);\n        }" (if "if") (parenthesized_expression "(param_2 == 0xc)" (( "(") (binary_expression "param_2 == 0xc" (identifier "param_2") (== "==") (number_literal "0xc")) () ")")) (compound_statement "{\n          return (uint)(4 < bVar3);\n        }" ({ "{") (return_statement "return (uint)(4 < bVar3);" (return "return") (call_expression "(uint)(4 < bVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(4 < bVar3)" (( "(") (binary_expression "4 < bVar3" (number_literal "4") (< "<") (identifier "bVar3")) () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {\n          uVar2 = (uint)(bVar3 == 4);\n        }" (if "if") (parenthesized_expression "((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6))" (( "(") (binary_expression "(param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)" (parenthesized_expression "(param_2 == 0x10)" (( "(") (binary_expression "param_2 == 0x10" (identifier "param_2") (== "==") (number_literal "0x10")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 = 1, bVar3 < 6)" (( "(") (comma_expression "uVar2 = 1, bVar3 < 6" (assignment_expression "uVar2 = 1" (identifier "uVar2") (= "=") (number_literal "1")) (, ",") (binary_expression "bVar3 < 6" (identifier "bVar3") (< "<") (number_literal "6"))) () ")"))) () ")")) (compound_statement "{\n          uVar2 = (uint)(bVar3 == 4);\n        }" ({ "{") (expression_statement "uVar2 = (uint)(bVar3 == 4);" (assignment_expression "uVar2 = (uint)(bVar3 == 4)" (identifier "uVar2") (= "=") (call_expression "(uint)(bVar3 == 4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(bVar3 == 4)" (( "(") (binary_expression "bVar3 == 4" (identifier "bVar3") (== "==") (number_literal "4")) () ")")))) (; ";")) (} "}"))) (} "}")))))) (} "}"))))) (} "}"))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

/* WARNING: Switch with 1 destination removed at 0x000177b0 */

type_1 function_1(uint8_t *var_4,int var_1)

{
  type_2 var_2;
  type_2 var_3;
  type_1 _Var3;
  
  _Var3 = false;
  if (5 < var_1) {
    var_2 = *var_4;
    var_3 = var_2 >> 5;
    if (var_3 == 3) {
      if ((0xb < var_1) && ((var_1 & 3U) == 0)) {
        if (var_2 == 0x7e) {
          return (type_3)(*(type_3 *)(var_4 + 2) << 8 | *(type_3 *)(var_4 + 2) >> 8) + 4 == var_1;
        }
        if (var_2 == 0x7f) {
          return var_4[7] + 8 == var_1 && *(short *)(var_4 + 8) != 0;
        }
      }
    }
    else if (var_1 < 0x11) {
      if (var_1 == 10) {
        _Var3 = true;
        if (var_3 < 6) {
          return (type_2)(var_3 - 1) < 2;
        }
      }
      else if (var_1 < 0xb) {
        if (var_1 == 6) {
          return 4 < (type_2)(var_3 - 1);
        }
      }
      else {
        if (var_1 == 0xc) {
          return 4 < var_3;
        }
        if ((var_1 == 0x10) && (_Var3 = true, var_3 < 6)) {
          _Var3 = var_3 == 4;
        }
      }
    }
  }
  return _Var3;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (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 (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) 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: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (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))))) right: (number_literal)) right: (binary_expression left: (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))))) right: (number_literal))))) right: (number_literal)))) (return_statement (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) (binary_expression left: (identifier) right: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (number_literal)))) (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (identifier)))) right: (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))))))) alternative: (else_clause (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: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))))) alternative: (else_clause (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 (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (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: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))))))))))))))) (return_statement (identifier)))))

/* WARNING: Switch with 1 destination removed at 0x000177b0 */

uint MASKED(byte *param_1,uint param_2)

{
  byte bVar1;
  uint uVar2;
  byte bVar3;
  
  uVar2 = 0;
  if (5 < (int)param_2) {
    bVar1 = *param_1;
    bVar3 = bVar1 >> 5;
    if (bVar3 == 3) {
      if ((0xb < (int)param_2) && ((param_2 & 3) == 0)) {
        if (bVar1 == 0x7e) {
          uVar2 = (ushort)(*(ushort *)(param_1 + 2) << 8 | *(ushort *)(param_1 + 2) >> 8) + 4;
          return CONCAT31((int3)(uVar2 >> 8),uVar2 == param_2);
        }
        if (bVar1 == 0x7f) {
          return CONCAT31((int3)(param_1[7] + 8 >> 8),param_1[7] + 8 == param_2) &
                 CONCAT31((int3)(param_2 >> 8),*(short *)(param_1 + 8) != 0);
        }
      }
    }
    else if ((int)param_2 < 0x11) {
      if (param_2 == 10) {
        uVar2 = 1;
        if (bVar3 < 6) {
          return (uint)((byte)(bVar3 - 1) < 2);
        }
      }
      else if ((int)param_2 < 0xb) {
        if (param_2 == 6) {
          return (uint)(4 < (byte)(bVar3 - 1));
        }
      }
      else {
        if (param_2 == 0xc) {
          return (uint)(4 < bVar3);
        }
        if ((param_2 == 0x10) && (uVar2 = 1, bVar3 < 6)) {
          uVar2 = (uint)(bVar3 == 4);
        }
      }
    }
  }
  return uVar2;
}

