
WORD_DESC * make_word_flags(WORD_DESC *w,char *string)

{
  byte *__s;
  char cVar1;
  byte bVar2;
  long lVar3;
  mbstate_t mVar4;
  ulong uVar5;
  ulong uVar6;
  int iVar7;
  char *pcVar8;
  long in_FS_OFFSET;
  mbstate_t state;
  
  lVar3 = *(long *)(in_FS_OFFSET + 0x28);
  state.__count = 0;
  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;
  uVar5 = 0xffffffffffffffff;
  pcVar8 = string;
  do {
    if (uVar5 == 0) break;
    uVar5 = uVar5 - 1;
    cVar1 = *pcVar8;
    pcVar8 = pcVar8 + 1;
  } while (cVar1 != '\0');
  iVar7 = 0;
LAB_0013d87f:
  do {
    mVar4 = state;
    uVar6 = (ulong)iVar7;
    if (~uVar5 - 1 <= uVar6) {
      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {
        return w;
      }
                    /* WARNING: Subroutine does not return */
      __stack_chk_fail();
    }
    __s = (byte *)(string + uVar6);
    bVar2 = *__s;
    if (bVar2 == 0x24) {
      w->flags = w->flags | 1;
    }
    else if ((char)bVar2 < '%') {
      if (bVar2 == 0x22) goto LAB_0013d8a5;
    }
    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {
LAB_0013d8a5:
      w->flags = w->flags | 2;
    }
    if (1 < locale_mb_cur_max) {
      bVar2 = *__s;
      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {
        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {
          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);
          if (0xfffffffffffffffd < uVar6) {
            iVar7 = iVar7 + 1;
            state = mVar4;
            goto LAB_0013d87f;
          }
        }
        else {
          uVar6 = (ulong)(bVar2 != 0);
        }
        if (uVar6 == 0) {
          iVar7 = iVar7 + 1;
          goto LAB_0013d87f;
        }
      }
      else {
        uVar6 = 1;
      }
      iVar7 = iVar7 + (int)uVar6;
      goto LAB_0013d87f;
    }
    iVar7 = iVar7 + 1;
    state = mVar4;
  } while( true );
}



long make_word_flags(long param_1,char *param_2)

{
  byte *__s;
  char cVar1;
  byte bVar2;
  mbstate_t mVar3;
  ulong uVar4;
  ulong uVar5;
  int iVar6;
  char *pcVar7;
  long in_FS_OFFSET;
  mbstate_t local_48;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  local_48.__count = 0;
  local_48.__value = (_union_27)0x0;
  uVar4 = 0xffffffffffffffff;
  pcVar7 = param_2;
  do {
    if (uVar4 == 0) break;
    uVar4 = uVar4 - 1;
    cVar1 = *pcVar7;
    pcVar7 = pcVar7 + 1;
  } while (cVar1 != '\0');
  iVar6 = 0;
LAB_0013d87f:
  do {
    mVar3 = local_48;
    uVar5 = (ulong)iVar6;
    if (~uVar4 - 1 <= uVar5) {
      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
        return param_1;
      }
                    /* WARNING: Subroutine does not return */
      __stack_chk_fail();
    }
    __s = (byte *)(param_2 + uVar5);
    bVar2 = *__s;
    if (bVar2 == 0x24) {
      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;
    }
    else if ((char)bVar2 < '%') {
      if (bVar2 == 0x22) goto LAB_0013d8a5;
    }
    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {
LAB_0013d8a5:
      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;
    }
    if (1 < locale_mb_cur_max) {
      bVar2 = *__s;
      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {
        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {
          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);
          if (0xfffffffffffffffd < uVar5) {
            iVar6 = iVar6 + 1;
            local_48 = mVar3;
            goto LAB_0013d87f;
          }
        }
        else {
          uVar5 = (ulong)(bVar2 != 0);
        }
        if (uVar5 == 0) {
          iVar6 = iVar6 + 1;
          goto LAB_0013d87f;
        }
      }
      else {
        uVar5 = 1;
      }
      iVar6 = iVar6 + (int)uVar5;
      goto LAB_0013d87f;
    }
    iVar6 = iVar6 + 1;
    local_48 = mVar3;
  } while( true );
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x28
MOV R12,RDI
MOV R13,RSI
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x18],RAX
XOR EAX,EAX
MOV qword ptr [RSP + 0x10],0x0
MOV RCX,-0x1
MOV RDI,RSI
SCASB.REPNE RDI
MOV RBX,RCX
NOT RBX
LEA RBP,[RBX + -0x1]
MOV EBX,0x0
LEA R14,[0x1e9880]
LEA RAX,[RSP + 0x10]
MOV qword ptr [RSP + 0x8],RAX
JMP 0x0013d87f
CMP AL,0x22
JZ 0x0013d8a5
CMP dword ptr [0x0021c460],0x1
JLE 0x0013d87c
MOVZX ECX,byte ptr [RSI]
MOV EAX,ECX
SHR AL,0x5
AND EAX,0x7
MOV EAX,dword ptr [R14 + RAX*0x4]
SHR EAX,CL
TEST AL,0x1
JNZ 0x0013d873
CMP dword ptr [0x0021c468],0x0
JZ 0x0013d846
TEST CL,CL
JS 0x0013d846
SETNZ AL
MOVZX EAX,AL
TEST RAX,RAX
JNZ 0x0013d878
ADD EBX,0x1
JMP 0x0013d87f
OR dword ptr [R12 + 0x8],0x1
JMP 0x0013d803
MOV R15,qword ptr [RSP + 0x10]
MOV RAX,RBP
SUB RAX,RDX
MOV RDX,RAX
MOV RCX,qword ptr [RSP + 0x8]
MOV EDI,0x0
CALL 0x0012d3d0
CMP RAX,-0x2
JC 0x0013d834
MOV qword ptr [RSP + 0x10],R15
ADD EBX,0x1
JMP 0x0013d87f
MOV EAX,0x1
ADD EBX,EAX
JMP 0x0013d87f
ADD EBX,0x1
MOVSXD RDX,EBX
CMP RDX,RBP
JNC 0x0013d8b0
LEA RSI,[R13 + RDX*0x1]
MOVZX EAX,byte ptr [RSI]
CMP AL,0x24
JZ 0x0013d83e
JLE 0x0013d7fb
CMP AL,0x27
JZ 0x0013d8a5
CMP AL,0x60
JNZ 0x0013d803
OR dword ptr [R12 + 0x8],0x2
JMP 0x0013d803
MOV RAX,R12
MOV RDI,qword ptr [RSP + 0x18]
XOR RDI,qword ptr FS:[0x28]
JNZ 0x0013d8d2
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x0012d3b0
(translation_unit "long make_word_flags(long param_1,char *param_2)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}\n\n" (function_definition "long make_word_flags(long param_1,char *param_2)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}" (sized_type_specifier "long" long) (function_declarator "make_word_flags(long param_1,char *param_2)" identifier (parameter_list "(long param_1,char *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}" { (declaration "byte *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "mbstate_t mVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "mbstate_t local_48;" type_identifier identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "local_48.__count = 0;" (assignment_expression "local_48.__count = 0" (field_expression "local_48.__count" identifier . field_identifier) = number_literal) ;) (expression_statement "local_48.__value = (_union_27)0x0;" (assignment_expression "local_48.__value = (_union_27)0x0" (field_expression "local_48.__value" identifier . field_identifier) = (cast_expression "(_union_27)0x0" ( (type_descriptor "_union_27" type_identifier) ) number_literal)) ;) (expression_statement "uVar4 = 0xffffffffffffffff;" (assignment_expression "uVar4 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" identifier = identifier) ;) (do_statement "do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" do (compound_statement "{\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  }" { (if_statement "if (uVar4 == 0) break;" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" identifier = (pointer_expression "*pcVar7" * identifier)) ;) (expression_statement "pcVar7 = pcVar7 + 1;" (assignment_expression "pcVar7 = pcVar7 + 1" identifier = (binary_expression "pcVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );" statement_identifier : (do_statement "do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );" do (compound_statement "{\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  }" { (expression_statement "mVar3 = local_48;" (assignment_expression "mVar3 = local_48" identifier = identifier) ;) (expression_statement "uVar5 = (ulong)iVar6;" (assignment_expression "uVar5 = (ulong)iVar6" identifier = (cast_expression "(ulong)iVar6" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }" if (parenthesized_expression "(~uVar4 - 1 <= uVar5)" ( (binary_expression "~uVar4 - 1 <= uVar5" (binary_expression "~uVar4 - 1" (unary_expression "~uVar4" ~ identifier) - number_literal) <= identifier) )) (compound_statement "{\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }" { (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "__s = (byte *)(param_2 + uVar5);" (assignment_expression "__s = (byte *)(param_2 + uVar5)" identifier = (cast_expression "(byte *)(param_2 + uVar5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar5)" ( (binary_expression "param_2 + uVar5" identifier + identifier) )))) ;) (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" identifier = (pointer_expression "*__s" * identifier)) ;) (if_statement "if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" if (parenthesized_expression "(bVar2 == 0x24)" ( (binary_expression "bVar2 == 0x24" identifier == number_literal) )) (compound_statement "{\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }" { (expression_statement "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;" (assignment_expression "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_1 + 8) | 1" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) | number_literal)) ;) }) (else_clause "else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" else (if_statement "if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" if (parenthesized_expression "((char)bVar2 < '%')" ( (binary_expression "(char)bVar2 < '%'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'%'" ' character ')) )) (compound_statement "{\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }" { (if_statement "if (bVar2 == 0x22) goto LAB_0013d8a5;" if (parenthesized_expression "(bVar2 == 0x22)" ( (binary_expression "bVar2 == 0x22" identifier == number_literal) )) (goto_statement "goto LAB_0013d8a5;" goto statement_identifier ;)) }) (else_clause "else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" else (if_statement "if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" if (parenthesized_expression "((bVar2 == 0x27) || (bVar2 == 0x60))" ( (binary_expression "(bVar2 == 0x27) || (bVar2 == 0x60)" (parenthesized_expression "(bVar2 == 0x27)" ( (binary_expression "bVar2 == 0x27" identifier == number_literal) )) || (parenthesized_expression "(bVar2 == 0x60)" ( (binary_expression "bVar2 == 0x60" identifier == number_literal) ))) )) (compound_statement "{\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" { (labeled_statement "LAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;" statement_identifier : (expression_statement "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;" (assignment_expression "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_1 + 8) | 2" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) | number_literal)) ;)) })))))) (if_statement "if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }" if (parenthesized_expression "(1 < locale_mb_cur_max)" ( (binary_expression "1 < locale_mb_cur_max" number_literal < identifier) )) (compound_statement "{\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }" { (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" identifier = (pointer_expression "*__s" * identifier)) ;) (if_statement "if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }" if (parenthesized_expression "((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" ( (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" * (cast_expression "(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(is_basic_table + (ulong)(bVar2 >> 5) * 4)" ( (binary_expression "is_basic_table + (ulong)(bVar2 >> 5) * 4" identifier + (binary_expression "(ulong)(bVar2 >> 5) * 4" (call_expression "(ulong)(bVar2 >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar2 >> 5)" ( (binary_expression "bVar2 >> 5" identifier >> number_literal) ))) * number_literal)) )))) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }" { (if_statement "if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }" if (parenthesized_expression "((locale_utf8locale == 0) || ((char)bVar2 < '\0'))" ( (binary_expression "(locale_utf8locale == 0) || ((char)bVar2 < '\0')" (parenthesized_expression "(locale_utf8locale == 0)" ( (binary_expression "locale_utf8locale == 0" identifier == number_literal) )) || (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          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }" { (expression_statement "uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);" (assignment_expression "uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" identifier = (call_expression "mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" identifier (argument_list "((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" ( (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "(~uVar4 - 1) - uVar5" (parenthesized_expression "(~uVar4 - 1)" ( (binary_expression "~uVar4 - 1" (unary_expression "~uVar4" ~ identifier) - number_literal) )) - identifier) , (pointer_expression "&local_48" & identifier) )))) ;) (if_statement "if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }" if (parenthesized_expression "(0xfffffffffffffffd < uVar5)" ( (binary_expression "0xfffffffffffffffd < uVar5" number_literal < identifier) )) (compound_statement "{\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_48 = mVar3;" (assignment_expression "local_48 = mVar3" identifier = identifier) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) }) (else_clause "else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }" else (compound_statement "{\n          uVar5 = (ulong)(bVar2 != 0);\n        }" { (expression_statement "uVar5 = (ulong)(bVar2 != 0);" (assignment_expression "uVar5 = (ulong)(bVar2 != 0)" identifier = (call_expression "(ulong)(bVar2 != 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar2 != 0)" ( (binary_expression "bVar2 != 0" identifier != number_literal) )))) ;) }))) (if_statement "if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) }) (else_clause "else {\n        uVar5 = 1;\n      }" else (compound_statement "{\n        uVar5 = 1;\n      }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) }))) (expression_statement "iVar6 = iVar6 + (int)uVar5;" (assignment_expression "iVar6 = iVar6 + (int)uVar5" identifier = (binary_expression "iVar6 + (int)uVar5" identifier + (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_48 = mVar3;" (assignment_expression "local_48 = mVar3" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "WORD_DESC * make_word_flags(WORD_DESC *w,char *string)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  long lVar3;\n  mbstate_t mVar4;\n  ulong uVar5;\n  ulong uVar6;\n  int iVar7;\n  char *pcVar8;\n  long in_FS_OFFSET;\n  mbstate_t state;\n  \n  lVar3 = *(long *)(in_FS_OFFSET + 0x28);\n  state.__count = 0;\n  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar8 = string;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar8;\n    pcVar8 = pcVar8 + 1;\n  } while (cVar1 != '\0');\n  iVar7 = 0;\nLAB_0013d87f:\n  do {\n    mVar4 = state;\n    uVar6 = (ulong)iVar7;\n    if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(string + uVar6);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }\n    iVar7 = iVar7 + 1;\n    state = mVar4;\n  } while( true );\n}\n\n" (function_definition "WORD_DESC * make_word_flags(WORD_DESC *w,char *string)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  long lVar3;\n  mbstate_t mVar4;\n  ulong uVar5;\n  ulong uVar6;\n  int iVar7;\n  char *pcVar8;\n  long in_FS_OFFSET;\n  mbstate_t state;\n  \n  lVar3 = *(long *)(in_FS_OFFSET + 0x28);\n  state.__count = 0;\n  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar8 = string;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar8;\n    pcVar8 = pcVar8 + 1;\n  } while (cVar1 != '\0');\n  iVar7 = 0;\nLAB_0013d87f:\n  do {\n    mVar4 = state;\n    uVar6 = (ulong)iVar7;\n    if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(string + uVar6);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }\n    iVar7 = iVar7 + 1;\n    state = mVar4;\n  } while( true );\n}" type_identifier (pointer_declarator "* make_word_flags(WORD_DESC *w,char *string)" * (function_declarator "make_word_flags(WORD_DESC *w,char *string)" identifier (parameter_list "(WORD_DESC *w,char *string)" ( (parameter_declaration "WORD_DESC *w" type_identifier (pointer_declarator "*w" * identifier)) , (parameter_declaration "char *string" primitive_type (pointer_declarator "*string" * identifier)) )))) (compound_statement "{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  long lVar3;\n  mbstate_t mVar4;\n  ulong uVar5;\n  ulong uVar6;\n  int iVar7;\n  char *pcVar8;\n  long in_FS_OFFSET;\n  mbstate_t state;\n  \n  lVar3 = *(long *)(in_FS_OFFSET + 0x28);\n  state.__count = 0;\n  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar8 = string;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar8;\n    pcVar8 = pcVar8 + 1;\n  } while (cVar1 != '\0');\n  iVar7 = 0;\nLAB_0013d87f:\n  do {\n    mVar4 = state;\n    uVar6 = (ulong)iVar7;\n    if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(string + uVar6);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }\n    iVar7 = iVar7 + 1;\n    state = mVar4;\n  } while( true );\n}" { (declaration "byte *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "mbstate_t mVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "mbstate_t state;" type_identifier identifier ;) (expression_statement "lVar3 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar3 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "state.__count = 0;" (assignment_expression "state.__count = 0" (field_expression "state.__count" identifier . field_identifier) = number_literal) ;) (expression_statement "state.__value = (anon_union_4_2_91654ee9_for___value)0x0;" (assignment_expression "state.__value = (anon_union_4_2_91654ee9_for___value)0x0" (field_expression "state.__value" identifier . field_identifier) = (cast_expression "(anon_union_4_2_91654ee9_for___value)0x0" ( (type_descriptor "anon_union_4_2_91654ee9_for___value" type_identifier) ) number_literal)) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar8 = string;" (assignment_expression "pcVar8 = string" identifier = identifier) ;) (do_statement "do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar8;\n    pcVar8 = pcVar8 + 1;\n  } while (cVar1 != '\0');" do (compound_statement "{\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar8;\n    pcVar8 = pcVar8 + 1;\n  }" { (if_statement "if (uVar5 == 0) break;" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar8;" (assignment_expression "cVar1 = *pcVar8" identifier = (pointer_expression "*pcVar8" * identifier)) ;) (expression_statement "pcVar8 = pcVar8 + 1;" (assignment_expression "pcVar8 = pcVar8 + 1" identifier = (binary_expression "pcVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0013d87f:\n  do {\n    mVar4 = state;\n    uVar6 = (ulong)iVar7;\n    if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(string + uVar6);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }\n    iVar7 = iVar7 + 1;\n    state = mVar4;\n  } while( true );" statement_identifier : (do_statement "do {\n    mVar4 = state;\n    uVar6 = (ulong)iVar7;\n    if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(string + uVar6);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }\n    iVar7 = iVar7 + 1;\n    state = mVar4;\n  } while( true );" do (compound_statement "{\n    mVar4 = state;\n    uVar6 = (ulong)iVar7;\n    if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }\n    __s = (byte *)(string + uVar6);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }\n    iVar7 = iVar7 + 1;\n    state = mVar4;\n  }" { (expression_statement "mVar4 = state;" (assignment_expression "mVar4 = state" identifier = identifier) ;) (expression_statement "uVar6 = (ulong)iVar7;" (assignment_expression "uVar6 = (ulong)iVar7" identifier = (cast_expression "(ulong)iVar7" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (~uVar5 - 1 <= uVar6) {\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }" if (parenthesized_expression "(~uVar5 - 1 <= uVar6)" ( (binary_expression "~uVar5 - 1 <= uVar6" (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal) <= identifier) )) (compound_statement "{\n      if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }\n                    /* WARNING: Subroutine does not return */\n      __stack_chk_fail();\n    }" { (if_statement "if (lVar3 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return w;\n      }" if (parenthesized_expression "(lVar3 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar3 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n        return w;\n      }" { (return_statement "return w;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "__s = (byte *)(string + uVar6);" (assignment_expression "__s = (byte *)(string + uVar6)" identifier = (cast_expression "(byte *)(string + uVar6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(string + uVar6)" ( (binary_expression "string + uVar6" identifier + identifier) )))) ;) (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" identifier = (pointer_expression "*__s" * identifier)) ;) (if_statement "if (bVar2 == 0x24) {\n      w->flags = w->flags | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }" if (parenthesized_expression "(bVar2 == 0x24)" ( (binary_expression "bVar2 == 0x24" identifier == number_literal) )) (compound_statement "{\n      w->flags = w->flags | 1;\n    }" { (expression_statement "w->flags = w->flags | 1;" (assignment_expression "w->flags = w->flags | 1" (field_expression "w->flags" identifier -> field_identifier) = (binary_expression "w->flags | 1" (field_expression "w->flags" identifier -> field_identifier) | number_literal)) ;) }) (else_clause "else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }" else (if_statement "if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }" if (parenthesized_expression "((char)bVar2 < '%')" ( (binary_expression "(char)bVar2 < '%'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'%'" ' character ')) )) (compound_statement "{\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }" { (if_statement "if (bVar2 == 0x22) goto LAB_0013d8a5;" if (parenthesized_expression "(bVar2 == 0x22)" ( (binary_expression "bVar2 == 0x22" identifier == number_literal) )) (goto_statement "goto LAB_0013d8a5;" goto statement_identifier ;)) }) (else_clause "else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }" else (if_statement "if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }" if (parenthesized_expression "((bVar2 == 0x27) || (bVar2 == 0x60))" ( (binary_expression "(bVar2 == 0x27) || (bVar2 == 0x60)" (parenthesized_expression "(bVar2 == 0x27)" ( (binary_expression "bVar2 == 0x27" identifier == number_literal) )) || (parenthesized_expression "(bVar2 == 0x60)" ( (binary_expression "bVar2 == 0x60" identifier == number_literal) ))) )) (compound_statement "{\nLAB_0013d8a5:\n      w->flags = w->flags | 2;\n    }" { (labeled_statement "LAB_0013d8a5:\n      w->flags = w->flags | 2;" statement_identifier : (expression_statement "w->flags = w->flags | 2;" (assignment_expression "w->flags = w->flags | 2" (field_expression "w->flags" identifier -> field_identifier) = (binary_expression "w->flags | 2" (field_expression "w->flags" identifier -> field_identifier) | number_literal)) ;)) })))))) (if_statement "if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }" if (parenthesized_expression "(1 < locale_mb_cur_max)" ( (binary_expression "1 < locale_mb_cur_max" number_literal < identifier) )) (compound_statement "{\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }\n      iVar7 = iVar7 + (int)uVar6;\n      goto LAB_0013d87f;\n    }" { (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" identifier = (pointer_expression "*__s" * identifier)) ;) (if_statement "if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar6 = 1;\n      }" if (parenthesized_expression "((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" ( (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" * (cast_expression "(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(is_basic_table + (ulong)(bVar2 >> 5) * 4)" ( (binary_expression "is_basic_table + (ulong)(bVar2 >> 5) * 4" identifier + (binary_expression "(ulong)(bVar2 >> 5) * 4" (call_expression "(ulong)(bVar2 >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar2 >> 5)" ( (binary_expression "bVar2 >> 5" identifier >> number_literal) ))) * number_literal)) )))) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }\n        if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }\n      }" { (if_statement "if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }" if (parenthesized_expression "((locale_utf8locale == 0) || ((char)bVar2 < '\0'))" ( (binary_expression "(locale_utf8locale == 0) || ((char)bVar2 < '\0')" (parenthesized_expression "(locale_utf8locale == 0)" ( (binary_expression "locale_utf8locale == 0" identifier == number_literal) )) || (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          uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);\n          if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }\n        }" { (expression_statement "uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state);" (assignment_expression "uVar6 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state)" identifier = (call_expression "mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state)" identifier (argument_list "((wchar_t *)0x0,(char *)__s,(~uVar5 - 1) - uVar6,(mbstate_t *)&state)" ( (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "(~uVar5 - 1) - uVar6" (parenthesized_expression "(~uVar5 - 1)" ( (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal) )) - identifier) , (cast_expression "(mbstate_t *)&state" ( (type_descriptor "mbstate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&state" & identifier)) )))) ;) (if_statement "if (0xfffffffffffffffd < uVar6) {\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }" if (parenthesized_expression "(0xfffffffffffffffd < uVar6)" ( (binary_expression "0xfffffffffffffffd < uVar6" number_literal < identifier) )) (compound_statement "{\n            iVar7 = iVar7 + 1;\n            state = mVar4;\n            goto LAB_0013d87f;\n          }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "state = mVar4;" (assignment_expression "state = mVar4" identifier = identifier) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) }) (else_clause "else {\n          uVar6 = (ulong)(bVar2 != 0);\n        }" else (compound_statement "{\n          uVar6 = (ulong)(bVar2 != 0);\n        }" { (expression_statement "uVar6 = (ulong)(bVar2 != 0);" (assignment_expression "uVar6 = (ulong)(bVar2 != 0)" identifier = (call_expression "(ulong)(bVar2 != 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar2 != 0)" ( (binary_expression "bVar2 != 0" identifier != number_literal) )))) ;) }))) (if_statement "if (uVar6 == 0) {\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar7 = iVar7 + 1;\n          goto LAB_0013d87f;\n        }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) }) (else_clause "else {\n        uVar6 = 1;\n      }" else (compound_statement "{\n        uVar6 = 1;\n      }" { (expression_statement "uVar6 = 1;" (assignment_expression "uVar6 = 1" identifier = number_literal) ;) }))) (expression_statement "iVar7 = iVar7 + (int)uVar6;" (assignment_expression "iVar7 = iVar7 + (int)uVar6" identifier = (binary_expression "iVar7 + (int)uVar6" identifier + (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "state = mVar4;" (assignment_expression "state = mVar4" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "long make_word_flags(long param_1,char *param_2)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}\n\n" (function_definition "long make_word_flags(long param_1,char *param_2)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}" (sized_type_specifier "long" long) (function_declarator "make_word_flags(long param_1,char *param_2)" identifier (parameter_list "(long param_1,char *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}" { (declaration "byte *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "mbstate_t mVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "mbstate_t local_48;" type_identifier identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "local_48.__count = 0;" (assignment_expression "local_48.__count = 0" (field_expression "local_48.__count" identifier . field_identifier) = number_literal) ;) (expression_statement "local_48.__value = (_union_27)0x0;" (assignment_expression "local_48.__value = (_union_27)0x0" (field_expression "local_48.__value" identifier . field_identifier) = (cast_expression "(_union_27)0x0" ( (type_descriptor "_union_27" type_identifier) ) number_literal)) ;) (expression_statement "uVar4 = 0xffffffffffffffff;" (assignment_expression "uVar4 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" identifier = identifier) ;) (do_statement "do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" do (compound_statement "{\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  }" { (if_statement "if (uVar4 == 0) break;" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" identifier = (pointer_expression "*pcVar7" * identifier)) ;) (expression_statement "pcVar7 = pcVar7 + 1;" (assignment_expression "pcVar7 = pcVar7 + 1" identifier = (binary_expression "pcVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );" statement_identifier : (do_statement "do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );" do (compound_statement "{\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  }" { (expression_statement "mVar3 = local_48;" (assignment_expression "mVar3 = local_48" identifier = identifier) ;) (expression_statement "uVar5 = (ulong)iVar6;" (assignment_expression "uVar5 = (ulong)iVar6" identifier = (cast_expression "(ulong)iVar6" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }" if (parenthesized_expression "(~uVar4 - 1 <= uVar5)" ( (binary_expression "~uVar4 - 1 <= uVar5" (binary_expression "~uVar4 - 1" (unary_expression "~uVar4" ~ identifier) - number_literal) <= identifier) )) (compound_statement "{\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }" { (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }" if (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "__s = (byte *)(param_2 + uVar5);" (assignment_expression "__s = (byte *)(param_2 + uVar5)" identifier = (cast_expression "(byte *)(param_2 + uVar5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar5)" ( (binary_expression "param_2 + uVar5" identifier + identifier) )))) ;) (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" identifier = (pointer_expression "*__s" * identifier)) ;) (if_statement "if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" if (parenthesized_expression "(bVar2 == 0x24)" ( (binary_expression "bVar2 == 0x24" identifier == number_literal) )) (compound_statement "{\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }" { (expression_statement "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;" (assignment_expression "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_1 + 8) | 1" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) | number_literal)) ;) }) (else_clause "else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" else (if_statement "if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" if (parenthesized_expression "((char)bVar2 < '%')" ( (binary_expression "(char)bVar2 < '%'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'%'" ' character ')) )) (compound_statement "{\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }" { (if_statement "if (bVar2 == 0x22) goto LAB_0013d8a5;" if (parenthesized_expression "(bVar2 == 0x22)" ( (binary_expression "bVar2 == 0x22" identifier == number_literal) )) (goto_statement "goto LAB_0013d8a5;" goto statement_identifier ;)) }) (else_clause "else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" else (if_statement "if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" if (parenthesized_expression "((bVar2 == 0x27) || (bVar2 == 0x60))" ( (binary_expression "(bVar2 == 0x27) || (bVar2 == 0x60)" (parenthesized_expression "(bVar2 == 0x27)" ( (binary_expression "bVar2 == 0x27" identifier == number_literal) )) || (parenthesized_expression "(bVar2 == 0x60)" ( (binary_expression "bVar2 == 0x60" identifier == number_literal) ))) )) (compound_statement "{\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" { (labeled_statement "LAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;" statement_identifier : (expression_statement "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;" (assignment_expression "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_1 + 8) | 2" (pointer_expression "*(uint *)(param_1 + 8)" * (cast_expression "(uint *)(param_1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) | number_literal)) ;)) })))))) (if_statement "if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }" if (parenthesized_expression "(1 < locale_mb_cur_max)" ( (binary_expression "1 < locale_mb_cur_max" number_literal < identifier) )) (compound_statement "{\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }" { (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" identifier = (pointer_expression "*__s" * identifier)) ;) (if_statement "if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }" if (parenthesized_expression "((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" ( (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" * (cast_expression "(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(is_basic_table + (ulong)(bVar2 >> 5) * 4)" ( (binary_expression "is_basic_table + (ulong)(bVar2 >> 5) * 4" identifier + (binary_expression "(ulong)(bVar2 >> 5) * 4" (call_expression "(ulong)(bVar2 >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar2 >> 5)" ( (binary_expression "bVar2 >> 5" identifier >> number_literal) ))) * number_literal)) )))) >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }" { (if_statement "if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }" if (parenthesized_expression "((locale_utf8locale == 0) || ((char)bVar2 < '\0'))" ( (binary_expression "(locale_utf8locale == 0) || ((char)bVar2 < '\0')" (parenthesized_expression "(locale_utf8locale == 0)" ( (binary_expression "locale_utf8locale == 0" identifier == number_literal) )) || (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          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }" { (expression_statement "uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);" (assignment_expression "uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" identifier = (call_expression "mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" identifier (argument_list "((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" ( (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "(~uVar4 - 1) - uVar5" (parenthesized_expression "(~uVar4 - 1)" ( (binary_expression "~uVar4 - 1" (unary_expression "~uVar4" ~ identifier) - number_literal) )) - identifier) , (pointer_expression "&local_48" & identifier) )))) ;) (if_statement "if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }" if (parenthesized_expression "(0xfffffffffffffffd < uVar5)" ( (binary_expression "0xfffffffffffffffd < uVar5" number_literal < identifier) )) (compound_statement "{\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_48 = mVar3;" (assignment_expression "local_48 = mVar3" identifier = identifier) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) }) (else_clause "else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }" else (compound_statement "{\n          uVar5 = (ulong)(bVar2 != 0);\n        }" { (expression_statement "uVar5 = (ulong)(bVar2 != 0);" (assignment_expression "uVar5 = (ulong)(bVar2 != 0)" identifier = (call_expression "(ulong)(bVar2 != 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar2 != 0)" ( (binary_expression "bVar2 != 0" identifier != number_literal) )))) ;) }))) (if_statement "if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) }) (else_clause "else {\n        uVar5 = 1;\n      }" else (compound_statement "{\n        uVar5 = 1;\n      }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) }))) (expression_statement "iVar6 = iVar6 + (int)uVar5;" (assignment_expression "iVar6 = iVar6 + (int)uVar5" identifier = (binary_expression "iVar6 + (int)uVar5" identifier + (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (goto_statement "goto LAB_0013d87f;" goto statement_identifier ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_48 = mVar3;" (assignment_expression "local_48 = mVar3" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (cast_expression ( (type_descriptor TYPE) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (unary_expression ~ IDENT) - LIT) <= IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' character ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;)) })))))) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (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 IDENT + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) * LIT)) )))) >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ~ IDENT) - LIT) )) - IDENT) , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( BOOL )) ;)) })))
(function_definition "long make_word_flags(long param_1,char *param_2)\n\n{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}" (sized_type_specifier "long" (long "long")) (function_declarator "make_word_flags(long param_1,char *param_2)" (identifier "make_word_flags") (parameter_list "(long param_1,char *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  byte *__s;\n  char cVar1;\n  byte bVar2;\n  mbstate_t mVar3;\n  ulong uVar4;\n  ulong uVar5;\n  int iVar6;\n  char *pcVar7;\n  long in_FS_OFFSET;\n  mbstate_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  local_48.__count = 0;\n  local_48.__value = (_union_27)0x0;\n  uVar4 = 0xffffffffffffffff;\n  pcVar7 = param_2;\n  do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  iVar6 = 0;\nLAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );\n}" ({ "{") (declaration "byte *__s;" (type_identifier "byte") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "mbstate_t mVar3;" (type_identifier "mbstate_t") (identifier "mVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "char *pcVar7;" (primitive_type "char") (pointer_declarator "*pcVar7" (* "*") (identifier "pcVar7")) (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "mbstate_t local_48;" (type_identifier "mbstate_t") (identifier "local_48") (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "local_48.__count = 0;" (assignment_expression "local_48.__count = 0" (field_expression "local_48.__count" (identifier "local_48") (. ".") (field_identifier "__count")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48.__value = (_union_27)0x0;" (assignment_expression "local_48.__value = (_union_27)0x0" (field_expression "local_48.__value" (identifier "local_48") (. ".") (field_identifier "__value")) (= "=") (cast_expression "(_union_27)0x0" (( "(") (type_descriptor "_union_27" (type_identifier "_union_27")) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "uVar4 = 0xffffffffffffffff;" (assignment_expression "uVar4 = 0xffffffffffffffff" (identifier "uVar4") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" (identifier "pcVar7") (= "=") (identifier "param_2")) (; ";")) (do_statement "do {\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" (do "do") (compound_statement "{\n    if (uVar4 == 0) break;\n    uVar4 = uVar4 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  }" ({ "{") (if_statement "if (uVar4 == 0) break;" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (; ";")) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" (identifier "cVar1") (= "=") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7"))) (; ";")) (expression_statement "pcVar7 = pcVar7 + 1;" (assignment_expression "pcVar7 = pcVar7 + 1" (identifier "pcVar7") (= "=") (binary_expression "pcVar7 + 1" (identifier "pcVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0013d87f:\n  do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );" (statement_identifier "LAB_0013d87f") (: ":") (do_statement "do {\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  } while( true );" (do "do") (compound_statement "{\n    mVar3 = local_48;\n    uVar5 = (ulong)iVar6;\n    if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }\n    __s = (byte *)(param_2 + uVar5);\n    bVar2 = *__s;\n    if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }\n    if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }\n    iVar6 = iVar6 + 1;\n    local_48 = mVar3;\n  }" ({ "{") (expression_statement "mVar3 = local_48;" (assignment_expression "mVar3 = local_48" (identifier "mVar3") (= "=") (identifier "local_48")) (; ";")) (expression_statement "uVar5 = (ulong)iVar6;" (assignment_expression "uVar5 = (ulong)iVar6" (identifier "uVar5") (= "=") (cast_expression "(ulong)iVar6" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "iVar6"))) (; ";")) (if_statement "if (~uVar4 - 1 <= uVar5) {\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }" (if "if") (parenthesized_expression "(~uVar4 - 1 <= uVar5)" (( "(") (binary_expression "~uVar4 - 1 <= uVar5" (binary_expression "~uVar4 - 1" (unary_expression "~uVar4" (~ "~") (identifier "uVar4")) (- "-") (number_literal "1")) (<= "<=") (identifier "uVar5")) () ")")) (compound_statement "{\n      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }\n                    \n      __stack_chk_fail();\n    }" ({ "{") (if_statement "if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {\n        return param_1;\n      }" (if "if") (parenthesized_expression "(local_40 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n        return param_1;\n      }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "__s = (byte *)(param_2 + uVar5);" (assignment_expression "__s = (byte *)(param_2 + uVar5)" (identifier "__s") (= "=") (cast_expression "(byte *)(param_2 + uVar5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + uVar5)" (( "(") (binary_expression "param_2 + uVar5" (identifier "param_2") (+ "+") (identifier "uVar5")) () ")")))) (; ";")) (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" (identifier "bVar2") (= "=") (pointer_expression "*__s" (* "*") (identifier "__s"))) (; ";")) (if_statement "if (bVar2 == 0x24) {\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }\n    else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" (if "if") (parenthesized_expression "(bVar2 == 0x24)" (( "(") (binary_expression "bVar2 == 0x24" (identifier "bVar2") (== "==") (number_literal "0x24")) () ")")) (compound_statement "{\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;\n    }" ({ "{") (expression_statement "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;" (assignment_expression "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1" (pointer_expression "*(uint *)(param_1 + 8)" (* "*") (cast_expression "(uint *)(param_1 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (binary_expression "*(uint *)(param_1 + 8) | 1" (pointer_expression "*(uint *)(param_1 + 8)" (* "*") (cast_expression "(uint *)(param_1 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (| "|") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" (else "else") (if_statement "if ((char)bVar2 < '%') {\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }\n    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" (if "if") (parenthesized_expression "((char)bVar2 < '%')" (( "(") (binary_expression "(char)bVar2 < '%'" (cast_expression "(char)bVar2" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar2")) (< "<") (char_literal "'%'" (' "'") (character "%") (' "'"))) () ")")) (compound_statement "{\n      if (bVar2 == 0x22) goto LAB_0013d8a5;\n    }" ({ "{") (if_statement "if (bVar2 == 0x22) goto LAB_0013d8a5;" (if "if") (parenthesized_expression "(bVar2 == 0x22)" (( "(") (binary_expression "bVar2 == 0x22" (identifier "bVar2") (== "==") (number_literal "0x22")) () ")")) (goto_statement "goto LAB_0013d8a5;" (goto "goto") (statement_identifier "LAB_0013d8a5") (; ";"))) (} "}")) (else_clause "else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" (else "else") (if_statement "if ((bVar2 == 0x27) || (bVar2 == 0x60)) {\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" (if "if") (parenthesized_expression "((bVar2 == 0x27) || (bVar2 == 0x60))" (( "(") (binary_expression "(bVar2 == 0x27) || (bVar2 == 0x60)" (parenthesized_expression "(bVar2 == 0x27)" (( "(") (binary_expression "bVar2 == 0x27" (identifier "bVar2") (== "==") (number_literal "0x27")) () ")")) (|| "||") (parenthesized_expression "(bVar2 == 0x60)" (( "(") (binary_expression "bVar2 == 0x60" (identifier "bVar2") (== "==") (number_literal "0x60")) () ")"))) () ")")) (compound_statement "{\nLAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;\n    }" ({ "{") (labeled_statement "LAB_0013d8a5:\n      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;" (statement_identifier "LAB_0013d8a5") (: ":") (expression_statement "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;" (assignment_expression "*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2" (pointer_expression "*(uint *)(param_1 + 8)" (* "*") (cast_expression "(uint *)(param_1 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (binary_expression "*(uint *)(param_1 + 8) | 2" (pointer_expression "*(uint *)(param_1 + 8)" (* "*") (cast_expression "(uint *)(param_1 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (| "|") (number_literal "2"))) (; ";"))) (} "}"))))))) (if_statement "if (1 < locale_mb_cur_max) {\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }" (if "if") (parenthesized_expression "(1 < locale_mb_cur_max)" (( "(") (binary_expression "1 < locale_mb_cur_max" (number_literal "1") (< "<") (identifier "locale_mb_cur_max")) () ")")) (compound_statement "{\n      bVar2 = *__s;\n      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }\n      iVar6 = iVar6 + (int)uVar5;\n      goto LAB_0013d87f;\n    }" ({ "{") (expression_statement "bVar2 = *__s;" (assignment_expression "bVar2 = *__s" (identifier "bVar2") (= "=") (pointer_expression "*__s" (* "*") (identifier "__s"))) (; ";")) (if_statement "if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {\n        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }\n      else {\n        uVar5 = 1;\n      }" (if "if") (parenthesized_expression "((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0)" (( "(") (binary_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1)" (( "(") (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1" (binary_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f)" (pointer_expression "*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" (* "*") (cast_expression "(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(is_basic_table + (ulong)(bVar2 >> 5) * 4)" (( "(") (binary_expression "is_basic_table + (ulong)(bVar2 >> 5) * 4" (identifier "is_basic_table") (+ "+") (binary_expression "(ulong)(bVar2 >> 5) * 4" (call_expression "(ulong)(bVar2 >> 5)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar2 >> 5)" (( "(") (binary_expression "bVar2 >> 5" (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        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }\n        if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }\n      }" ({ "{") (if_statement "if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {\n          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }\n        else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }" (if "if") (parenthesized_expression "((locale_utf8locale == 0) || ((char)bVar2 < '\0'))" (( "(") (binary_expression "(locale_utf8locale == 0) || ((char)bVar2 < '\0')" (parenthesized_expression "(locale_utf8locale == 0)" (( "(") (binary_expression "locale_utf8locale == 0" (identifier "locale_utf8locale") (== "==") (number_literal "0")) () ")")) (|| "||") (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          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);\n          if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }\n        }" ({ "{") (expression_statement "uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);" (assignment_expression "uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" (identifier "uVar5") (= "=") (call_expression "mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" (identifier "mbrtowc") (argument_list "((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48)" (( "(") (cast_expression "(wchar_t *)0x0" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (, ",") (cast_expression "(char *)__s" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "__s")) (, ",") (binary_expression "(~uVar4 - 1) - uVar5" (parenthesized_expression "(~uVar4 - 1)" (( "(") (binary_expression "~uVar4 - 1" (unary_expression "~uVar4" (~ "~") (identifier "uVar4")) (- "-") (number_literal "1")) () ")")) (- "-") (identifier "uVar5")) (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")")))) (; ";")) (if_statement "if (0xfffffffffffffffd < uVar5) {\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }" (if "if") (parenthesized_expression "(0xfffffffffffffffd < uVar5)" (( "(") (binary_expression "0xfffffffffffffffd < uVar5" (number_literal "0xfffffffffffffffd") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n            iVar6 = iVar6 + 1;\n            local_48 = mVar3;\n            goto LAB_0013d87f;\n          }" ({ "{") (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_48 = mVar3;" (assignment_expression "local_48 = mVar3" (identifier "local_48") (= "=") (identifier "mVar3")) (; ";")) (goto_statement "goto LAB_0013d87f;" (goto "goto") (statement_identifier "LAB_0013d87f") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          uVar5 = (ulong)(bVar2 != 0);\n        }" (else "else") (compound_statement "{\n          uVar5 = (ulong)(bVar2 != 0);\n        }" ({ "{") (expression_statement "uVar5 = (ulong)(bVar2 != 0);" (assignment_expression "uVar5 = (ulong)(bVar2 != 0)" (identifier "uVar5") (= "=") (call_expression "(ulong)(bVar2 != 0)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar2 != 0)" (( "(") (binary_expression "bVar2 != 0" (identifier "bVar2") (!= "!=") (number_literal "0")) () ")")))) (; ";")) (} "}")))) (if_statement "if (uVar5 == 0) {\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          iVar6 = iVar6 + 1;\n          goto LAB_0013d87f;\n        }" ({ "{") (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (goto_statement "goto LAB_0013d87f;" (goto "goto") (statement_identifier "LAB_0013d87f") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        uVar5 = 1;\n      }" (else "else") (compound_statement "{\n        uVar5 = 1;\n      }" ({ "{") (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "iVar6 = iVar6 + (int)uVar5;" (assignment_expression "iVar6 = iVar6 + (int)uVar5" (identifier "iVar6") (= "=") (binary_expression "iVar6 + (int)uVar5" (identifier "iVar6") (+ "+") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")))) (; ";")) (goto_statement "goto LAB_0013d87f;" (goto "goto") (statement_identifier "LAB_0013d87f") (; ";")) (} "}"))) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_48 = mVar3;" (assignment_expression "local_48 = mVar3" (identifier "local_48") (= "=") (identifier "mVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}")))

type_1 * function_1(type_1 *w,char *var_8)

{
  type_2 *__s;
  char var_4;
  type_2 var_9;
  long var_6;
  type_3 mVar4;
  type_4 var_2;
  type_4 var_5;
  int var_14;
  char *var_3;
  long var_1;
  type_3 state;
  
  var_6 = *(long *)(var_1 + 0x28);
  state.__count = 0;
  state.__value = (type_5)0x0;
  var_2 = 0xffffffffffffffff;
  var_3 = var_8;
  do {
    if (var_2 == 0) break;
    var_2 = var_2 - 1;
    var_4 = *var_3;
    var_3 = var_3 + 1;
  } while (var_4 != '\0');
  var_14 = 0;
LAB_0013d87f:
  do {
    mVar4 = state;
    var_5 = (type_4)var_14;
    if (~var_2 - 1 <= var_5) {
      if (var_6 == *(long *)(var_1 + 0x28)) {
        return w;
      }
                    /* WARNING: Subroutine does not return */
      var_7();
    }
    __s = (type_2 *)(var_8 + var_5);
    var_9 = *__s;
    if (var_9 == 0x24) {
      w->flags = w->flags | 1;
    }
    else if ((char)var_9 < '%') {
      if (var_9 == 0x22) goto LAB_0013d8a5;
    }
    else if ((var_9 == 0x27) || (var_9 == 0x60)) {
LAB_0013d8a5:
      w->flags = w->flags | 2;
    }
    if (1 < var_10) {
      var_9 = *__s;
      if ((*(type_6 *)(var_11 + (type_4)(var_9 >> 5) * 4) >> (var_9 & 0x1f) & 1) == 0) {
        if ((var_12 == 0) || ((char)var_9 < '\0')) {
          var_5 = var_13((type_7 *)0x0,(char *)__s,(~var_2 - 1) - var_5,(type_3 *)&state);
          if (0xfffffffffffffffd < var_5) {
            var_14 = var_14 + 1;
            state = mVar4;
            goto LAB_0013d87f;
          }
        }
        else {
          var_5 = (type_4)(var_9 != 0);
        }
        if (var_5 == 0) {
          var_14 = var_14 + 1;
          goto LAB_0013d87f;
        }
      }
      else {
        var_5 = 1;
      }
      var_14 = var_14 + (int)var_5;
      goto LAB_0013d87f;
    }
    var_14 = var_14 + 1;
    state = mVar4;
  } while( true );
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal)) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (character)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) 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: (identifier) right: (number_literal))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (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 (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)) (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal))) right: (identifier)) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (true)))))))

long MASKED(long param_1,char *param_2)

{
  byte *__s;
  char cVar1;
  byte bVar2;
  mbstate_t mVar3;
  ulong uVar4;
  ulong uVar5;
  int iVar6;
  char *pcVar7;
  long in_FS_OFFSET;
  mbstate_t local_48;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  local_48.__count = 0;
  local_48.__value = (_union_27)0x0;
  uVar4 = 0xffffffffffffffff;
  pcVar7 = param_2;
  do {
    if (uVar4 == 0) break;
    uVar4 = uVar4 - 1;
    cVar1 = *pcVar7;
    pcVar7 = pcVar7 + 1;
  } while (cVar1 != '\0');
  iVar6 = 0;
LAB_0013d87f:
  do {
    mVar3 = local_48;
    uVar5 = (ulong)iVar6;
    if (~uVar4 - 1 <= uVar5) {
      if (local_40 == *(long *)(in_FS_OFFSET + 0x28)) {
        return param_1;
      }
                    /* WARNING: Subroutine does not return */
      __stack_chk_fail();
    }
    __s = (byte *)(param_2 + uVar5);
    bVar2 = *__s;
    if (bVar2 == 0x24) {
      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1;
    }
    else if ((char)bVar2 < '%') {
      if (bVar2 == 0x22) goto LAB_0013d8a5;
    }
    else if ((bVar2 == 0x27) || (bVar2 == 0x60)) {
LAB_0013d8a5:
      *(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 2;
    }
    if (1 < locale_mb_cur_max) {
      bVar2 = *__s;
      if ((*(uint *)(is_basic_table + (ulong)(bVar2 >> 5) * 4) >> (bVar2 & 0x1f) & 1) == 0) {
        if ((locale_utf8locale == 0) || ((char)bVar2 < '\0')) {
          uVar5 = mbrtowc((wchar_t *)0x0,(char *)__s,(~uVar4 - 1) - uVar5,&local_48);
          if (0xfffffffffffffffd < uVar5) {
            iVar6 = iVar6 + 1;
            local_48 = mVar3;
            goto LAB_0013d87f;
          }
        }
        else {
          uVar5 = (ulong)(bVar2 != 0);
        }
        if (uVar5 == 0) {
          iVar6 = iVar6 + 1;
          goto LAB_0013d87f;
        }
      }
      else {
        uVar5 = 1;
      }
      iVar6 = iVar6 + (int)uVar5;
      goto LAB_0013d87f;
    }
    iVar6 = iVar6 + 1;
    local_48 = mVar3;
  } while( true );
}

