
uchar * unw_decode_x2(uchar *dp,uint code,void *arg)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  byte *pbVar5;
  ulong uVar7;
  char abregname [20];
  char regname [20];
  byte *pbVar6;
  
  pbVar5 = dp + 3;
  bVar1 = *dp;
  bVar2 = dp[1];
  uVar7 = (ulong)(dp[2] & 0x7f);
  if ((char)dp[2] < '\0') {
    bVar4 = 0;
    pbVar6 = pbVar5;
    do {
      pbVar5 = pbVar6 + 1;
      bVar3 = *pbVar6;
      bVar4 = bVar4 + 7;
      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);
      pbVar6 = pbVar5;
    } while ((char)bVar3 < '\0');
  }
  if ((-1 < (char)bVar1) && (bVar2 == 0)) {
    unw_print_abreg(regname,bVar1 & 0x7f);
    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);
    return pbVar5;
  }
  unw_print_abreg(abregname,bVar1 & 0x7f);
  unw_print_xyreg(regname,(uint)(bVar1 >> 7),(uint)bVar2);
  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname);
  return pbVar5;
}



byte * FUN_0013c270(byte *param_1)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  byte *pbVar5;
  ulong uVar7;
  undefined1 auStack_68 [32];
  undefined1 local_48 [32];
  byte *pbVar6;
  
  pbVar5 = param_1 + 3;
  bVar1 = *param_1;
  bVar2 = param_1[1];
  uVar7 = (ulong)(param_1[2] & 0x7f);
  if ((char)param_1[2] < '\0') {
    bVar4 = 0;
    pbVar6 = pbVar5;
    do {
      pbVar5 = pbVar6 + 1;
      bVar3 = *pbVar6;
      bVar4 = bVar4 + 7;
      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);
      pbVar6 = pbVar5;
    } while ((char)bVar3 < '\0');
  }
  if ((-1 < (char)bVar1) && (bVar2 == 0)) {
    FUN_0013bae0(local_48,bVar1 & 0x7f);
    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);
    return pbVar5;
  }
  FUN_0013bae0(auStack_68,bVar1 & 0x7f);
  FUN_0013c200(local_48,bVar1 >> 7,bVar2);
  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);
  return pbVar5;
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
LEA RBX,[RDI + 0x3]
SUB RSP,0x40
MOVZX EAX,byte ptr [RDI + 0x2]
MOVZX R12D,byte ptr [RDI]
MOVZX R13D,byte ptr [RDI + 0x1]
MOV RBP,RAX
AND EBP,0x7f
TEST AL,AL
JNS 0x0013c2bc
XOR ECX,ECX
NOP dword ptr [RAX]
ADD RBX,0x1
MOVZX ESI,byte ptr [RBX + -0x1]
ADD ECX,0x7
MOV RAX,RSI
AND EAX,0x7f
SHL RAX,CL
OR RBP,RAX
TEST SIL,SIL
JS 0x0013c2a0
MOV ESI,R12D
AND ESI,0x7f
TEST R12B,R12B
JS 0x0013c308
TEST R13B,R13B
JNZ 0x0013c308
LEA R12,[RSP + 0x20]
MOV RDI,R12
CALL 0x0013bae0
MOV RCX,R12
MOV RDX,RBP
XOR EAX,EAX
LEA RSI,[0x1647db]
LEA RDI,[0x17c922]
CALL 0x00107190
ADD RSP,0x40
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV R14,RSP
SHR R12B,0x7
MOV RDI,R14
CALL 0x0013bae0
MOVZX ESI,R12B
LEA R12,[RSP + 0x20]
MOVZX EDX,R13B
MOV RDI,R12
CALL 0x0013c200
MOV R8,R12
MOV RCX,R14
MOV RDX,RBP
LEA RSI,[0x1647db]
LEA RDI,[0x17cc20]
XOR EAX,EAX
CALL 0x00107190
ADD RSP,0x40
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
(translation_unit "byte * FUN_0013c270(byte *param_1)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}\n\n" (function_definition "byte * FUN_0013c270(byte *param_1)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}" type_identifier (pointer_declarator "* FUN_0013c270(byte *param_1)" * (function_declarator "FUN_0013c270(byte *param_1)" identifier (parameter_list "(byte *param_1)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined1 auStack_68 [32];" type_identifier (array_declarator "auStack_68 [32]" identifier [ number_literal ]) ;) (declaration "undefined1 local_48 [32];" type_identifier (array_declarator "local_48 [32]" identifier [ number_literal ]) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (expression_statement "pbVar5 = param_1 + 3;" (assignment_expression "pbVar5 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ;) (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar2 = param_1[1];" (assignment_expression "bVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)(param_1[2] & 0x7f);" (assignment_expression "uVar7 = (ulong)(param_1[2] & 0x7f)" identifier = (call_expression "(ulong)(param_1[2] & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] & 0x7f)" ( (binary_expression "param_1[2] & 0x7f" (subscript_expression "param_1[2]" identifier [ number_literal ]) & number_literal) )))) ;) (if_statement "if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" if (parenthesized_expression "((char)param_1[2] < '\0')" ( (binary_expression "(char)param_1[2] < '\0'" (cast_expression "(char)param_1[2]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" { (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" identifier = identifier) ;) (do_statement "do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');" do (compound_statement "{\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    }" { (expression_statement "pbVar5 = pbVar6 + 1;" (assignment_expression "pbVar5 = pbVar6 + 1" identifier = (binary_expression "pbVar6 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = *pbVar6;" (assignment_expression "bVar3 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" identifier = (binary_expression "bVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);" (assignment_expression "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" identifier = (binary_expression "uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" identifier | (binary_expression "(ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" (call_expression "(ulong)(bVar3 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar3 & 0x7f)" ( (binary_expression "bVar3 & 0x7f" identifier & number_literal) ))) << (parenthesized_expression "(bVar4 & 0x3f)" ( (binary_expression "bVar4 & 0x3f" identifier & number_literal) ))))) ;) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" identifier = identifier) ;) }) while (parenthesized_expression "((char)bVar3 < '\0')" ( (binary_expression "(char)bVar3 < '\0'" (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) ;) })) (if_statement "if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }" if (parenthesized_expression "((-1 < (char)bVar1) && (bVar2 == 0))" ( (binary_expression "(-1 < (char)bVar1) && (bVar2 == 0)" (parenthesized_expression "(-1 < (char)bVar1)" ( (binary_expression "-1 < (char)bVar1" number_literal < (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier)) )) && (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }" { (expression_statement "FUN_0013bae0(local_48,bVar1 & 0x7f);" (call_expression "FUN_0013bae0(local_48,bVar1 & 0x7f)" identifier (argument_list "(local_48,bVar1 & 0x7f)" ( identifier , (binary_expression "bVar1 & 0x7f" identifier & number_literal) ))) ;) (expression_statement "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);" (call_expression "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48)" identifier (argument_list "("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48)" ( (string_literal ""\t%s:restore(t=%lu,reg=%s)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_001647db" & identifier) , identifier , identifier ))) ;) (return_statement "return pbVar5;" return identifier ;) })) (expression_statement "FUN_0013bae0(auStack_68,bVar1 & 0x7f);" (call_expression "FUN_0013bae0(auStack_68,bVar1 & 0x7f)" identifier (argument_list "(auStack_68,bVar1 & 0x7f)" ( identifier , (binary_expression "bVar1 & 0x7f" identifier & number_literal) ))) ;) (expression_statement "FUN_0013c200(local_48,bVar1 >> 7,bVar2);" (call_expression "FUN_0013c200(local_48,bVar1 >> 7,bVar2)" identifier (argument_list "(local_48,bVar1 >> 7,bVar2)" ( identifier , (binary_expression "bVar1 >> 7" identifier >> number_literal) , identifier ))) ;) (expression_statement "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);" (call_expression "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48)" identifier (argument_list "("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48)" ( (string_literal ""\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_001647db" & identifier) , identifier , identifier , identifier ))) ;) (return_statement "return pbVar5;" return identifier ;) })))
(translation_unit "uchar * unw_decode_x2(uchar *dp,uint code,void *arg)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  char abregname [20];\n  char regname [20];\n  byte *pbVar6;\n  \n  pbVar5 = dp + 3;\n  bVar1 = *dp;\n  bVar2 = dp[1];\n  uVar7 = (ulong)(dp[2] & 0x7f);\n  if ((char)dp[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    unw_print_abreg(regname,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);\n    return pbVar5;\n  }\n  unw_print_abreg(abregname,bVar1 & 0x7f);\n  unw_print_xyreg(regname,(uint)(bVar1 >> 7),(uint)bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname);\n  return pbVar5;\n}\n\n" (function_definition "uchar * unw_decode_x2(uchar *dp,uint code,void *arg)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  char abregname [20];\n  char regname [20];\n  byte *pbVar6;\n  \n  pbVar5 = dp + 3;\n  bVar1 = *dp;\n  bVar2 = dp[1];\n  uVar7 = (ulong)(dp[2] & 0x7f);\n  if ((char)dp[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    unw_print_abreg(regname,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);\n    return pbVar5;\n  }\n  unw_print_abreg(abregname,bVar1 & 0x7f);\n  unw_print_xyreg(regname,(uint)(bVar1 >> 7),(uint)bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname);\n  return pbVar5;\n}" type_identifier (pointer_declarator "* unw_decode_x2(uchar *dp,uint code,void *arg)" * (function_declarator "unw_decode_x2(uchar *dp,uint code,void *arg)" identifier (parameter_list "(uchar *dp,uint code,void *arg)" ( (parameter_declaration "uchar *dp" type_identifier (pointer_declarator "*dp" * identifier)) , (parameter_declaration "uint code" type_identifier identifier) , (parameter_declaration "void *arg" primitive_type (pointer_declarator "*arg" * identifier)) )))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  char abregname [20];\n  char regname [20];\n  byte *pbVar6;\n  \n  pbVar5 = dp + 3;\n  bVar1 = *dp;\n  bVar2 = dp[1];\n  uVar7 = (ulong)(dp[2] & 0x7f);\n  if ((char)dp[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    unw_print_abreg(regname,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);\n    return pbVar5;\n  }\n  unw_print_abreg(abregname,bVar1 & 0x7f);\n  unw_print_xyreg(regname,(uint)(bVar1 >> 7),(uint)bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname);\n  return pbVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "char abregname [20];" primitive_type (array_declarator "abregname [20]" identifier [ number_literal ]) ;) (declaration "char regname [20];" primitive_type (array_declarator "regname [20]" identifier [ number_literal ]) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (expression_statement "pbVar5 = dp + 3;" (assignment_expression "pbVar5 = dp + 3" identifier = (binary_expression "dp + 3" identifier + number_literal)) ;) (expression_statement "bVar1 = *dp;" (assignment_expression "bVar1 = *dp" identifier = (pointer_expression "*dp" * identifier)) ;) (expression_statement "bVar2 = dp[1];" (assignment_expression "bVar2 = dp[1]" identifier = (subscript_expression "dp[1]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)(dp[2] & 0x7f);" (assignment_expression "uVar7 = (ulong)(dp[2] & 0x7f)" identifier = (call_expression "(ulong)(dp[2] & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(dp[2] & 0x7f)" ( (binary_expression "dp[2] & 0x7f" (subscript_expression "dp[2]" identifier [ number_literal ]) & number_literal) )))) ;) (if_statement "if ((char)dp[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" if (parenthesized_expression "((char)dp[2] < '\0')" ( (binary_expression "(char)dp[2] < '\0'" (cast_expression "(char)dp[2]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "dp[2]" identifier [ number_literal ])) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" { (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" identifier = identifier) ;) (do_statement "do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');" do (compound_statement "{\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    }" { (expression_statement "pbVar5 = pbVar6 + 1;" (assignment_expression "pbVar5 = pbVar6 + 1" identifier = (binary_expression "pbVar6 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = *pbVar6;" (assignment_expression "bVar3 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" identifier = (binary_expression "bVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);" (assignment_expression "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" identifier = (binary_expression "uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" identifier | (binary_expression "(ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" (call_expression "(ulong)(bVar3 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar3 & 0x7f)" ( (binary_expression "bVar3 & 0x7f" identifier & number_literal) ))) << (parenthesized_expression "(bVar4 & 0x3f)" ( (binary_expression "bVar4 & 0x3f" identifier & number_literal) ))))) ;) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" identifier = identifier) ;) }) while (parenthesized_expression "((char)bVar3 < '\0')" ( (binary_expression "(char)bVar3 < '\0'" (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) ;) })) (if_statement "if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    unw_print_abreg(regname,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);\n    return pbVar5;\n  }" if (parenthesized_expression "((-1 < (char)bVar1) && (bVar2 == 0))" ( (binary_expression "(-1 < (char)bVar1) && (bVar2 == 0)" (parenthesized_expression "(-1 < (char)bVar1)" ( (binary_expression "-1 < (char)bVar1" number_literal < (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier)) )) && (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    unw_print_abreg(regname,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);\n    return pbVar5;\n  }" { (expression_statement "unw_print_abreg(regname,bVar1 & 0x7f);" (call_expression "unw_print_abreg(regname,bVar1 & 0x7f)" identifier (argument_list "(regname,bVar1 & 0x7f)" ( identifier , (binary_expression "bVar1 & 0x7f" identifier & number_literal) ))) ;) (expression_statement "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname);" (call_expression "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname)" identifier (argument_list "("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,regname)" ( (string_literal ""\t%s:restore(t=%lu,reg=%s)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_001647db" & identifier) , identifier , identifier ))) ;) (return_statement "return pbVar5;" return identifier ;) })) (expression_statement "unw_print_abreg(abregname,bVar1 & 0x7f);" (call_expression "unw_print_abreg(abregname,bVar1 & 0x7f)" identifier (argument_list "(abregname,bVar1 & 0x7f)" ( identifier , (binary_expression "bVar1 & 0x7f" identifier & number_literal) ))) ;) (expression_statement "unw_print_xyreg(regname,(uint)(bVar1 >> 7),(uint)bVar2);" (call_expression "unw_print_xyreg(regname,(uint)(bVar1 >> 7),(uint)bVar2)" identifier (argument_list "(regname,(uint)(bVar1 >> 7),(uint)bVar2)" ( identifier , (call_expression "(uint)(bVar1 >> 7)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar1 >> 7)" ( (binary_expression "bVar1 >> 7" identifier >> number_literal) ))) , (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) ))) ;) (expression_statement "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname);" (call_expression "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname)" identifier (argument_list "("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,abregname,regname)" ( (string_literal ""\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_001647db" & identifier) , identifier , identifier , identifier ))) ;) (return_statement "return pbVar5;" return identifier ;) })))
(translation_unit "byte * FUN_0013c270(byte *param_1)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}\n\n" (function_definition "byte * FUN_0013c270(byte *param_1)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}" type_identifier (pointer_declarator "* FUN_0013c270(byte *param_1)" * (function_declarator "FUN_0013c270(byte *param_1)" identifier (parameter_list "(byte *param_1)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined1 auStack_68 [32];" type_identifier (array_declarator "auStack_68 [32]" identifier [ number_literal ]) ;) (declaration "undefined1 local_48 [32];" type_identifier (array_declarator "local_48 [32]" identifier [ number_literal ]) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (expression_statement "pbVar5 = param_1 + 3;" (assignment_expression "pbVar5 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ;) (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "bVar2 = param_1[1];" (assignment_expression "bVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)(param_1[2] & 0x7f);" (assignment_expression "uVar7 = (ulong)(param_1[2] & 0x7f)" identifier = (call_expression "(ulong)(param_1[2] & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] & 0x7f)" ( (binary_expression "param_1[2] & 0x7f" (subscript_expression "param_1[2]" identifier [ number_literal ]) & number_literal) )))) ;) (if_statement "if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" if (parenthesized_expression "((char)param_1[2] < '\0')" ( (binary_expression "(char)param_1[2] < '\0'" (cast_expression "(char)param_1[2]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" { (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" identifier = identifier) ;) (do_statement "do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');" do (compound_statement "{\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    }" { (expression_statement "pbVar5 = pbVar6 + 1;" (assignment_expression "pbVar5 = pbVar6 + 1" identifier = (binary_expression "pbVar6 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = *pbVar6;" (assignment_expression "bVar3 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" identifier = (binary_expression "bVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);" (assignment_expression "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" identifier = (binary_expression "uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" identifier | (binary_expression "(ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" (call_expression "(ulong)(bVar3 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar3 & 0x7f)" ( (binary_expression "bVar3 & 0x7f" identifier & number_literal) ))) << (parenthesized_expression "(bVar4 & 0x3f)" ( (binary_expression "bVar4 & 0x3f" identifier & number_literal) ))))) ;) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" identifier = identifier) ;) }) while (parenthesized_expression "((char)bVar3 < '\0')" ( (binary_expression "(char)bVar3 < '\0'" (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) ;) })) (if_statement "if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }" if (parenthesized_expression "((-1 < (char)bVar1) && (bVar2 == 0))" ( (binary_expression "(-1 < (char)bVar1) && (bVar2 == 0)" (parenthesized_expression "(-1 < (char)bVar1)" ( (binary_expression "-1 < (char)bVar1" number_literal < (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier)) )) && (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }" { (expression_statement "FUN_0013bae0(local_48,bVar1 & 0x7f);" (call_expression "FUN_0013bae0(local_48,bVar1 & 0x7f)" identifier (argument_list "(local_48,bVar1 & 0x7f)" ( identifier , (binary_expression "bVar1 & 0x7f" identifier & number_literal) ))) ;) (expression_statement "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);" (call_expression "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48)" identifier (argument_list "("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48)" ( (string_literal ""\t%s:restore(t=%lu,reg=%s)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_001647db" & identifier) , identifier , identifier ))) ;) (return_statement "return pbVar5;" return identifier ;) })) (expression_statement "FUN_0013bae0(auStack_68,bVar1 & 0x7f);" (call_expression "FUN_0013bae0(auStack_68,bVar1 & 0x7f)" identifier (argument_list "(auStack_68,bVar1 & 0x7f)" ( identifier , (binary_expression "bVar1 & 0x7f" identifier & number_literal) ))) ;) (expression_statement "FUN_0013c200(local_48,bVar1 >> 7,bVar2);" (call_expression "FUN_0013c200(local_48,bVar1 >> 7,bVar2)" identifier (argument_list "(local_48,bVar1 >> 7,bVar2)" ( identifier , (binary_expression "bVar1 >> 7" identifier >> number_literal) , identifier ))) ;) (expression_statement "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);" (call_expression "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48)" identifier (argument_list "("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48)" ( (string_literal ""\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n"" " escape_sequence string_content escape_sequence ") , (pointer_expression "&DAT_001647db" & identifier) , identifier , identifier , identifier ))) ;) (return_statement "return pbVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (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)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) ))) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT & LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence ") , (pointer_expression & IDENT) , IDENT , IDENT ))) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT & LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT >> LIT) , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence ") , (pointer_expression & IDENT) , IDENT , IDENT , IDENT ))) ;) (return_statement return IDENT ;) })))
(function_definition "byte * FUN_0013c270(byte *param_1)\n\n{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}" (type_identifier "byte") (pointer_declarator "* FUN_0013c270(byte *param_1)" (* "*") (function_declarator "FUN_0013c270(byte *param_1)" (identifier "FUN_0013c270") (parameter_list "(byte *param_1)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")")))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  byte bVar3;\n  byte bVar4;\n  byte *pbVar5;\n  ulong uVar7;\n  undefined1 auStack_68 [32];\n  undefined1 local_48 [32];\n  byte *pbVar6;\n  \n  pbVar5 = param_1 + 3;\n  bVar1 = *param_1;\n  bVar2 = param_1[1];\n  uVar7 = (ulong)(param_1[2] & 0x7f);\n  if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }\n  if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }\n  FUN_0013bae0(auStack_68,bVar1 & 0x7f);\n  FUN_0013c200(local_48,bVar1 >> 7,bVar2);\n  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);\n  return pbVar5;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "undefined1 auStack_68 [32];" (type_identifier "undefined1") (array_declarator "auStack_68 [32]" (identifier "auStack_68") ([ "[") (number_literal "32") (] "]")) (; ";")) (declaration "undefined1 local_48 [32];" (type_identifier "undefined1") (array_declarator "local_48 [32]" (identifier "local_48") ([ "[") (number_literal "32") (] "]")) (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (expression_statement "pbVar5 = param_1 + 3;" (assignment_expression "pbVar5 = param_1 + 3" (identifier "pbVar5") (= "=") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "bVar1 = *param_1;" (assignment_expression "bVar1 = *param_1" (identifier "bVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "bVar2 = param_1[1];" (assignment_expression "bVar2 = param_1[1]" (identifier "bVar2") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar7 = (ulong)(param_1[2] & 0x7f);" (assignment_expression "uVar7 = (ulong)(param_1[2] & 0x7f)" (identifier "uVar7") (= "=") (call_expression "(ulong)(param_1[2] & 0x7f)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[2] & 0x7f)" (( "(") (binary_expression "param_1[2] & 0x7f" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (& "&") (number_literal "0x7f")) () ")")))) (; ";")) (if_statement "if ((char)param_1[2] < '\0') {\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" (if "if") (parenthesized_expression "((char)param_1[2] < '\0')" (( "(") (binary_expression "(char)param_1[2] < '\0'" (cast_expression "(char)param_1[2]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    bVar4 = 0;\n    pbVar6 = pbVar5;\n    do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');\n  }" ({ "{") (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" (identifier "bVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" (identifier "pbVar6") (= "=") (identifier "pbVar5")) (; ";")) (do_statement "do {\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    } while ((char)bVar3 < '\0');" (do "do") (compound_statement "{\n      pbVar5 = pbVar6 + 1;\n      bVar3 = *pbVar6;\n      bVar4 = bVar4 + 7;\n      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);\n      pbVar6 = pbVar5;\n    }" ({ "{") (expression_statement "pbVar5 = pbVar6 + 1;" (assignment_expression "pbVar5 = pbVar6 + 1" (identifier "pbVar5") (= "=") (binary_expression "pbVar6 + 1" (identifier "pbVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar3 = *pbVar6;" (assignment_expression "bVar3 = *pbVar6" (identifier "bVar3") (= "=") (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6"))) (; ";")) (expression_statement "bVar4 = bVar4 + 7;" (assignment_expression "bVar4 = bVar4 + 7" (identifier "bVar4") (= "=") (binary_expression "bVar4 + 7" (identifier "bVar4") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);" (assignment_expression "uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" (identifier "uVar7") (= "=") (binary_expression "uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" (identifier "uVar7") (| "|") (binary_expression "(ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f)" (call_expression "(ulong)(bVar3 & 0x7f)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar3 & 0x7f)" (( "(") (binary_expression "bVar3 & 0x7f" (identifier "bVar3") (& "&") (number_literal "0x7f")) () ")"))) (<< "<<") (parenthesized_expression "(bVar4 & 0x3f)" (( "(") (binary_expression "bVar4 & 0x3f" (identifier "bVar4") (& "&") (number_literal "0x3f")) () ")"))))) (; ";")) (expression_statement "pbVar6 = pbVar5;" (assignment_expression "pbVar6 = pbVar5" (identifier "pbVar6") (= "=") (identifier "pbVar5")) (; ";")) (} "}")) (while "while") (parenthesized_expression "((char)bVar3 < '\0')" (( "(") (binary_expression "(char)bVar3 < '\0'" (cast_expression "(char)bVar3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar3")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (; ";")) (} "}"))) (if_statement "if ((-1 < (char)bVar1) && (bVar2 == 0)) {\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }" (if "if") (parenthesized_expression "((-1 < (char)bVar1) && (bVar2 == 0))" (( "(") (binary_expression "(-1 < (char)bVar1) && (bVar2 == 0)" (parenthesized_expression "(-1 < (char)bVar1)" (( "(") (binary_expression "-1 < (char)bVar1" (number_literal "-1") (< "<") (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1"))) () ")")) (&& "&&") (parenthesized_expression "(bVar2 == 0)" (( "(") (binary_expression "bVar2 == 0" (identifier "bVar2") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    FUN_0013bae0(local_48,bVar1 & 0x7f);\n    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);\n    return pbVar5;\n  }" ({ "{") (expression_statement "FUN_0013bae0(local_48,bVar1 & 0x7f);" (call_expression "FUN_0013bae0(local_48,bVar1 & 0x7f)" (identifier "FUN_0013bae0") (argument_list "(local_48,bVar1 & 0x7f)" (( "(") (identifier "local_48") (, ",") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")"))) (; ";")) (expression_statement "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);" (call_expression "printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48)" (identifier "printf") (argument_list "("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48)" (( "(") (string_literal ""\t%s:restore(t=%lu,reg=%s)\n"" (" """) (escape_sequence "\t") (string_content "%s:restore(t=%lu,reg=%s)") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "&DAT_001647db" (& "&") (identifier "DAT_001647db")) (, ",") (identifier "uVar7") (, ",") (identifier "local_48") () ")"))) (; ";")) (return_statement "return pbVar5;" (return "return") (identifier "pbVar5") (; ";")) (} "}"))) (expression_statement "FUN_0013bae0(auStack_68,bVar1 & 0x7f);" (call_expression "FUN_0013bae0(auStack_68,bVar1 & 0x7f)" (identifier "FUN_0013bae0") (argument_list "(auStack_68,bVar1 & 0x7f)" (( "(") (identifier "auStack_68") (, ",") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")"))) (; ";")) (expression_statement "FUN_0013c200(local_48,bVar1 >> 7,bVar2);" (call_expression "FUN_0013c200(local_48,bVar1 >> 7,bVar2)" (identifier "FUN_0013c200") (argument_list "(local_48,bVar1 >> 7,bVar2)" (( "(") (identifier "local_48") (, ",") (binary_expression "bVar1 >> 7" (identifier "bVar1") (>> ">>") (number_literal "7")) (, ",") (identifier "bVar2") () ")"))) (; ";")) (expression_statement "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);" (call_expression "printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48)" (identifier "printf") (argument_list "("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48)" (( "(") (string_literal ""\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n"" (" """) (escape_sequence "\t") (string_content "%s:spill_reg(t=%lu,reg=%s,treg=%s)") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "&DAT_001647db" (& "&") (identifier "DAT_001647db")) (, ",") (identifier "uVar7") (, ",") (identifier "auStack_68") (, ",") (identifier "local_48") () ")"))) (; ";")) (return_statement "return pbVar5;" (return "return") (identifier "pbVar5") (; ";")) (} "}")))

type_1 * function_1(type_1 *var_1,type_2 code,void *arg)

{
  type_3 var_8;
  type_3 var_6;
  type_3 var_5;
  type_3 var_3;
  type_3 *pbVar5;
  type_4 var_4;
  char abregname [20];
  char regname [20];
  type_3 *var_2;
  
  pbVar5 = var_1 + 3;
  var_8 = *var_1;
  var_6 = var_1[1];
  var_4 = (type_4)(var_1[2] & 0x7f);
  if ((char)var_1[2] < '\0') {
    var_3 = 0;
    var_2 = pbVar5;
    do {
      pbVar5 = var_2 + 1;
      var_5 = *var_2;
      var_3 = var_3 + 7;
      var_4 = var_4 | (type_4)(var_5 & 0x7f) << (var_3 & 0x3f);
      var_2 = pbVar5;
    } while ((char)var_5 < '\0');
  }
  if ((-1 < (char)var_8) && (var_6 == 0)) {
    var_7(regname,var_8 & 0x7f);
    var_9("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,var_4,regname);
    return pbVar5;
  }
  var_7(abregname,var_8 & 0x7f);
  var_10(regname,(type_2)(var_8 >> 7),(type_2)var_6);
  var_9("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,var_4,abregname,regname);
  return pbVar5;
}


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

byte * MASKED(byte *param_1)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  byte *pbVar5;
  ulong uVar7;
  undefined1 auStack_68 [32];
  undefined1 local_48 [32];
  byte *pbVar6;
  
  pbVar5 = param_1 + 3;
  bVar1 = *param_1;
  bVar2 = param_1[1];
  uVar7 = (ulong)(param_1[2] & 0x7f);
  if ((char)param_1[2] < '\0') {
    bVar4 = 0;
    pbVar6 = pbVar5;
    do {
      pbVar5 = pbVar6 + 1;
      bVar3 = *pbVar6;
      bVar4 = bVar4 + 7;
      uVar7 = uVar7 | (ulong)(bVar3 & 0x7f) << (bVar4 & 0x3f);
      pbVar6 = pbVar5;
    } while ((char)bVar3 < '\0');
  }
  if ((-1 < (char)bVar1) && (bVar2 == 0)) {
    FUN_0013bae0(local_48,bVar1 & 0x7f);
    printf("\t%s:restore(t=%lu,reg=%s)\n",&DAT_001647db,uVar7,local_48);
    return pbVar5;
  }
  FUN_0013bae0(auStack_68,bVar1 & 0x7f);
  FUN_0013c200(local_48,bVar1 >> 7,bVar2);
  printf("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",&DAT_001647db,uVar7,auStack_68,local_48);
  return pbVar5;
}

