
ptrdiff_t argmatch(char *arg,char **arglist,char *vallist,size_t valsize)

{
  char cVar1;
  bool bVar2;
  ptrdiff_t pVar3;
  int iVar4;
  ulong uVar5;
  ulong uVar6;
  char *pcVar7;
  long lVar8;
  char *__s2;
  byte bVar9;
  ptrdiff_t local_58;
  
  bVar9 = 0;
  uVar5 = 0xffffffffffffffff;
  pcVar7 = arg;
  do {
    if (uVar5 == 0) break;
    uVar5 = uVar5 - 1;
    cVar1 = *pcVar7;
    pcVar7 = pcVar7 + 1;
  } while (cVar1 != '\0');
  pcVar7 = *arglist;
  local_58 = -1;
  pVar3 = local_58;
  if (pcVar7 != (char *)0x0) {
    bVar2 = false;
    lVar8 = 0;
    __s2 = vallist;
    do {
      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);
      pVar3 = local_58;
      if (iVar4 == 0) {
        uVar6 = 0xffffffffffffffff;
        do {
          if (uVar6 == 0) break;
          uVar6 = uVar6 - 1;
          cVar1 = *pcVar7;
          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;
        } while (cVar1 != '\0');
        if (~uVar6 - 1 == ~uVar5 - 1) {
          return lVar8;
        }
        pVar3 = lVar8;
        if (local_58 != -1) {
          if (vallist == (char *)0x0) {
            pVar3 = local_58;
            bVar2 = true;
          }
          else {
            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);
            pVar3 = local_58;
            if (iVar4 != 0) {
              bVar2 = true;
            }
          }
        }
      }
      local_58 = pVar3;
      lVar8 = lVar8 + 1;
      pcVar7 = arglist[lVar8];
      __s2 = __s2 + valsize;
    } while (pcVar7 != (char *)0x0);
    pVar3 = -2;
    if (!bVar2) {
      pVar3 = local_58;
    }
  }
  local_58 = pVar3;
  return local_58;
}



long FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  int iVar4;
  ulong uVar5;
  ulong uVar6;
  char *pcVar7;
  long lVar8;
  void *__s2;
  byte bVar9;
  long local_58;
  
  bVar9 = 0;
  uVar5 = 0xffffffffffffffff;
  pcVar7 = param_1;
  do {
    if (uVar5 == 0) break;
    uVar5 = uVar5 - 1;
    cVar1 = *pcVar7;
    pcVar7 = pcVar7 + 1;
  } while (cVar1 != '\0');
  pcVar7 = (char *)*param_2;
  local_58 = -1;
  lVar8 = local_58;
  if (pcVar7 != (char *)0x0) {
    bVar2 = false;
    lVar8 = 0;
    __s2 = param_3;
    do {
      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);
      lVar3 = local_58;
      if (iVar4 == 0) {
        uVar6 = 0xffffffffffffffff;
        do {
          if (uVar6 == 0) break;
          uVar6 = uVar6 - 1;
          cVar1 = *pcVar7;
          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;
        } while (cVar1 != '\0');
        if (~uVar6 - 1 == ~uVar5 - 1) {
          return lVar8;
        }
        lVar3 = lVar8;
        if (local_58 != -1) {
          if (param_3 == (void *)0x0) {
            lVar3 = local_58;
            bVar2 = true;
          }
          else {
            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);
            lVar3 = local_58;
            if (iVar4 != 0) {
              bVar2 = true;
            }
          }
        }
      }
      local_58 = lVar3;
      lVar8 = lVar8 + 1;
      pcVar7 = (char *)param_2[lVar8];
      __s2 = (void *)((long)__s2 + param_4);
    } while (pcVar7 != (char *)0x0);
    lVar8 = -2;
    if (!bVar2) {
      lVar8 = local_58;
    }
  }
  local_58 = lVar8;
  return local_58;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x28
MOV R8,RDI
MOV R14,RCX
MOV RCX,-0x1
MOV EAX,0x0
SCASB.REPNE RDI
MOV RBX,qword ptr [RSI]
MOV qword ptr [RSP],-0x1
TEST RBX,RBX
JZ 0x00105aeb
NOT RCX
LEA R13,[RCX + -0x1]
MOV qword ptr [RSP + 0x18],RDX
MOV R15,RSI
MOV qword ptr [RSP + 0x8],R8
MOV R12,RDX
MOV byte ptr [RSP + 0x17],0x0
MOV EBP,0x0
JMP 0x00105a61
MOV qword ptr [RSP],RBP
JMP 0x00105aeb
MOV qword ptr [RSP],RBP
ADD RBP,0x1
MOV RBX,qword ptr [R15 + RBP*0x8]
ADD R12,R14
TEST RBX,RBX
JZ 0x00105ad6
MOV RDX,R13
MOV RSI,qword ptr [RSP + 0x8]
MOV RDI,RBX
CALL 0x00102070
TEST EAX,EAX
JNZ 0x00105a51
MOV RCX,-0x1
MOV RDI,RBX
SCASB.REPNE RDI
MOV RBX,RCX
NOT RBX
SUB RBX,0x1
CMP RBX,R13
JZ 0x00105a44
CMP qword ptr [RSP],-0x1
JZ 0x00105a4d
MOV RAX,qword ptr [RSP + 0x18]
TEST RAX,RAX
JZ 0x00105acc
MOV RDI,qword ptr [RSP]
IMUL RDI,R14
ADD RDI,RAX
MOV RDX,R14
MOV RSI,R12
CALL 0x00102200
TEST EAX,EAX
MOVZX EAX,byte ptr [RSP + 0x17]
MOV EDX,0x1
CMOVNZ EAX,EDX
MOV byte ptr [RSP + 0x17],AL
JMP 0x00105a51
MOV byte ptr [RSP + 0x17],0x1
JMP 0x00105a51
CMP byte ptr [RSP + 0x17],0x0
MOV RAX,-0x2
CMOVZ RAX,qword ptr [RSP]
MOV qword ptr [RSP],RAX
MOV RAX,qword ptr [RSP]
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "long FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)\n\n{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}\n\n" (function_definition "long FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)\n\n{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)" identifier (parameter_list "(char *param_1,long *param_2,void *param_3,size_t param_4)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "void *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "size_t param_4" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar7 = param_1;" (assignment_expression "pcVar7 = param_1" identifier = identifier) ;) (do_statement "do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" do (compound_statement "{\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 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 = *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 "pcVar7 = (char *)*param_2;" (assignment_expression "pcVar7 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "local_58 = -1;" (assignment_expression "local_58 = -1" identifier = number_literal) ;) (expression_statement "lVar8 = local_58;" (assignment_expression "lVar8 = local_58" identifier = identifier) ;) (if_statement "if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }" if (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "__s2 = param_3;" (assignment_expression "__s2 = param_3" identifier = identifier) ;) (do_statement "do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);" do (compound_statement "{\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    }" { (expression_statement "iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);" (assignment_expression "iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1)" identifier = (call_expression "strncmp(pcVar7,param_1,~uVar5 - 1)" identifier (argument_list "(pcVar7,param_1,~uVar5 - 1)" ( identifier , identifier , (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal) )))) ;) (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" identifier = identifier) ;) (if_statement "if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" { (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" identifier = number_literal) ;) (do_statement "do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');" do (compound_statement "{\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        }" { (if_statement "if (uVar6 == 0) break;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" identifier = (pointer_expression "*pcVar7" * identifier)) ;) (expression_statement "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1" identifier = (binary_expression "pcVar7 + (ulong)bVar9 * -2 + 1" (binary_expression "pcVar7 + (ulong)bVar9 * -2" identifier + (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (if_statement "if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }" if (parenthesized_expression "(~uVar6 - 1 == ~uVar5 - 1)" ( (binary_expression "~uVar6 - 1 == ~uVar5 - 1" (binary_expression "~uVar6 - 1" (unary_expression "~uVar6" ~ identifier) - number_literal) == (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal)) )) (compound_statement "{\n          return lVar8;\n        }" { (return_statement "return lVar8;" return identifier ;) })) (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) (if_statement "if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" if (parenthesized_expression "(local_58 != -1)" ( (binary_expression "local_58 != -1" identifier != number_literal) )) (compound_statement "{\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" { (if_statement "if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" if (parenthesized_expression "(param_3 == (void *)0x0)" ( (binary_expression "param_3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            lVar3 = local_58;\n            bVar2 = true;\n          }" { (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" identifier = identifier) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) }) (else_clause "else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" else (compound_statement "{\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" { (expression_statement "iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);" (assignment_expression "iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" identifier = (call_expression "memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" identifier (argument_list "((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" ( (cast_expression "(void *)(local_58 * param_4 + (long)param_3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 * param_4 + (long)param_3)" ( (binary_expression "local_58 * param_4 + (long)param_3" (binary_expression "local_58 * param_4" identifier * identifier) + (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) , identifier , identifier )))) ;) (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" identifier = identifier) ;) (if_statement "if (iVar4 != 0) {\n              bVar2 = true;\n            }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n              bVar2 = true;\n            }" { (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) }))) })) })) (expression_statement "local_58 = lVar3;" (assignment_expression "local_58 = lVar3" identifier = identifier) ;) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) (expression_statement "pcVar7 = (char *)param_2[lVar8];" (assignment_expression "pcVar7 = (char *)param_2[lVar8]" identifier = (cast_expression "(char *)param_2[lVar8]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[lVar8]" identifier [ identifier ]))) ;) (expression_statement "__s2 = (void *)((long)__s2 + param_4);" (assignment_expression "__s2 = (void *)((long)__s2 + param_4)" identifier = (cast_expression "(void *)((long)__s2 + param_4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__s2 + param_4)" ( (binary_expression "(long)__s2 + param_4" (cast_expression "(long)__s2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) }) while (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "lVar8 = -2;" (assignment_expression "lVar8 = -2" identifier = number_literal) ;) (if_statement "if (!bVar2) {\n      lVar8 = local_58;\n    }" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (compound_statement "{\n      lVar8 = local_58;\n    }" { (expression_statement "lVar8 = local_58;" (assignment_expression "lVar8 = local_58" identifier = identifier) ;) })) })) (expression_statement "local_58 = lVar8;" (assignment_expression "local_58 = lVar8" identifier = identifier) ;) (return_statement "return local_58;" return identifier ;) })))
(translation_unit "ptrdiff_t argmatch(char *arg,char **arglist,char *vallist,size_t valsize)\n\n{\n  char cVar1;\n  bool bVar2;\n  ptrdiff_t pVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  char *__s2;\n  byte bVar9;\n  ptrdiff_t local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = arg;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = *arglist;\n  local_58 = -1;\n  pVar3 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = vallist;\n    do {\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    } while (pcVar7 != (char *)0x0);\n    pVar3 = -2;\n    if (!bVar2) {\n      pVar3 = local_58;\n    }\n  }\n  local_58 = pVar3;\n  return local_58;\n}\n\n" (function_definition "ptrdiff_t argmatch(char *arg,char **arglist,char *vallist,size_t valsize)\n\n{\n  char cVar1;\n  bool bVar2;\n  ptrdiff_t pVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  char *__s2;\n  byte bVar9;\n  ptrdiff_t local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = arg;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = *arglist;\n  local_58 = -1;\n  pVar3 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = vallist;\n    do {\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    } while (pcVar7 != (char *)0x0);\n    pVar3 = -2;\n    if (!bVar2) {\n      pVar3 = local_58;\n    }\n  }\n  local_58 = pVar3;\n  return local_58;\n}" primitive_type (function_declarator "argmatch(char *arg,char **arglist,char *vallist,size_t valsize)" identifier (parameter_list "(char *arg,char **arglist,char *vallist,size_t valsize)" ( (parameter_declaration "char *arg" primitive_type (pointer_declarator "*arg" * identifier)) , (parameter_declaration "char **arglist" primitive_type (pointer_declarator "**arglist" * (pointer_declarator "*arglist" * identifier))) , (parameter_declaration "char *vallist" primitive_type (pointer_declarator "*vallist" * identifier)) , (parameter_declaration "size_t valsize" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  bool bVar2;\n  ptrdiff_t pVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  char *__s2;\n  byte bVar9;\n  ptrdiff_t local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = arg;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = *arglist;\n  local_58 = -1;\n  pVar3 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = vallist;\n    do {\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    } while (pcVar7 != (char *)0x0);\n    pVar3 = -2;\n    if (!bVar2) {\n      pVar3 = local_58;\n    }\n  }\n  local_58 = pVar3;\n  return local_58;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "ptrdiff_t pVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "ptrdiff_t local_58;" primitive_type identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar7 = arg;" (assignment_expression "pcVar7 = arg" identifier = identifier) ;) (do_statement "do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" do (compound_statement "{\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 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 = *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 "pcVar7 = *arglist;" (assignment_expression "pcVar7 = *arglist" identifier = (pointer_expression "*arglist" * identifier)) ;) (expression_statement "local_58 = -1;" (assignment_expression "local_58 = -1" identifier = number_literal) ;) (expression_statement "pVar3 = local_58;" (assignment_expression "pVar3 = local_58" identifier = identifier) ;) (if_statement "if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = vallist;\n    do {\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    } while (pcVar7 != (char *)0x0);\n    pVar3 = -2;\n    if (!bVar2) {\n      pVar3 = local_58;\n    }\n  }" if (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = vallist;\n    do {\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    } while (pcVar7 != (char *)0x0);\n    pVar3 = -2;\n    if (!bVar2) {\n      pVar3 = local_58;\n    }\n  }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "__s2 = vallist;" (assignment_expression "__s2 = vallist" identifier = identifier) ;) (do_statement "do {\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    } while (pcVar7 != (char *)0x0);" do (compound_statement "{\n      iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);\n      pVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = pVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = arglist[lVar8];\n      __s2 = __s2 + valsize;\n    }" { (expression_statement "iVar4 = strncmp(pcVar7,arg,~uVar5 - 1);" (assignment_expression "iVar4 = strncmp(pcVar7,arg,~uVar5 - 1)" identifier = (call_expression "strncmp(pcVar7,arg,~uVar5 - 1)" identifier (argument_list "(pcVar7,arg,~uVar5 - 1)" ( identifier , identifier , (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal) )))) ;) (expression_statement "pVar3 = local_58;" (assignment_expression "pVar3 = local_58" identifier = identifier) ;) (if_statement "if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        pVar3 = lVar8;\n        if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" { (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" identifier = number_literal) ;) (do_statement "do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');" do (compound_statement "{\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        }" { (if_statement "if (uVar6 == 0) break;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" identifier = (pointer_expression "*pcVar7" * identifier)) ;) (expression_statement "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1" identifier = (binary_expression "pcVar7 + (ulong)bVar9 * -2 + 1" (binary_expression "pcVar7 + (ulong)bVar9 * -2" identifier + (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (if_statement "if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }" if (parenthesized_expression "(~uVar6 - 1 == ~uVar5 - 1)" ( (binary_expression "~uVar6 - 1 == ~uVar5 - 1" (binary_expression "~uVar6 - 1" (unary_expression "~uVar6" ~ identifier) - number_literal) == (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal)) )) (compound_statement "{\n          return lVar8;\n        }" { (return_statement "return lVar8;" return identifier ;) })) (expression_statement "pVar3 = lVar8;" (assignment_expression "pVar3 = lVar8" identifier = identifier) ;) (if_statement "if (local_58 != -1) {\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" if (parenthesized_expression "(local_58 != -1)" ( (binary_expression "local_58 != -1" identifier != number_literal) )) (compound_statement "{\n          if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" { (if_statement "if (vallist == (char *)0x0) {\n            pVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" if (parenthesized_expression "(vallist == (char *)0x0)" ( (binary_expression "vallist == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            pVar3 = local_58;\n            bVar2 = true;\n          }" { (expression_statement "pVar3 = local_58;" (assignment_expression "pVar3 = local_58" identifier = identifier) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) }) (else_clause "else {\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" else (compound_statement "{\n            iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);\n            pVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" { (expression_statement "iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize);" (assignment_expression "iVar4 = memcmp(vallist + local_58 * valsize,__s2,valsize)" identifier = (call_expression "memcmp(vallist + local_58 * valsize,__s2,valsize)" identifier (argument_list "(vallist + local_58 * valsize,__s2,valsize)" ( (binary_expression "vallist + local_58 * valsize" identifier + (binary_expression "local_58 * valsize" identifier * identifier)) , identifier , identifier )))) ;) (expression_statement "pVar3 = local_58;" (assignment_expression "pVar3 = local_58" identifier = identifier) ;) (if_statement "if (iVar4 != 0) {\n              bVar2 = true;\n            }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n              bVar2 = true;\n            }" { (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) }))) })) })) (expression_statement "local_58 = pVar3;" (assignment_expression "local_58 = pVar3" identifier = identifier) ;) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) (expression_statement "pcVar7 = arglist[lVar8];" (assignment_expression "pcVar7 = arglist[lVar8]" identifier = (subscript_expression "arglist[lVar8]" identifier [ identifier ])) ;) (expression_statement "__s2 = __s2 + valsize;" (assignment_expression "__s2 = __s2 + valsize" identifier = (binary_expression "__s2 + valsize" identifier + identifier)) ;) }) while (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "pVar3 = -2;" (assignment_expression "pVar3 = -2" identifier = number_literal) ;) (if_statement "if (!bVar2) {\n      pVar3 = local_58;\n    }" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (compound_statement "{\n      pVar3 = local_58;\n    }" { (expression_statement "pVar3 = local_58;" (assignment_expression "pVar3 = local_58" identifier = identifier) ;) })) })) (expression_statement "local_58 = pVar3;" (assignment_expression "local_58 = pVar3" identifier = identifier) ;) (return_statement "return local_58;" return identifier ;) })))
(translation_unit "long FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)\n\n{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}\n\n" (function_definition "long FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)\n\n{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)" identifier (parameter_list "(char *param_1,long *param_2,void *param_3,size_t param_4)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "void *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "size_t param_4" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar7 = param_1;" (assignment_expression "pcVar7 = param_1" identifier = identifier) ;) (do_statement "do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" do (compound_statement "{\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 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 = *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 "pcVar7 = (char *)*param_2;" (assignment_expression "pcVar7 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "local_58 = -1;" (assignment_expression "local_58 = -1" identifier = number_literal) ;) (expression_statement "lVar8 = local_58;" (assignment_expression "lVar8 = local_58" identifier = identifier) ;) (if_statement "if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }" if (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "__s2 = param_3;" (assignment_expression "__s2 = param_3" identifier = identifier) ;) (do_statement "do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);" do (compound_statement "{\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    }" { (expression_statement "iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);" (assignment_expression "iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1)" identifier = (call_expression "strncmp(pcVar7,param_1,~uVar5 - 1)" identifier (argument_list "(pcVar7,param_1,~uVar5 - 1)" ( identifier , identifier , (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal) )))) ;) (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" identifier = identifier) ;) (if_statement "if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" { (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" identifier = number_literal) ;) (do_statement "do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');" do (compound_statement "{\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        }" { (if_statement "if (uVar6 == 0) break;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" identifier = (pointer_expression "*pcVar7" * identifier)) ;) (expression_statement "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1" identifier = (binary_expression "pcVar7 + (ulong)bVar9 * -2 + 1" (binary_expression "pcVar7 + (ulong)bVar9 * -2" identifier + (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (if_statement "if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }" if (parenthesized_expression "(~uVar6 - 1 == ~uVar5 - 1)" ( (binary_expression "~uVar6 - 1 == ~uVar5 - 1" (binary_expression "~uVar6 - 1" (unary_expression "~uVar6" ~ identifier) - number_literal) == (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" ~ identifier) - number_literal)) )) (compound_statement "{\n          return lVar8;\n        }" { (return_statement "return lVar8;" return identifier ;) })) (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) (if_statement "if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" if (parenthesized_expression "(local_58 != -1)" ( (binary_expression "local_58 != -1" identifier != number_literal) )) (compound_statement "{\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" { (if_statement "if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" if (parenthesized_expression "(param_3 == (void *)0x0)" ( (binary_expression "param_3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            lVar3 = local_58;\n            bVar2 = true;\n          }" { (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" identifier = identifier) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) }) (else_clause "else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" else (compound_statement "{\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" { (expression_statement "iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);" (assignment_expression "iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" identifier = (call_expression "memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" identifier (argument_list "((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" ( (cast_expression "(void *)(local_58 * param_4 + (long)param_3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 * param_4 + (long)param_3)" ( (binary_expression "local_58 * param_4 + (long)param_3" (binary_expression "local_58 * param_4" identifier * identifier) + (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) , identifier , identifier )))) ;) (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" identifier = identifier) ;) (if_statement "if (iVar4 != 0) {\n              bVar2 = true;\n            }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n              bVar2 = true;\n            }" { (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) }))) })) })) (expression_statement "local_58 = lVar3;" (assignment_expression "local_58 = lVar3" identifier = identifier) ;) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) (expression_statement "pcVar7 = (char *)param_2[lVar8];" (assignment_expression "pcVar7 = (char *)param_2[lVar8]" identifier = (cast_expression "(char *)param_2[lVar8]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[lVar8]" identifier [ identifier ]))) ;) (expression_statement "__s2 = (void *)((long)__s2 + param_4);" (assignment_expression "__s2 = (void *)((long)__s2 + param_4)" identifier = (cast_expression "(void *)((long)__s2 + param_4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__s2 + param_4)" ( (binary_expression "(long)__s2 + param_4" (cast_expression "(long)__s2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) }) while (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "lVar8 = -2;" (assignment_expression "lVar8 = -2" identifier = number_literal) ;) (if_statement "if (!bVar2) {\n      lVar8 = local_58;\n    }" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (compound_statement "{\n      lVar8 = local_58;\n    }" { (expression_statement "lVar8 = local_58;" (assignment_expression "lVar8 = local_58" identifier = identifier) ;) })) })) (expression_statement "local_58 = lVar8;" (assignment_expression "local_58 = lVar8" identifier = identifier) ;) (return_statement "return local_58;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = 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 = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (unary_expression ~ IDENT) - LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (unary_expression ~ IDENT) - LIT) == (binary_expression (unary_expression ~ IDENT) - LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) })) }))) })) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ IDENT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (return_statement return IDENT ;) })))
(function_definition "long FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)\n\n{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_001059eb(char *param_1,long *param_2,void *param_3,size_t param_4)" (identifier "FUN_001059eb") (parameter_list "(char *param_1,long *param_2,void *param_3,size_t param_4)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "void *param_3" (primitive_type "void") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "size_t param_4" (primitive_type "size_t") (identifier "param_4")) () ")"))) (compound_statement "{\n  char cVar1;\n  bool bVar2;\n  long lVar3;\n  int iVar4;\n  ulong uVar5;\n  ulong uVar6;\n  char *pcVar7;\n  long lVar8;\n  void *__s2;\n  byte bVar9;\n  long local_58;\n  \n  bVar9 = 0;\n  uVar5 = 0xffffffffffffffff;\n  pcVar7 = param_1;\n  do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');\n  pcVar7 = (char *)*param_2;\n  local_58 = -1;\n  lVar8 = local_58;\n  if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }\n  local_58 = lVar8;\n  return local_58;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "char *pcVar7;" (primitive_type "char") (pointer_declarator "*pcVar7" (* "*") (identifier "pcVar7")) (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "void *__s2;" (primitive_type "void") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "byte bVar9;" (type_identifier "byte") (identifier "bVar9") (; ";")) (declaration "long local_58;" (sized_type_specifier "long" (long "long")) (identifier "local_58") (; ";")) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" (identifier "bVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = 0xffffffffffffffff;" (assignment_expression "uVar5 = 0xffffffffffffffff" (identifier "uVar5") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (expression_statement "pcVar7 = param_1;" (assignment_expression "pcVar7 = param_1" (identifier "pcVar7") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  } while (cVar1 != '\0');" (do "do") (compound_statement "{\n    if (uVar5 == 0) break;\n    uVar5 = uVar5 - 1;\n    cVar1 = *pcVar7;\n    pcVar7 = pcVar7 + 1;\n  }" ({ "{") (if_statement "if (uVar5 == 0) break;" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (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 "pcVar7 = (char *)*param_2;" (assignment_expression "pcVar7 = (char *)*param_2" (identifier "pcVar7") (= "=") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "local_58 = -1;" (assignment_expression "local_58 = -1" (identifier "local_58") (= "=") (number_literal "-1")) (; ";")) (expression_statement "lVar8 = local_58;" (assignment_expression "lVar8 = local_58" (identifier "lVar8") (= "=") (identifier "local_58")) (; ";")) (if_statement "if (pcVar7 != (char *)0x0) {\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }" (if "if") (parenthesized_expression "(pcVar7 != (char *)0x0)" (( "(") (binary_expression "pcVar7 != (char *)0x0" (identifier "pcVar7") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    bVar2 = false;\n    lVar8 = 0;\n    __s2 = param_3;\n    do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);\n    lVar8 = -2;\n    if (!bVar2) {\n      lVar8 = local_58;\n    }\n  }" ({ "{") (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" (identifier "lVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "__s2 = param_3;" (assignment_expression "__s2 = param_3" (identifier "__s2") (= "=") (identifier "param_3")) (; ";")) (do_statement "do {\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    } while (pcVar7 != (char *)0x0);" (do "do") (compound_statement "{\n      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);\n      lVar3 = local_58;\n      if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }\n      local_58 = lVar3;\n      lVar8 = lVar8 + 1;\n      pcVar7 = (char *)param_2[lVar8];\n      __s2 = (void *)((long)__s2 + param_4);\n    }" ({ "{") (expression_statement "iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);" (assignment_expression "iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1)" (identifier "iVar4") (= "=") (call_expression "strncmp(pcVar7,param_1,~uVar5 - 1)" (identifier "strncmp") (argument_list "(pcVar7,param_1,~uVar5 - 1)" (( "(") (identifier "pcVar7") (, ",") (identifier "param_1") (, ",") (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" (~ "~") (identifier "uVar5")) (- "-") (number_literal "1")) () ")")))) (; ";")) (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" (identifier "lVar3") (= "=") (identifier "local_58")) (; ";")) (if_statement "if (iVar4 == 0) {\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar6 = 0xffffffffffffffff;\n        do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');\n        if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }\n        lVar3 = lVar8;\n        if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }\n      }" ({ "{") (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" (identifier "uVar6") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (do_statement "do {\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        } while (cVar1 != '\0');" (do "do") (compound_statement "{\n          if (uVar6 == 0) break;\n          uVar6 = uVar6 - 1;\n          cVar1 = *pcVar7;\n          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;\n        }" ({ "{") (if_statement "if (uVar6 == 0) break;" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" (identifier "uVar6") (= "=") (binary_expression "uVar6 - 1" (identifier "uVar6") (- "-") (number_literal "1"))) (; ";")) (expression_statement "cVar1 = *pcVar7;" (assignment_expression "cVar1 = *pcVar7" (identifier "cVar1") (= "=") (pointer_expression "*pcVar7" (* "*") (identifier "pcVar7"))) (; ";")) (expression_statement "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1" (identifier "pcVar7") (= "=") (binary_expression "pcVar7 + (ulong)bVar9 * -2 + 1" (binary_expression "pcVar7 + (ulong)bVar9 * -2" (identifier "pcVar7") (+ "+") (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar9")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (; ";")) (if_statement "if (~uVar6 - 1 == ~uVar5 - 1) {\n          return lVar8;\n        }" (if "if") (parenthesized_expression "(~uVar6 - 1 == ~uVar5 - 1)" (( "(") (binary_expression "~uVar6 - 1 == ~uVar5 - 1" (binary_expression "~uVar6 - 1" (unary_expression "~uVar6" (~ "~") (identifier "uVar6")) (- "-") (number_literal "1")) (== "==") (binary_expression "~uVar5 - 1" (unary_expression "~uVar5" (~ "~") (identifier "uVar5")) (- "-") (number_literal "1"))) () ")")) (compound_statement "{\n          return lVar8;\n        }" ({ "{") (return_statement "return lVar8;" (return "return") (identifier "lVar8") (; ";")) (} "}"))) (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" (identifier "lVar3") (= "=") (identifier "lVar8")) (; ";")) (if_statement "if (local_58 != -1) {\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" (if "if") (parenthesized_expression "(local_58 != -1)" (( "(") (binary_expression "local_58 != -1" (identifier "local_58") (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n          if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }\n        }" ({ "{") (if_statement "if (param_3 == (void *)0x0) {\n            lVar3 = local_58;\n            bVar2 = true;\n          }\n          else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" (if "if") (parenthesized_expression "(param_3 == (void *)0x0)" (( "(") (binary_expression "param_3 == (void *)0x0" (identifier "param_3") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            lVar3 = local_58;\n            bVar2 = true;\n          }" ({ "{") (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" (identifier "lVar3") (= "=") (identifier "local_58")) (; ";")) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" (identifier "bVar2") (= "=") (true "true")) (; ";")) (} "}")) (else_clause "else {\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" (else "else") (compound_statement "{\n            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);\n            lVar3 = local_58;\n            if (iVar4 != 0) {\n              bVar2 = true;\n            }\n          }" ({ "{") (expression_statement "iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);" (assignment_expression "iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" (identifier "iVar4") (= "=") (call_expression "memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" (identifier "memcmp") (argument_list "((void *)(local_58 * param_4 + (long)param_3),__s2,param_4)" (( "(") (cast_expression "(void *)(local_58 * param_4 + (long)param_3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 * param_4 + (long)param_3)" (( "(") (binary_expression "local_58 * param_4 + (long)param_3" (binary_expression "local_58 * param_4" (identifier "local_58") (* "*") (identifier "param_4")) (+ "+") (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3"))) () ")"))) (, ",") (identifier "__s2") (, ",") (identifier "param_4") () ")")))) (; ";")) (expression_statement "lVar3 = local_58;" (assignment_expression "lVar3 = local_58" (identifier "lVar3") (= "=") (identifier "local_58")) (; ";")) (if_statement "if (iVar4 != 0) {\n              bVar2 = true;\n            }" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              bVar2 = true;\n            }" ({ "{") (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" (identifier "bVar2") (= "=") (true "true")) (; ";")) (} "}"))) (} "}")))) (} "}"))) (} "}"))) (expression_statement "local_58 = lVar3;" (assignment_expression "local_58 = lVar3" (identifier "local_58") (= "=") (identifier "lVar3")) (; ";")) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" (identifier "lVar8") (= "=") (binary_expression "lVar8 + 1" (identifier "lVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pcVar7 = (char *)param_2[lVar8];" (assignment_expression "pcVar7 = (char *)param_2[lVar8]" (identifier "pcVar7") (= "=") (cast_expression "(char *)param_2[lVar8]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[lVar8]" (identifier "param_2") ([ "[") (identifier "lVar8") (] "]")))) (; ";")) (expression_statement "__s2 = (void *)((long)__s2 + param_4);" (assignment_expression "__s2 = (void *)((long)__s2 + param_4)" (identifier "__s2") (= "=") (cast_expression "(void *)((long)__s2 + param_4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__s2 + param_4)" (( "(") (binary_expression "(long)__s2 + param_4" (cast_expression "(long)__s2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__s2")) (+ "+") (identifier "param_4")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pcVar7 != (char *)0x0)" (( "(") (binary_expression "pcVar7 != (char *)0x0" (identifier "pcVar7") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (expression_statement "lVar8 = -2;" (assignment_expression "lVar8 = -2" (identifier "lVar8") (= "=") (number_literal "-2")) (; ";")) (if_statement "if (!bVar2) {\n      lVar8 = local_58;\n    }" (if "if") (parenthesized_expression "(!bVar2)" (( "(") (unary_expression "!bVar2" (! "!") (identifier "bVar2")) () ")")) (compound_statement "{\n      lVar8 = local_58;\n    }" ({ "{") (expression_statement "lVar8 = local_58;" (assignment_expression "lVar8 = local_58" (identifier "lVar8") (= "=") (identifier "local_58")) (; ";")) (} "}"))) (} "}"))) (expression_statement "local_58 = lVar8;" (assignment_expression "local_58 = lVar8" (identifier "local_58") (= "=") (identifier "lVar8")) (; ";")) (return_statement "return local_58;" (return "return") (identifier "local_58") (; ";")) (} "}")))

ptrdiff_t function_1(char *arg,char **arglist,char *var_8,size_t var_10)

{
  char var_3;
  bool bVar2;
  ptrdiff_t pVar3;
  int var_5;
  type_1 var_1;
  type_1 var_6;
  char *var_2;
  long var_11;
  char *var_12;
  type_2 bVar9;
  ptrdiff_t var_7;
  
  bVar9 = 0;
  var_1 = 0xffffffffffffffff;
  var_2 = arg;
  do {
    if (var_1 == 0) break;
    var_1 = var_1 - 1;
    var_3 = *var_2;
    var_2 = var_2 + 1;
  } while (var_3 != '\0');
  var_2 = *arglist;
  var_7 = -1;
  pVar3 = var_7;
  if (var_2 != (char *)0x0) {
    bVar2 = false;
    var_11 = 0;
    var_12 = var_8;
    do {
      var_5 = var_4(var_2,arg,~var_1 - 1);
      pVar3 = var_7;
      if (var_5 == 0) {
        var_6 = 0xffffffffffffffff;
        do {
          if (var_6 == 0) break;
          var_6 = var_6 - 1;
          var_3 = *var_2;
          var_2 = var_2 + (type_1)bVar9 * -2 + 1;
        } while (var_3 != '\0');
        if (~var_6 - 1 == ~var_1 - 1) {
          return var_11;
        }
        pVar3 = var_11;
        if (var_7 != -1) {
          if (var_8 == (char *)0x0) {
            pVar3 = var_7;
            bVar2 = true;
          }
          else {
            var_5 = var_9(var_8 + var_7 * var_10,var_12,var_10);
            pVar3 = var_7;
            if (var_5 != 0) {
              bVar2 = true;
            }
          }
        }
      }
      var_7 = pVar3;
      var_11 = var_11 + 1;
      var_2 = arglist[var_11];
      var_12 = var_12 + var_10;
    } while (var_2 != (char *)0x0);
    pVar3 = -2;
    if (!bVar2) {
      pVar3 = var_7;
    }
  }
  var_7 = pVar3;
  return var_7;
}


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

long MASKED(char *param_1,long *param_2,void *param_3,size_t param_4)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  int iVar4;
  ulong uVar5;
  ulong uVar6;
  char *pcVar7;
  long lVar8;
  void *__s2;
  byte bVar9;
  long local_58;
  
  bVar9 = 0;
  uVar5 = 0xffffffffffffffff;
  pcVar7 = param_1;
  do {
    if (uVar5 == 0) break;
    uVar5 = uVar5 - 1;
    cVar1 = *pcVar7;
    pcVar7 = pcVar7 + 1;
  } while (cVar1 != '\0');
  pcVar7 = (char *)*param_2;
  local_58 = -1;
  lVar8 = local_58;
  if (pcVar7 != (char *)0x0) {
    bVar2 = false;
    lVar8 = 0;
    __s2 = param_3;
    do {
      iVar4 = strncmp(pcVar7,param_1,~uVar5 - 1);
      lVar3 = local_58;
      if (iVar4 == 0) {
        uVar6 = 0xffffffffffffffff;
        do {
          if (uVar6 == 0) break;
          uVar6 = uVar6 - 1;
          cVar1 = *pcVar7;
          pcVar7 = pcVar7 + (ulong)bVar9 * -2 + 1;
        } while (cVar1 != '\0');
        if (~uVar6 - 1 == ~uVar5 - 1) {
          return lVar8;
        }
        lVar3 = lVar8;
        if (local_58 != -1) {
          if (param_3 == (void *)0x0) {
            lVar3 = local_58;
            bVar2 = true;
          }
          else {
            iVar4 = memcmp((void *)(local_58 * param_4 + (long)param_3),__s2,param_4);
            lVar3 = local_58;
            if (iVar4 != 0) {
              bVar2 = true;
            }
          }
        }
      }
      local_58 = lVar3;
      lVar8 = lVar8 + 1;
      pcVar7 = (char *)param_2[lVar8];
      __s2 = (void *)((long)__s2 + param_4);
    } while (pcVar7 != (char *)0x0);
    lVar8 = -2;
    if (!bVar2) {
      lVar8 = local_58;
    }
  }
  local_58 = lVar8;
  return local_58;
}

