
_Bool __regparm3 check_node_accept(re_match_context_t *mctx,re_token_t *node,Idx idx)

{
  byte bVar1;
  byte bVar2;
  uint uVar3;
  uint uVar4;
  _Bool _Var5;
  uint uVar6;
  
  bVar1 = node->field_0x4;
  bVar2 = (mctx->input).mbs[idx];
  if (bVar1 == 3) {
    if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {
      return false;
    }
  }
  else if (bVar1 < 4) {
    if (bVar1 != 1) {
      return false;
    }
    if ((node->opr).c != bVar2) {
      return false;
    }
  }
  else {
    if (bVar1 != 5) {
      if (bVar1 != 7) {
        return false;
      }
      if ((char)bVar2 < '\0') {
        return false;
      }
    }
    if (bVar2 == 10) {
      if ((mctx->dfa->syntax & 0x40) == 0) {
        return false;
      }
    }
    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {
      return false;
    }
  }
  uVar3 = *(uint *)&node->field_0x4;
  _Var5 = true;
  if ((uVar3 & 0x3ff00) != 0) {
    uVar6 = uVar3 >> 8;
    uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);
    if ((uVar6 & 4) == 0) {
      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {
        return false;
      }
    }
    else {
      if ((uVar4 & 1) == 0) {
        return false;
      }
      if ((uVar6 & 8) != 0) {
        return false;
      }
    }
    if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {
      _Var5 = true;
      if ((uVar3 & 0x8000) != 0) {
        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);
      }
    }
  }
  return _Var5;
}



uint __regparm3 FUN_000181d0(int param_1,byte *param_2,int param_3)

{
  byte bVar1;
  byte bVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  
  bVar1 = param_2[4];
  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);
  if (bVar1 == 3) {
    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {
      return 0;
    }
  }
  else if (bVar1 < 4) {
    if (bVar1 != 1) {
      return 0;
    }
    if (*param_2 != bVar2) {
      return 0;
    }
  }
  else {
    if (bVar1 != 5) {
      if (bVar1 != 7) {
        return 0;
      }
      if ((char)bVar2 < '\0') {
        return 0;
      }
    }
    if (bVar2 == 10) {
      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {
        return 0;
      }
    }
    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {
      return 0;
    }
  }
  uVar3 = *(uint *)(param_2 + 4);
  uVar5 = 1;
  if ((uVar3 & 0x3ff00) != 0) {
    uVar5 = uVar3 >> 8;
    uVar4 = FUN_00018110();
    if ((uVar5 & 4) == 0) {
      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {
        return 0;
      }
    }
    else {
      if ((uVar4 & 1) == 0) {
        return 0;
      }
      if ((uVar5 & 8) != 0) {
        return 0;
      }
    }
    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {
      uVar5 = 1;
      if ((uVar3 & 0x8000) != 0) {
        uVar5 = uVar4 >> 3 & 1;
      }
    }
  }
  return uVar5;
}


PUSH EDI
MOV EDI,ECX
PUSH ESI
PUSH EBX
MOV ECX,dword ptr [EAX + 0x4]
MOVZX EBX,byte ptr [EDX + 0x4]
MOVZX ECX,byte ptr [ECX + EDI*0x1]
CMP BL,0x3
JZ 0x00018298
JBE 0x00018280
CMP BL,0x5
JZ 0x00018202
CMP BL,0x7
MOV EBX,0x0
JNZ 0x00018275
TEST CL,CL
JS 0x00018275
CMP CL,0xa
JZ 0x000182c8
TEST CL,CL
JNZ 0x0001821d
MOV ECX,dword ptr [EAX + 0x54]
XOR EBX,EBX
TEST byte ptr [ECX + 0x80],0x80
JNZ 0x00018275
MOV ESI,dword ptr [EDX + 0x4]
MOV EBX,0x1
TEST ESI,0x3ff00
JZ 0x00018275
MOV ECX,dword ptr [EAX + 0x58]
MOV EDX,EDI
SHR ESI,0x8
CALL 0x00018110
MOV EDX,ESI
AND DX,0x3ff
TEST ESI,0x4
JNZ 0x000182b8
AND ESI,0x8
JZ 0x00018256
TEST AL,0x1
JNZ 0x000182dc
TEST DL,0x20
JZ 0x00018261
XOR EBX,EBX
TEST AL,0x2
JZ 0x00018275
SHR EAX,0x3
MOV EBX,0x1
AND EAX,0x1
AND EDX,0x80
CMOVNZ EBX,EAX
MOV EAX,EBX
POP EBX
POP ESI
POP EDI
RET
CMP BL,0x1
MOV EBX,0x0
JNZ 0x00018275
CMP byte ptr [EDX],CL
JZ 0x0001821d
MOV EAX,EBX
POP EBX
POP ESI
POP EDI
RET
MOVZX EBX,CL
MOV ESI,dword ptr [EDX]
SAR EBX,0x5
MOV EBX,dword ptr [ESI + EBX*0x4]
SHR EBX,CL
MOV ECX,EBX
XOR EBX,EBX
AND ECX,0x1
JNZ 0x0001821d
JMP 0x00018275
XOR EBX,EBX
TEST AL,0x1
JZ 0x00018275
AND ESI,0x8
JZ 0x00018256
JMP 0x00018275
MOV ECX,dword ptr [EAX + 0x54]
XOR EBX,EBX
TEST byte ptr [ECX + 0x80],0x40
JNZ 0x0001821d
JMP 0x00018275
XOR EBX,EBX
JMP 0x00018275
(translation_unit "uint __regparm3 FUN_000181d0(int param_1,byte *param_2,int param_3)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}\n\n" (function_definition "uint __regparm3 FUN_000181d0(int param_1,byte *param_2,int param_3)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_000181d0(int param_1,byte *param_2,int param_3)" identifier (parameter_list "(int param_1,byte *param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (expression_statement "bVar1 = param_2[4];" (assignment_expression "bVar1 = param_2[4]" identifier = (subscript_expression "param_2[4]" identifier [ number_literal ])) ;) (expression_statement "bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);" (assignment_expression "bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3)" identifier = (pointer_expression "*(byte *)(*(int *)(param_1 + 4) + param_3)" * (cast_expression "(byte *)(*(int *)(param_1 + 4) + param_3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 4) + param_3)" ( (binary_expression "*(int *)(param_1 + 4) + param_3" (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) + identifier) ))))) ;) (if_statement "if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" if (parenthesized_expression "(bVar1 == 3)" ( (binary_expression "bVar1 == 3" identifier == number_literal) )) (compound_statement "{\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }" { (if_statement "if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" ( (binary_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" * (cast_expression "(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" ( (binary_expression "*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4" (pointer_expression "*(int *)param_2" * (cast_expression "(int *)param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + (binary_expression "((int)(uint)bVar2 >> 5) * 4" (parenthesized_expression "((int)(uint)bVar2 >> 5)" ( (binary_expression "(int)(uint)bVar2 >> 5" (cast_expression "(int)(uint)bVar2" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) >> number_literal) )) * number_literal)) )))) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" else (if_statement "if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" if (parenthesized_expression "(bVar1 < 4)" ( (binary_expression "bVar1 < 4" identifier < number_literal) )) (compound_statement "{\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }" { (if_statement "if (bVar1 != 1) {\n      return 0;\n    }" if (parenthesized_expression "(bVar1 != 1)" ( (binary_expression "bVar1 != 1" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*param_2 != bVar2) {\n      return 0;\n    }" if (parenthesized_expression "(*param_2 != bVar2)" ( (binary_expression "*param_2 != bVar2" (pointer_expression "*param_2" * identifier) != identifier) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" else (compound_statement "{\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" { (if_statement "if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }" if (parenthesized_expression "(bVar1 != 5)" ( (binary_expression "bVar1 != 5" identifier != number_literal) )) (compound_statement "{\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }" { (if_statement "if (bVar1 != 7) {\n        return 0;\n      }" if (parenthesized_expression "(bVar1 != 7)" ( (binary_expression "bVar1 != 7" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((char)bVar2 < '\0') {\n        return 0;\n      }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) })) (if_statement "if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" if (parenthesized_expression "(bVar2 == 10)" ( (binary_expression "bVar2 == 10" identifier == number_literal) )) (compound_statement "{\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }" { (if_statement "if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0)" ( (binary_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0" (parenthesized_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40)" ( (binary_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40" (pointer_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80)" * (cast_expression "(byte *)(*(int *)(param_1 + 0x54) + 0x80)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x54) + 0x80)" ( (binary_expression "*(int *)(param_1 + 0x54) + 0x80" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" else (if_statement "if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" if (parenthesized_expression "((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0))" ( (binary_expression "(bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)" (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) && (parenthesized_expression "((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)" ( (binary_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0" (parenthesized_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80)" ( (binary_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80" (pointer_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80)" * (cast_expression "(byte *)(*(int *)(param_1 + 0x54) + 0x80)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x54) + 0x80)" ( (binary_expression "*(int *)(param_1 + 0x54) + 0x80" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })))) }))))) (expression_statement "uVar3 = *(uint *)(param_2 + 4);" (assignment_expression "uVar3 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (if_statement "if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }" if (parenthesized_expression "((uVar3 & 0x3ff00) != 0)" ( (binary_expression "(uVar3 & 0x3ff00) != 0" (parenthesized_expression "(uVar3 & 0x3ff00)" ( (binary_expression "uVar3 & 0x3ff00" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }" { (expression_statement "uVar5 = uVar3 >> 8;" (assignment_expression "uVar5 = uVar3 >> 8" identifier = (binary_expression "uVar3 >> 8" identifier >> number_literal)) ;) (expression_statement "uVar4 = FUN_00018110();" (assignment_expression "uVar4 = FUN_00018110()" identifier = (call_expression "FUN_00018110()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" if (parenthesized_expression "((uVar5 & 4) == 0)" ( (binary_expression "(uVar5 & 4) == 0" (parenthesized_expression "(uVar5 & 4)" ( (binary_expression "uVar5 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }" { (if_statement "if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }" if (parenthesized_expression "(((uVar5 & 8) != 0) && ((uVar4 & 1) != 0))" ( (binary_expression "((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)" (parenthesized_expression "((uVar5 & 8) != 0)" ( (binary_expression "(uVar5 & 8) != 0" (parenthesized_expression "(uVar5 & 8)" ( (binary_expression "uVar5 & 8" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" else (compound_statement "{\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" { (if_statement "if ((uVar4 & 1) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((uVar5 & 8) != 0) {\n        return 0;\n      }" if (parenthesized_expression "((uVar5 & 8) != 0)" ( (binary_expression "(uVar5 & 8) != 0" (parenthesized_expression "(uVar5 & 8)" ( (binary_expression "uVar5 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }))) (if_statement "if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }" if (parenthesized_expression "(((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0))" ( (binary_expression "((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)" (parenthesized_expression "((uVar3 & 0x2000) == 0)" ( (binary_expression "(uVar3 & 0x2000) == 0" (parenthesized_expression "(uVar3 & 0x2000)" ( (binary_expression "uVar3 & 0x2000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar5 = 0, (uVar4 & 2) != 0)" ( (comma_expression "uVar5 = 0, (uVar4 & 2) != 0" (assignment_expression "uVar5 = 0" identifier = number_literal) , (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" ( (binary_expression "uVar4 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (if_statement "if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }" if (parenthesized_expression "((uVar3 & 0x8000) != 0)" ( (binary_expression "(uVar3 & 0x8000) != 0" (parenthesized_expression "(uVar3 & 0x8000)" ( (binary_expression "uVar3 & 0x8000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar5 = uVar4 >> 3 & 1;\n      }" { (expression_statement "uVar5 = uVar4 >> 3 & 1;" (assignment_expression "uVar5 = uVar4 >> 3 & 1" identifier = (binary_expression "uVar4 >> 3 & 1" (binary_expression "uVar4 >> 3" identifier >> number_literal) & number_literal)) ;) })) })) })) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit "_Bool __regparm3 check_node_accept(re_match_context_t *mctx,re_token_t *node,Idx idx)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  _Bool _Var5;\n  uint uVar6;\n  \n  bVar1 = node->field_0x4;\n  bVar2 = (mctx->input).mbs[idx];\n  if (bVar1 == 3) {\n    if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {\n      return false;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }\n  uVar3 = *(uint *)&node->field_0x4;\n  _Var5 = true;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar6 = uVar3 >> 8;\n    uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);\n    if ((uVar6 & 4) == 0) {\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }\n  }\n  return _Var5;\n}\n\n" (function_definition "_Bool __regparm3 check_node_accept(re_match_context_t *mctx,re_token_t *node,Idx idx)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  _Bool _Var5;\n  uint uVar6;\n  \n  bVar1 = node->field_0x4;\n  bVar2 = (mctx->input).mbs[idx];\n  if (bVar1 == 3) {\n    if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {\n      return false;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }\n  uVar3 = *(uint *)&node->field_0x4;\n  _Var5 = true;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar6 = uVar3 >> 8;\n    uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);\n    if ((uVar6 & 4) == 0) {\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }\n  }\n  return _Var5;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "check_node_accept(re_match_context_t *mctx,re_token_t *node,Idx idx)" identifier (parameter_list "(re_match_context_t *mctx,re_token_t *node,Idx idx)" ( (parameter_declaration "re_match_context_t *mctx" type_identifier (pointer_declarator "*mctx" * identifier)) , (parameter_declaration "re_token_t *node" type_identifier (pointer_declarator "*node" * identifier)) , (parameter_declaration "Idx idx" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  _Bool _Var5;\n  uint uVar6;\n  \n  bVar1 = node->field_0x4;\n  bVar2 = (mctx->input).mbs[idx];\n  if (bVar1 == 3) {\n    if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {\n      return false;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }\n  uVar3 = *(uint *)&node->field_0x4;\n  _Var5 = true;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar6 = uVar3 >> 8;\n    uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);\n    if ((uVar6 & 4) == 0) {\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }\n  }\n  return _Var5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "_Bool _Var5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (expression_statement "bVar1 = node->field_0x4;" (assignment_expression "bVar1 = node->field_0x4" identifier = (field_expression "node->field_0x4" identifier -> field_identifier)) ;) (expression_statement "bVar2 = (mctx->input).mbs[idx];" (assignment_expression "bVar2 = (mctx->input).mbs[idx]" identifier = (subscript_expression "(mctx->input).mbs[idx]" (field_expression "(mctx->input).mbs" (parenthesized_expression "(mctx->input)" ( (field_expression "mctx->input" identifier -> field_identifier) )) . field_identifier) [ identifier ])) ;) (if_statement "if (bVar1 == 3) {\n    if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {\n      return false;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }" if (parenthesized_expression "(bVar1 == 3)" ( (binary_expression "bVar1 == 3" identifier == number_literal) )) (compound_statement "{\n    if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {\n      return false;\n    }\n  }" { (if_statement "if (((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0) {\n      return false;\n    }" if (parenthesized_expression "(((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0)" ( (binary_expression "((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "((node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1)" ( (binary_expression "(node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f) & 1" (binary_expression "(node->opr).sbcset[(int)(uint)bVar2 >> 5] >> (bVar2 & 0x1f)" (subscript_expression "(node->opr).sbcset[(int)(uint)bVar2 >> 5]" (field_expression "(node->opr).sbcset" (parenthesized_expression "(node->opr)" ( (field_expression "node->opr" identifier -> field_identifier) )) . field_identifier) [ (binary_expression "(int)(uint)bVar2 >> 5" (cast_expression "(int)(uint)bVar2" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) >> number_literal) ]) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) }) (else_clause "else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }" else (if_statement "if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }" if (parenthesized_expression "(bVar1 < 4)" ( (binary_expression "bVar1 < 4" identifier < number_literal) )) (compound_statement "{\n    if (bVar1 != 1) {\n      return false;\n    }\n    if ((node->opr).c != bVar2) {\n      return false;\n    }\n  }" { (if_statement "if (bVar1 != 1) {\n      return false;\n    }" if (parenthesized_expression "(bVar1 != 1)" ( (binary_expression "bVar1 != 1" identifier != number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if ((node->opr).c != bVar2) {\n      return false;\n    }" if (parenthesized_expression "((node->opr).c != bVar2)" ( (binary_expression "(node->opr).c != bVar2" (field_expression "(node->opr).c" (parenthesized_expression "(node->opr)" ( (field_expression "node->opr" identifier -> field_identifier) )) . field_identifier) != identifier) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) }) (else_clause "else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }" else (compound_statement "{\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }\n  }" { (if_statement "if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }" if (parenthesized_expression "(bVar1 != 5)" ( (binary_expression "bVar1 != 5" identifier != number_literal) )) (compound_statement "{\n      if (bVar1 != 7) {\n        return false;\n      }\n      if ((char)bVar2 < '\0') {\n        return false;\n      }\n    }" { (if_statement "if (bVar1 != 7) {\n        return false;\n      }" if (parenthesized_expression "(bVar1 != 7)" ( (binary_expression "bVar1 != 7" identifier != number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (if_statement "if ((char)bVar2 < '\0') {\n        return false;\n      }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) })) (if_statement "if (bVar2 == 10) {\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }\n    else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }" if (parenthesized_expression "(bVar2 == 10)" ( (binary_expression "bVar2 == 10" identifier == number_literal) )) (compound_statement "{\n      if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }\n    }" { (if_statement "if ((mctx->dfa->syntax & 0x40) == 0) {\n        return false;\n      }" if (parenthesized_expression "((mctx->dfa->syntax & 0x40) == 0)" ( (binary_expression "(mctx->dfa->syntax & 0x40) == 0" (parenthesized_expression "(mctx->dfa->syntax & 0x40)" ( (binary_expression "mctx->dfa->syntax & 0x40" (field_expression "mctx->dfa->syntax" (field_expression "mctx->dfa" identifier -> field_identifier) -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) }) (else_clause "else if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }" else (if_statement "if ((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {\n      return false;\n    }" if (parenthesized_expression "((bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0))" ( (binary_expression "(bVar2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)" (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) && (parenthesized_expression "((mctx->dfa->syntax & 0x80) != 0)" ( (binary_expression "(mctx->dfa->syntax & 0x80) != 0" (parenthesized_expression "(mctx->dfa->syntax & 0x80)" ( (binary_expression "mctx->dfa->syntax & 0x80" (field_expression "mctx->dfa->syntax" (field_expression "mctx->dfa" identifier -> field_identifier) -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })))) }))))) (expression_statement "uVar3 = *(uint *)&node->field_0x4;" (assignment_expression "uVar3 = *(uint *)&node->field_0x4" identifier = (pointer_expression "*(uint *)&node->field_0x4" * (cast_expression "(uint *)&node->field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&node->field_0x4" & (field_expression "node->field_0x4" identifier -> field_identifier))))) ;) (expression_statement "_Var5 = true;" (assignment_expression "_Var5 = true" identifier = true) ;) (if_statement "if ((uVar3 & 0x3ff00) != 0) {\n    uVar6 = uVar3 >> 8;\n    uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);\n    if ((uVar6 & 4) == 0) {\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }\n  }" if (parenthesized_expression "((uVar3 & 0x3ff00) != 0)" ( (binary_expression "(uVar3 & 0x3ff00) != 0" (parenthesized_expression "(uVar3 & 0x3ff00)" ( (binary_expression "uVar3 & 0x3ff00" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    uVar6 = uVar3 >> 8;\n    uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);\n    if ((uVar6 & 4) == 0) {\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }\n  }" { (expression_statement "uVar6 = uVar3 >> 8;" (assignment_expression "uVar6 = uVar3 >> 8" identifier = (binary_expression "uVar3 >> 8" identifier >> number_literal)) ;) (expression_statement "uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags);" (assignment_expression "uVar4 = re_string_context_at(&mctx->input,idx,mctx->eflags)" identifier = (call_expression "re_string_context_at(&mctx->input,idx,mctx->eflags)" identifier (argument_list "(&mctx->input,idx,mctx->eflags)" ( (pointer_expression "&mctx->input" & (field_expression "mctx->input" identifier -> field_identifier)) , identifier , (field_expression "mctx->eflags" identifier -> field_identifier) )))) ;) (if_statement "if ((uVar6 & 4) == 0) {\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }" if (parenthesized_expression "((uVar6 & 4) == 0)" ( (binary_expression "(uVar6 & 4) == 0" (parenthesized_expression "(uVar6 & 4)" ( (binary_expression "uVar6 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }\n    }" { (if_statement "if (((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return false;\n      }" if (parenthesized_expression "(((uVar6 & 8) != 0) && ((uVar4 & 1) != 0))" ( (binary_expression "((uVar6 & 8) != 0) && ((uVar4 & 1) != 0)" (parenthesized_expression "((uVar6 & 8) != 0)" ( (binary_expression "(uVar6 & 8) != 0" (parenthesized_expression "(uVar6 & 8)" ( (binary_expression "uVar6 & 8" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) }) (else_clause "else {\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }" else (compound_statement "{\n      if ((uVar4 & 1) == 0) {\n        return false;\n      }\n      if ((uVar6 & 8) != 0) {\n        return false;\n      }\n    }" { (if_statement "if ((uVar4 & 1) == 0) {\n        return false;\n      }" if (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (if_statement "if ((uVar6 & 8) != 0) {\n        return false;\n      }" if (parenthesized_expression "((uVar6 & 8) != 0)" ( (binary_expression "(uVar6 & 8) != 0" (parenthesized_expression "(uVar6 & 8)" ( (binary_expression "uVar6 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) }))) (if_statement "if (((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)) {\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }" if (parenthesized_expression "(((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0))" ( (binary_expression "((uVar3 & 0x2000) == 0) || (_Var5 = false, (uVar4 & 2) != 0)" (parenthesized_expression "((uVar3 & 0x2000) == 0)" ( (binary_expression "(uVar3 & 0x2000) == 0" (parenthesized_expression "(uVar3 & 0x2000)" ( (binary_expression "uVar3 & 0x2000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(_Var5 = false, (uVar4 & 2) != 0)" ( (comma_expression "_Var5 = false, (uVar4 & 2) != 0" (assignment_expression "_Var5 = false" identifier = false) , (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" ( (binary_expression "uVar4 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n      _Var5 = true;\n      if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }\n    }" { (expression_statement "_Var5 = true;" (assignment_expression "_Var5 = true" identifier = true) ;) (if_statement "if ((uVar3 & 0x8000) != 0) {\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }" if (parenthesized_expression "((uVar3 & 0x8000) != 0)" ( (binary_expression "(uVar3 & 0x8000) != 0" (parenthesized_expression "(uVar3 & 0x8000)" ( (binary_expression "uVar3 & 0x8000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        _Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);\n      }" { (expression_statement "_Var5 = (_Bool)((byte)(uVar4 >> 3) & 1);" (assignment_expression "_Var5 = (_Bool)((byte)(uVar4 >> 3) & 1)" identifier = (call_expression "(_Bool)((byte)(uVar4 >> 3) & 1)" (parenthesized_expression "(_Bool)" ( identifier )) (argument_list "((byte)(uVar4 >> 3) & 1)" ( (binary_expression "(byte)(uVar4 >> 3) & 1" (call_expression "(byte)(uVar4 >> 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar4 >> 3)" ( (binary_expression "uVar4 >> 3" identifier >> number_literal) ))) & number_literal) )))) ;) })) })) })) (return_statement "return _Var5;" return identifier ;) })))
(translation_unit "uint __regparm3 FUN_000181d0(int param_1,byte *param_2,int param_3)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}\n\n" (function_definition "uint __regparm3 FUN_000181d0(int param_1,byte *param_2,int param_3)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_000181d0(int param_1,byte *param_2,int param_3)" identifier (parameter_list "(int param_1,byte *param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (expression_statement "bVar1 = param_2[4];" (assignment_expression "bVar1 = param_2[4]" identifier = (subscript_expression "param_2[4]" identifier [ number_literal ])) ;) (expression_statement "bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);" (assignment_expression "bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3)" identifier = (pointer_expression "*(byte *)(*(int *)(param_1 + 4) + param_3)" * (cast_expression "(byte *)(*(int *)(param_1 + 4) + param_3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 4) + param_3)" ( (binary_expression "*(int *)(param_1 + 4) + param_3" (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) + identifier) ))))) ;) (if_statement "if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" if (parenthesized_expression "(bVar1 == 3)" ( (binary_expression "bVar1 == 3" identifier == number_literal) )) (compound_statement "{\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }" { (if_statement "if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" ( (binary_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" * (cast_expression "(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" ( (binary_expression "*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4" (pointer_expression "*(int *)param_2" * (cast_expression "(int *)param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + (binary_expression "((int)(uint)bVar2 >> 5) * 4" (parenthesized_expression "((int)(uint)bVar2 >> 5)" ( (binary_expression "(int)(uint)bVar2 >> 5" (cast_expression "(int)(uint)bVar2" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) >> number_literal) )) * number_literal)) )))) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" else (if_statement "if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" if (parenthesized_expression "(bVar1 < 4)" ( (binary_expression "bVar1 < 4" identifier < number_literal) )) (compound_statement "{\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }" { (if_statement "if (bVar1 != 1) {\n      return 0;\n    }" if (parenthesized_expression "(bVar1 != 1)" ( (binary_expression "bVar1 != 1" identifier != number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*param_2 != bVar2) {\n      return 0;\n    }" if (parenthesized_expression "(*param_2 != bVar2)" ( (binary_expression "*param_2 != bVar2" (pointer_expression "*param_2" * identifier) != identifier) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" else (compound_statement "{\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" { (if_statement "if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }" if (parenthesized_expression "(bVar1 != 5)" ( (binary_expression "bVar1 != 5" identifier != number_literal) )) (compound_statement "{\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }" { (if_statement "if (bVar1 != 7) {\n        return 0;\n      }" if (parenthesized_expression "(bVar1 != 7)" ( (binary_expression "bVar1 != 7" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((char)bVar2 < '\0') {\n        return 0;\n      }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) })) (if_statement "if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" if (parenthesized_expression "(bVar2 == 10)" ( (binary_expression "bVar2 == 10" identifier == number_literal) )) (compound_statement "{\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }" { (if_statement "if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0)" ( (binary_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0" (parenthesized_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40)" ( (binary_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40" (pointer_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80)" * (cast_expression "(byte *)(*(int *)(param_1 + 0x54) + 0x80)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x54) + 0x80)" ( (binary_expression "*(int *)(param_1 + 0x54) + 0x80" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" else (if_statement "if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" if (parenthesized_expression "((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0))" ( (binary_expression "(bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)" (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) && (parenthesized_expression "((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)" ( (binary_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0" (parenthesized_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80)" ( (binary_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80" (pointer_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80)" * (cast_expression "(byte *)(*(int *)(param_1 + 0x54) + 0x80)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x54) + 0x80)" ( (binary_expression "*(int *)(param_1 + 0x54) + 0x80" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })))) }))))) (expression_statement "uVar3 = *(uint *)(param_2 + 4);" (assignment_expression "uVar3 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (if_statement "if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }" if (parenthesized_expression "((uVar3 & 0x3ff00) != 0)" ( (binary_expression "(uVar3 & 0x3ff00) != 0" (parenthesized_expression "(uVar3 & 0x3ff00)" ( (binary_expression "uVar3 & 0x3ff00" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }" { (expression_statement "uVar5 = uVar3 >> 8;" (assignment_expression "uVar5 = uVar3 >> 8" identifier = (binary_expression "uVar3 >> 8" identifier >> number_literal)) ;) (expression_statement "uVar4 = FUN_00018110();" (assignment_expression "uVar4 = FUN_00018110()" identifier = (call_expression "FUN_00018110()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" if (parenthesized_expression "((uVar5 & 4) == 0)" ( (binary_expression "(uVar5 & 4) == 0" (parenthesized_expression "(uVar5 & 4)" ( (binary_expression "uVar5 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }" { (if_statement "if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }" if (parenthesized_expression "(((uVar5 & 8) != 0) && ((uVar4 & 1) != 0))" ( (binary_expression "((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)" (parenthesized_expression "((uVar5 & 8) != 0)" ( (binary_expression "(uVar5 & 8) != 0" (parenthesized_expression "(uVar5 & 8)" ( (binary_expression "uVar5 & 8" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" else (compound_statement "{\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" { (if_statement "if ((uVar4 & 1) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((uVar5 & 8) != 0) {\n        return 0;\n      }" if (parenthesized_expression "((uVar5 & 8) != 0)" ( (binary_expression "(uVar5 & 8) != 0" (parenthesized_expression "(uVar5 & 8)" ( (binary_expression "uVar5 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }))) (if_statement "if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }" if (parenthesized_expression "(((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0))" ( (binary_expression "((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)" (parenthesized_expression "((uVar3 & 0x2000) == 0)" ( (binary_expression "(uVar3 & 0x2000) == 0" (parenthesized_expression "(uVar3 & 0x2000)" ( (binary_expression "uVar3 & 0x2000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar5 = 0, (uVar4 & 2) != 0)" ( (comma_expression "uVar5 = 0, (uVar4 & 2) != 0" (assignment_expression "uVar5 = 0" identifier = number_literal) , (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" ( (binary_expression "uVar4 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (if_statement "if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }" if (parenthesized_expression "((uVar3 & 0x8000) != 0)" ( (binary_expression "(uVar3 & 0x8000) != 0" (parenthesized_expression "(uVar3 & 0x8000)" ( (binary_expression "uVar3 & 0x8000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar5 = uVar4 >> 3 & 1;\n      }" { (expression_statement "uVar5 = uVar4 >> 3 & 1;" (assignment_expression "uVar5 = uVar4 >> 3 & 1" identifier = (binary_expression "uVar4 >> 3 & 1" (binary_expression "uVar4 >> 3" identifier >> number_literal) & number_literal)) ;) })) })) })) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) + (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT) )) * LIT)) )))) >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != IDENT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (return_statement return LIT ;) })))) }))))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (return_statement return LIT ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) & LIT)) ;) })) })) })) (return_statement return IDENT ;) })))
(function_definition "uint __regparm3 FUN_000181d0(int param_1,byte *param_2,int param_3)\n\n{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}" (type_identifier "uint") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_000181d0(int param_1,byte *param_2,int param_3)" (identifier "FUN_000181d0") (parameter_list "(int param_1,byte *param_2,int param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "byte *param_2" (type_identifier "byte") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  \n  bVar1 = param_2[4];\n  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);\n  if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }\n  uVar3 = *(uint *)(param_2 + 4);\n  uVar5 = 1;\n  if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }\n  return uVar5;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (expression_statement "bVar1 = param_2[4];" (assignment_expression "bVar1 = param_2[4]" (identifier "bVar1") (= "=") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);" (assignment_expression "bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(*(int *)(param_1 + 4) + param_3)" (* "*") (cast_expression "(byte *)(*(int *)(param_1 + 4) + param_3)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 4) + param_3)" (( "(") (binary_expression "*(int *)(param_1 + 4) + param_3" (pointer_expression "*(int *)(param_1 + 4)" (* "*") (cast_expression "(int *)(param_1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (+ "+") (identifier "param_3")) () ")"))))) (; ";")) (if_statement "if (bVar1 == 3) {\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }\n  else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" (if "if") (parenthesized_expression "(bVar1 == 3)" (( "(") (binary_expression "bVar1 == 3" (identifier "bVar1") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }\n  }" ({ "{") (if_statement "if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" (( "(") (binary_expression "(*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" (( "(") (binary_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" (* "*") (cast_expression "(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4)" (( "(") (binary_expression "*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4" (pointer_expression "*(int *)param_2" (* "*") (cast_expression "(int *)param_2" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_2"))) (+ "+") (binary_expression "((int)(uint)bVar2 >> 5) * 4" (parenthesized_expression "((int)(uint)bVar2 >> 5)" (( "(") (binary_expression "(int)(uint)bVar2 >> 5" (cast_expression "(int)(uint)bVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)bVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar2"))) (>> ">>") (number_literal "5")) () ")")) (* "*") (number_literal "4"))) () ")")))) (>> ">>") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (else_clause "else if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" (else "else") (if_statement "if (bVar1 < 4) {\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }\n  else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" (if "if") (parenthesized_expression "(bVar1 < 4)" (( "(") (binary_expression "bVar1 < 4" (identifier "bVar1") (< "<") (number_literal "4")) () ")")) (compound_statement "{\n    if (bVar1 != 1) {\n      return 0;\n    }\n    if (*param_2 != bVar2) {\n      return 0;\n    }\n  }" ({ "{") (if_statement "if (bVar1 != 1) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(bVar1 != 1)" (( "(") (binary_expression "bVar1 != 1" (identifier "bVar1") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (*param_2 != bVar2) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(*param_2 != bVar2)" (( "(") (binary_expression "*param_2 != bVar2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (identifier "bVar2")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" (else "else") (compound_statement "{\n    if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }\n    if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }\n  }" ({ "{") (if_statement "if (bVar1 != 5) {\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }" (if "if") (parenthesized_expression "(bVar1 != 5)" (( "(") (binary_expression "bVar1 != 5" (identifier "bVar1") (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n      if (bVar1 != 7) {\n        return 0;\n      }\n      if ((char)bVar2 < '\0') {\n        return 0;\n      }\n    }" ({ "{") (if_statement "if (bVar1 != 7) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(bVar1 != 7)" (( "(") (binary_expression "bVar1 != 7" (identifier "bVar1") (!= "!=") (number_literal "7")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if ((char)bVar2 < '\0') {\n        return 0;\n      }" (if "if") (parenthesized_expression "((char)bVar2 < '\0')" (( "(") (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar2")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}"))) (if_statement "if (bVar2 == 10) {\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }\n    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(bVar2 == 10)" (( "(") (binary_expression "bVar2 == 10" (identifier "bVar2") (== "==") (number_literal "10")) () ")")) (compound_statement "{\n      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }\n    }" ({ "{") (if_statement "if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0)" (( "(") (binary_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0" (parenthesized_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40)" (( "(") (binary_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40" (pointer_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80)" (* "*") (cast_expression "(byte *)(*(int *)(param_1 + 0x54) + 0x80)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x54) + 0x80)" (( "(") (binary_expression "*(int *)(param_1 + 0x54) + 0x80" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (+ "+") (number_literal "0x80")) () ")")))) (& "&") (number_literal "0x40")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (else_clause "else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" (else "else") (if_statement "if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {\n      return 0;\n    }" (if "if") (parenthesized_expression "((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0))" (( "(") (binary_expression "(bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)" (parenthesized_expression "(bVar2 == 0)" (( "(") (binary_expression "bVar2 == 0" (identifier "bVar2") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)" (( "(") (binary_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0" (parenthesized_expression "(*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80)" (( "(") (binary_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80" (pointer_expression "*(byte *)(*(int *)(param_1 + 0x54) + 0x80)" (* "*") (cast_expression "(byte *)(*(int *)(param_1 + 0x54) + 0x80)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x54) + 0x80)" (( "(") (binary_expression "*(int *)(param_1 + 0x54) + 0x80" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (+ "+") (number_literal "0x80")) () ")")))) (& "&") (number_literal "0x80")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))))) (} "}")))))) (expression_statement "uVar3 = *(uint *)(param_2 + 4);" (assignment_expression "uVar3 = *(uint *)(param_2 + 4)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (if_statement "if ((uVar3 & 0x3ff00) != 0) {\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }" (if "if") (parenthesized_expression "((uVar3 & 0x3ff00) != 0)" (( "(") (binary_expression "(uVar3 & 0x3ff00) != 0" (parenthesized_expression "(uVar3 & 0x3ff00)" (( "(") (binary_expression "uVar3 & 0x3ff00" (identifier "uVar3") (& "&") (number_literal "0x3ff00")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar5 = uVar3 >> 8;\n    uVar4 = FUN_00018110();\n    if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }\n    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }\n  }" ({ "{") (expression_statement "uVar5 = uVar3 >> 8;" (assignment_expression "uVar5 = uVar3 >> 8" (identifier "uVar5") (= "=") (binary_expression "uVar3 >> 8" (identifier "uVar3") (>> ">>") (number_literal "8"))) (; ";")) (expression_statement "uVar4 = FUN_00018110();" (assignment_expression "uVar4 = FUN_00018110()" (identifier "uVar4") (= "=") (call_expression "FUN_00018110()" (identifier "FUN_00018110") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((uVar5 & 4) == 0) {\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }\n    else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" (if "if") (parenthesized_expression "((uVar5 & 4) == 0)" (( "(") (binary_expression "(uVar5 & 4) == 0" (parenthesized_expression "(uVar5 & 4)" (( "(") (binary_expression "uVar5 & 4" (identifier "uVar5") (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }\n    }" ({ "{") (if_statement "if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(((uVar5 & 8) != 0) && ((uVar4 & 1) != 0))" (( "(") (binary_expression "((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)" (parenthesized_expression "((uVar5 & 8) != 0)" (( "(") (binary_expression "(uVar5 & 8) != 0" (parenthesized_expression "(uVar5 & 8)" (( "(") (binary_expression "uVar5 & 8" (identifier "uVar5") (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((uVar4 & 1) != 0)" (( "(") (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" (else "else") (compound_statement "{\n      if ((uVar4 & 1) == 0) {\n        return 0;\n      }\n      if ((uVar5 & 8) != 0) {\n        return 0;\n      }\n    }" ({ "{") (if_statement "if ((uVar4 & 1) == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((uVar4 & 1) == 0)" (( "(") (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if ((uVar5 & 8) != 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((uVar5 & 8) != 0)" (( "(") (binary_expression "(uVar5 & 8) != 0" (parenthesized_expression "(uVar5 & 8)" (( "(") (binary_expression "uVar5 & 8" (identifier "uVar5") (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")))) (if_statement "if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }" (if "if") (parenthesized_expression "(((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0))" (( "(") (binary_expression "((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)" (parenthesized_expression "((uVar3 & 0x2000) == 0)" (( "(") (binary_expression "(uVar3 & 0x2000) == 0" (parenthesized_expression "(uVar3 & 0x2000)" (( "(") (binary_expression "uVar3 & 0x2000" (identifier "uVar3") (& "&") (number_literal "0x2000")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar5 = 0, (uVar4 & 2) != 0)" (( "(") (comma_expression "uVar5 = 0, (uVar4 & 2) != 0" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (, ",") (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" (( "(") (binary_expression "uVar4 & 2" (identifier "uVar4") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      uVar5 = 1;\n      if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }\n    }" ({ "{") (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (if_statement "if ((uVar3 & 0x8000) != 0) {\n        uVar5 = uVar4 >> 3 & 1;\n      }" (if "if") (parenthesized_expression "((uVar3 & 0x8000) != 0)" (( "(") (binary_expression "(uVar3 & 0x8000) != 0" (parenthesized_expression "(uVar3 & 0x8000)" (( "(") (binary_expression "uVar3 & 0x8000" (identifier "uVar3") (& "&") (number_literal "0x8000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar5 = uVar4 >> 3 & 1;\n      }" ({ "{") (expression_statement "uVar5 = uVar4 >> 3 & 1;" (assignment_expression "uVar5 = uVar4 >> 3 & 1" (identifier "uVar5") (= "=") (binary_expression "uVar4 >> 3 & 1" (binary_expression "uVar4 >> 3" (identifier "uVar4") (>> ">>") (number_literal "3")) (& "&") (number_literal "1"))) (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}")))

type_1 __regparm3 function_1(type_2 *mctx,type_3 *node,type_4 idx)

{
  type_5 var_1;
  type_5 var_2;
  type_6 var_3;
  type_6 var_6;
  type_1 _Var5;
  type_6 var_5;
  
  var_1 = node->field_0x4;
  var_2 = (mctx->input).mbs[idx];
  if (var_1 == 3) {
    if (((node->opr).sbcset[(int)(type_6)var_2 >> 5] >> (var_2 & 0x1f) & 1) == 0) {
      return false;
    }
  }
  else if (var_1 < 4) {
    if (var_1 != 1) {
      return false;
    }
    if ((node->opr).c != var_2) {
      return false;
    }
  }
  else {
    if (var_1 != 5) {
      if (var_1 != 7) {
        return false;
      }
      if ((char)var_2 < '\0') {
        return false;
      }
    }
    if (var_2 == 10) {
      if ((mctx->dfa->syntax & 0x40) == 0) {
        return false;
      }
    }
    else if ((var_2 == 0) && ((mctx->dfa->syntax & 0x80) != 0)) {
      return false;
    }
  }
  var_3 = *(type_6 *)&node->field_0x4;
  _Var5 = true;
  if ((var_3 & 0x3ff00) != 0) {
    var_5 = var_3 >> 8;
    var_6 = var_4(&mctx->input,idx,mctx->eflags);
    if ((var_5 & 4) == 0) {
      if (((var_5 & 8) != 0) && ((var_6 & 1) != 0)) {
        return false;
      }
    }
    else {
      if ((var_6 & 1) == 0) {
        return false;
      }
      if ((var_5 & 8) != 0) {
        return false;
      }
    }
    if (((var_3 & 0x2000) == 0) || (_Var5 = false, (var_6 & 2) != 0)) {
      _Var5 = true;
      if ((var_3 & 0x8000) != 0) {
        _Var5 = (type_1)((type_5)(var_6 >> 3) & 1);
      }
    }
  }
  return _Var5;
}


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

uint __regparm3 MASKED(int param_1,byte *param_2,int param_3)

{
  byte bVar1;
  byte bVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  
  bVar1 = param_2[4];
  bVar2 = *(byte *)(*(int *)(param_1 + 4) + param_3);
  if (bVar1 == 3) {
    if ((*(uint *)(*(int *)param_2 + ((int)(uint)bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {
      return 0;
    }
  }
  else if (bVar1 < 4) {
    if (bVar1 != 1) {
      return 0;
    }
    if (*param_2 != bVar2) {
      return 0;
    }
  }
  else {
    if (bVar1 != 5) {
      if (bVar1 != 7) {
        return 0;
      }
      if ((char)bVar2 < '\0') {
        return 0;
      }
    }
    if (bVar2 == 10) {
      if ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x40) == 0) {
        return 0;
      }
    }
    else if ((bVar2 == 0) && ((*(byte *)(*(int *)(param_1 + 0x54) + 0x80) & 0x80) != 0)) {
      return 0;
    }
  }
  uVar3 = *(uint *)(param_2 + 4);
  uVar5 = 1;
  if ((uVar3 & 0x3ff00) != 0) {
    uVar5 = uVar3 >> 8;
    uVar4 = FUN_00018110();
    if ((uVar5 & 4) == 0) {
      if (((uVar5 & 8) != 0) && ((uVar4 & 1) != 0)) {
        return 0;
      }
    }
    else {
      if ((uVar4 & 1) == 0) {
        return 0;
      }
      if ((uVar5 & 8) != 0) {
        return 0;
      }
    }
    if (((uVar3 & 0x2000) == 0) || (uVar5 = 0, (uVar4 & 2) != 0)) {
      uVar5 = 1;
      if ((uVar3 & 0x8000) != 0) {
        uVar5 = uVar4 >> 3 & 1;
      }
    }
  }
  return uVar5;
}

