
uint g_func(uint w,int *kp,uchar *key)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  byte bVar4;
  byte bVar5;
  
  bVar1 = key[*kp];
  iVar2 = keystep[*kp];
  *kp = iVar2;
  bVar5 = key[iVar2];
  iVar2 = keystep[iVar2];
  bVar4 = (byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff];
  *kp = iVar2;
  bVar5 = (byte)w ^ sbox[bVar5 ^ bVar4];
  iVar3 = keystep[iVar2];
  bVar4 = bVar4 ^ sbox[key[iVar2] ^ bVar5];
  *kp = iVar3;
  bVar1 = sbox[key[iVar3] ^ bVar4];
  *kp = keystep[iVar3];
  return (uint)CONCAT11(bVar4,bVar5 ^ bVar1);
}



undefined2 FUN_001305b0(uint param_1,int *param_2,long param_3)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  byte bVar4;
  byte bVar5;
  
  bVar1 = *(byte *)(param_3 + *param_2);
  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);
  *param_2 = iVar2;
  bVar5 = *(byte *)(param_3 + iVar2);
  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);
  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];
  *param_2 = iVar2;
  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];
  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);
  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];
  *param_2 = iVar3;
  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];
  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);
  return CONCAT11(bVar4,bVar5 ^ bVar1);
}


MOVSXD R11,dword ptr [RSI]
LEA R9,[0x1a90c0]
LEA R10,[0x1a9100]
MOV ECX,EDI
SHR ECX,0x8
MOVZX R8D,byte ptr [RDX + R11*0x1]
MOVSXD R11,dword ptr [R9 + R11*0x4]
XOR R8D,EDI
MOV dword ptr [RSI],R11D
MOVZX EAX,R8B
MOVZX R8D,byte ptr [RDX + R11*0x1]
MOVSXD R11,dword ptr [R9 + R11*0x4]
XOR CL,byte ptr [R10 + RAX*0x1]
XOR R8D,ECX
MOV dword ptr [RSI],R11D
MOVZX EAX,R8B
MOVZX R8D,byte ptr [RDX + R11*0x1]
XOR DIL,byte ptr [R10 + RAX*0x1]
XOR R8D,EDI
MOVZX EAX,R8B
MOVSXD R8,dword ptr [R9 + R11*0x4]
XOR CL,byte ptr [R10 + RAX*0x1]
MOV dword ptr [RSI],R8D
MOVZX EDX,byte ptr [RDX + R8*0x1]
MOVZX EAX,CL
SHL EAX,0x8
XOR EDX,ECX
MOVZX R11D,DL
XOR DIL,byte ptr [R10 + R11*0x1]
MOV R10D,dword ptr [R9 + R8*0x4]
MOVZX EDI,DIL
MOV dword ptr [RSI],R10D
OR EAX,EDI
RET
(translation_unit "undefined2 FUN_001305b0(uint param_1,int *param_2,long param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}\n\n" (function_definition "undefined2 FUN_001305b0(uint param_1,int *param_2,long param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}" type_identifier (function_declarator "FUN_001305b0(uint param_1,int *param_2,long param_3)" identifier (parameter_list "(uint param_1,int *param_2,long param_3)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (expression_statement "bVar1 = *(byte *)(param_3 + *param_2);" (assignment_expression "bVar1 = *(byte *)(param_3 + *param_2)" identifier = (pointer_expression "*(byte *)(param_3 + *param_2)" * (cast_expression "(byte *)(param_3 + *param_2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + *param_2)" ( (binary_expression "param_3 + *param_2" identifier + (pointer_expression "*param_2" * identifier)) ))))) ;) (expression_statement "iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);" (assignment_expression "iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" identifier = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)*param_2 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)*param_2 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)*param_2 * 4" (cast_expression "(long)*param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*param_2" * identifier)) * number_literal)) ))))) ;) (expression_statement "*param_2 = iVar2;" (assignment_expression "*param_2 = iVar2" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "bVar5 = *(byte *)(param_3 + iVar2);" (assignment_expression "bVar5 = *(byte *)(param_3 + iVar2)" identifier = (pointer_expression "*(byte *)(param_3 + iVar2)" * (cast_expression "(byte *)(param_3 + iVar2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar2)" ( (binary_expression "param_3 + iVar2" identifier + identifier) ))))) ;) (expression_statement "iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);" (assignment_expression "iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" identifier = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)iVar2 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)iVar2 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)iVar2 * 4" (cast_expression "(long)iVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (expression_statement "bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];" (assignment_expression "bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" identifier = (binary_expression "(byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (call_expression "(byte)(param_1 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(param_1 >> 8)" ( (binary_expression "param_1 >> 8" identifier >> number_literal) ))) ^ (subscript_expression "(&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "(bVar1 ^ param_1) & 0xff" (parenthesized_expression "(bVar1 ^ param_1)" ( (binary_expression "bVar1 ^ param_1" identifier ^ identifier) )) & number_literal) ]))) ;) (expression_statement "*param_2 = iVar2;" (assignment_expression "*param_2 = iVar2" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];" (assignment_expression "bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4]" identifier = (binary_expression "(byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4]" (cast_expression "(byte)param_1" ( (type_descriptor "byte" type_identifier) ) identifier) ^ (subscript_expression "(&DAT_001a9100)[bVar5 ^ bVar4]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "bVar5 ^ bVar4" identifier ^ identifier) ]))) ;) (expression_statement "iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);" (assignment_expression "iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" identifier = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)iVar2 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)iVar2 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)iVar2 * 4" (cast_expression "(long)iVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (expression_statement "bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];" (assignment_expression "bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" identifier = (binary_expression "bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" identifier ^ (subscript_expression "(&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "*(byte *)(param_3 + iVar2) ^ bVar5" (pointer_expression "*(byte *)(param_3 + iVar2)" * (cast_expression "(byte *)(param_3 + iVar2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar2)" ( (binary_expression "param_3 + iVar2" identifier + identifier) )))) ^ identifier) ]))) ;) (expression_statement "*param_2 = iVar3;" (assignment_expression "*param_2 = iVar3" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];" (assignment_expression "bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4]" identifier = (subscript_expression "(&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "*(byte *)(param_3 + iVar3) ^ bVar4" (pointer_expression "*(byte *)(param_3 + iVar3)" * (cast_expression "(byte *)(param_3 + iVar3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar3)" ( (binary_expression "param_3 + iVar3" identifier + identifier) )))) ^ identifier) ])) ;) (expression_statement "*param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);" (assignment_expression "*param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" (pointer_expression "*param_2" * identifier) = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)iVar3 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)iVar3 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)iVar3 * 4" (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (return_statement "return CONCAT11(bVar4,bVar5 ^ bVar1);" return (call_expression "CONCAT11(bVar4,bVar5 ^ bVar1)" identifier (argument_list "(bVar4,bVar5 ^ bVar1)" ( identifier , (binary_expression "bVar5 ^ bVar1" identifier ^ identifier) ))) ;) })))
(translation_unit "uint g_func(uint w,int *kp,uchar *key)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = key[*kp];\n  iVar2 = keystep[*kp];\n  *kp = iVar2;\n  bVar5 = key[iVar2];\n  iVar2 = keystep[iVar2];\n  bVar4 = (byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff];\n  *kp = iVar2;\n  bVar5 = (byte)w ^ sbox[bVar5 ^ bVar4];\n  iVar3 = keystep[iVar2];\n  bVar4 = bVar4 ^ sbox[key[iVar2] ^ bVar5];\n  *kp = iVar3;\n  bVar1 = sbox[key[iVar3] ^ bVar4];\n  *kp = keystep[iVar3];\n  return (uint)CONCAT11(bVar4,bVar5 ^ bVar1);\n}\n\n" (function_definition "uint g_func(uint w,int *kp,uchar *key)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = key[*kp];\n  iVar2 = keystep[*kp];\n  *kp = iVar2;\n  bVar5 = key[iVar2];\n  iVar2 = keystep[iVar2];\n  bVar4 = (byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff];\n  *kp = iVar2;\n  bVar5 = (byte)w ^ sbox[bVar5 ^ bVar4];\n  iVar3 = keystep[iVar2];\n  bVar4 = bVar4 ^ sbox[key[iVar2] ^ bVar5];\n  *kp = iVar3;\n  bVar1 = sbox[key[iVar3] ^ bVar4];\n  *kp = keystep[iVar3];\n  return (uint)CONCAT11(bVar4,bVar5 ^ bVar1);\n}" type_identifier (function_declarator "g_func(uint w,int *kp,uchar *key)" identifier (parameter_list "(uint w,int *kp,uchar *key)" ( (parameter_declaration "uint w" type_identifier identifier) , (parameter_declaration "int *kp" primitive_type (pointer_declarator "*kp" * identifier)) , (parameter_declaration "uchar *key" type_identifier (pointer_declarator "*key" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = key[*kp];\n  iVar2 = keystep[*kp];\n  *kp = iVar2;\n  bVar5 = key[iVar2];\n  iVar2 = keystep[iVar2];\n  bVar4 = (byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff];\n  *kp = iVar2;\n  bVar5 = (byte)w ^ sbox[bVar5 ^ bVar4];\n  iVar3 = keystep[iVar2];\n  bVar4 = bVar4 ^ sbox[key[iVar2] ^ bVar5];\n  *kp = iVar3;\n  bVar1 = sbox[key[iVar3] ^ bVar4];\n  *kp = keystep[iVar3];\n  return (uint)CONCAT11(bVar4,bVar5 ^ bVar1);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (expression_statement "bVar1 = key[*kp];" (assignment_expression "bVar1 = key[*kp]" identifier = (subscript_expression "key[*kp]" identifier [ (pointer_expression "*kp" * identifier) ])) ;) (expression_statement "iVar2 = keystep[*kp];" (assignment_expression "iVar2 = keystep[*kp]" identifier = (subscript_expression "keystep[*kp]" identifier [ (pointer_expression "*kp" * identifier) ])) ;) (expression_statement "*kp = iVar2;" (assignment_expression "*kp = iVar2" (pointer_expression "*kp" * identifier) = identifier) ;) (expression_statement "bVar5 = key[iVar2];" (assignment_expression "bVar5 = key[iVar2]" identifier = (subscript_expression "key[iVar2]" identifier [ identifier ])) ;) (expression_statement "iVar2 = keystep[iVar2];" (assignment_expression "iVar2 = keystep[iVar2]" identifier = (subscript_expression "keystep[iVar2]" identifier [ identifier ])) ;) (expression_statement "bVar4 = (byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff];" (assignment_expression "bVar4 = (byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff]" identifier = (binary_expression "(byte)(w >> 8) ^ sbox[(bVar1 ^ w) & 0xff]" (call_expression "(byte)(w >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(w >> 8)" ( (binary_expression "w >> 8" identifier >> number_literal) ))) ^ (subscript_expression "sbox[(bVar1 ^ w) & 0xff]" identifier [ (binary_expression "(bVar1 ^ w) & 0xff" (parenthesized_expression "(bVar1 ^ w)" ( (binary_expression "bVar1 ^ w" identifier ^ identifier) )) & number_literal) ]))) ;) (expression_statement "*kp = iVar2;" (assignment_expression "*kp = iVar2" (pointer_expression "*kp" * identifier) = identifier) ;) (expression_statement "bVar5 = (byte)w ^ sbox[bVar5 ^ bVar4];" (assignment_expression "bVar5 = (byte)w ^ sbox[bVar5 ^ bVar4]" identifier = (binary_expression "(byte)w ^ sbox[bVar5 ^ bVar4]" (cast_expression "(byte)w" ( (type_descriptor "byte" type_identifier) ) identifier) ^ (subscript_expression "sbox[bVar5 ^ bVar4]" identifier [ (binary_expression "bVar5 ^ bVar4" identifier ^ identifier) ]))) ;) (expression_statement "iVar3 = keystep[iVar2];" (assignment_expression "iVar3 = keystep[iVar2]" identifier = (subscript_expression "keystep[iVar2]" identifier [ identifier ])) ;) (expression_statement "bVar4 = bVar4 ^ sbox[key[iVar2] ^ bVar5];" (assignment_expression "bVar4 = bVar4 ^ sbox[key[iVar2] ^ bVar5]" identifier = (binary_expression "bVar4 ^ sbox[key[iVar2] ^ bVar5]" identifier ^ (subscript_expression "sbox[key[iVar2] ^ bVar5]" identifier [ (binary_expression "key[iVar2] ^ bVar5" (subscript_expression "key[iVar2]" identifier [ identifier ]) ^ identifier) ]))) ;) (expression_statement "*kp = iVar3;" (assignment_expression "*kp = iVar3" (pointer_expression "*kp" * identifier) = identifier) ;) (expression_statement "bVar1 = sbox[key[iVar3] ^ bVar4];" (assignment_expression "bVar1 = sbox[key[iVar3] ^ bVar4]" identifier = (subscript_expression "sbox[key[iVar3] ^ bVar4]" identifier [ (binary_expression "key[iVar3] ^ bVar4" (subscript_expression "key[iVar3]" identifier [ identifier ]) ^ identifier) ])) ;) (expression_statement "*kp = keystep[iVar3];" (assignment_expression "*kp = keystep[iVar3]" (pointer_expression "*kp" * identifier) = (subscript_expression "keystep[iVar3]" identifier [ identifier ])) ;) (return_statement "return (uint)CONCAT11(bVar4,bVar5 ^ bVar1);" return (cast_expression "(uint)CONCAT11(bVar4,bVar5 ^ bVar1)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11(bVar4,bVar5 ^ bVar1)" identifier (argument_list "(bVar4,bVar5 ^ bVar1)" ( identifier , (binary_expression "bVar5 ^ bVar1" identifier ^ identifier) )))) ;) })))
(translation_unit "undefined2 FUN_001305b0(uint param_1,int *param_2,long param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}\n\n" (function_definition "undefined2 FUN_001305b0(uint param_1,int *param_2,long param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}" type_identifier (function_declarator "FUN_001305b0(uint param_1,int *param_2,long param_3)" identifier (parameter_list "(uint param_1,int *param_2,long param_3)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (expression_statement "bVar1 = *(byte *)(param_3 + *param_2);" (assignment_expression "bVar1 = *(byte *)(param_3 + *param_2)" identifier = (pointer_expression "*(byte *)(param_3 + *param_2)" * (cast_expression "(byte *)(param_3 + *param_2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + *param_2)" ( (binary_expression "param_3 + *param_2" identifier + (pointer_expression "*param_2" * identifier)) ))))) ;) (expression_statement "iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);" (assignment_expression "iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" identifier = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)*param_2 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)*param_2 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)*param_2 * 4" (cast_expression "(long)*param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*param_2" * identifier)) * number_literal)) ))))) ;) (expression_statement "*param_2 = iVar2;" (assignment_expression "*param_2 = iVar2" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "bVar5 = *(byte *)(param_3 + iVar2);" (assignment_expression "bVar5 = *(byte *)(param_3 + iVar2)" identifier = (pointer_expression "*(byte *)(param_3 + iVar2)" * (cast_expression "(byte *)(param_3 + iVar2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar2)" ( (binary_expression "param_3 + iVar2" identifier + identifier) ))))) ;) (expression_statement "iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);" (assignment_expression "iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" identifier = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)iVar2 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)iVar2 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)iVar2 * 4" (cast_expression "(long)iVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (expression_statement "bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];" (assignment_expression "bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" identifier = (binary_expression "(byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (call_expression "(byte)(param_1 >> 8)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(param_1 >> 8)" ( (binary_expression "param_1 >> 8" identifier >> number_literal) ))) ^ (subscript_expression "(&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "(bVar1 ^ param_1) & 0xff" (parenthesized_expression "(bVar1 ^ param_1)" ( (binary_expression "bVar1 ^ param_1" identifier ^ identifier) )) & number_literal) ]))) ;) (expression_statement "*param_2 = iVar2;" (assignment_expression "*param_2 = iVar2" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];" (assignment_expression "bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4]" identifier = (binary_expression "(byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4]" (cast_expression "(byte)param_1" ( (type_descriptor "byte" type_identifier) ) identifier) ^ (subscript_expression "(&DAT_001a9100)[bVar5 ^ bVar4]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "bVar5 ^ bVar4" identifier ^ identifier) ]))) ;) (expression_statement "iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);" (assignment_expression "iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" identifier = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)iVar2 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)iVar2 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)iVar2 * 4" (cast_expression "(long)iVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (expression_statement "bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];" (assignment_expression "bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" identifier = (binary_expression "bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" identifier ^ (subscript_expression "(&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "*(byte *)(param_3 + iVar2) ^ bVar5" (pointer_expression "*(byte *)(param_3 + iVar2)" * (cast_expression "(byte *)(param_3 + iVar2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar2)" ( (binary_expression "param_3 + iVar2" identifier + identifier) )))) ^ identifier) ]))) ;) (expression_statement "*param_2 = iVar3;" (assignment_expression "*param_2 = iVar3" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];" (assignment_expression "bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4]" identifier = (subscript_expression "(&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4]" (parenthesized_expression "(&DAT_001a9100)" ( (pointer_expression "&DAT_001a9100" & identifier) )) [ (binary_expression "*(byte *)(param_3 + iVar3) ^ bVar4" (pointer_expression "*(byte *)(param_3 + iVar3)" * (cast_expression "(byte *)(param_3 + iVar3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar3)" ( (binary_expression "param_3 + iVar3" identifier + identifier) )))) ^ identifier) ])) ;) (expression_statement "*param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);" (assignment_expression "*param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" (pointer_expression "*param_2" * identifier) = (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" * (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001a90c0 + (long)iVar3 * 4)" ( (binary_expression "&DAT_001a90c0 + (long)iVar3 * 4" (pointer_expression "&DAT_001a90c0" & identifier) + (binary_expression "(long)iVar3 * 4" (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (return_statement "return CONCAT11(bVar4,bVar5 ^ bVar1);" return (call_expression "CONCAT11(bVar4,bVar5 ^ bVar1)" identifier (argument_list "(bVar4,bVar5 ^ bVar1)" ( identifier , (binary_expression "bVar5 ^ bVar1" identifier ^ identifier) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * IDENT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * IDENT)) * LIT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) ^ (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ IDENT) )) & LIT) ]))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) ^ (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression IDENT ^ IDENT) ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ^ IDENT) ]))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ^ IDENT) ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ))))) ;) (return_statement return (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT ^ IDENT) ))) ;) })))
(function_definition "undefined2 FUN_001305b0(uint param_1,int *param_2,long param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}" (type_identifier "undefined2") (function_declarator "FUN_001305b0(uint param_1,int *param_2,long param_3)" (identifier "FUN_001305b0") (parameter_list "(uint param_1,int *param_2,long param_3)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  \n  bVar1 = *(byte *)(param_3 + *param_2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);\n  *param_2 = iVar2;\n  bVar5 = *(byte *)(param_3 + iVar2);\n  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];\n  *param_2 = iVar2;\n  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];\n  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);\n  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];\n  *param_2 = iVar3;\n  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];\n  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);\n  return CONCAT11(bVar4,bVar5 ^ bVar1);\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "byte bVar5;" (type_identifier "byte") (identifier "bVar5") (; ";")) (expression_statement "bVar1 = *(byte *)(param_3 + *param_2);" (assignment_expression "bVar1 = *(byte *)(param_3 + *param_2)" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)(param_3 + *param_2)" (* "*") (cast_expression "(byte *)(param_3 + *param_2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + *param_2)" (( "(") (binary_expression "param_3 + *param_2" (identifier "param_3") (+ "+") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);" (assignment_expression "iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" (* "*") (cast_expression "(int *)(&DAT_001a90c0 + (long)*param_2 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001a90c0 + (long)*param_2 * 4)" (( "(") (binary_expression "&DAT_001a90c0 + (long)*param_2 * 4" (pointer_expression "&DAT_001a90c0" (& "&") (identifier "DAT_001a90c0")) (+ "+") (binary_expression "(long)*param_2 * 4" (cast_expression "(long)*param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "*param_2 = iVar2;" (assignment_expression "*param_2 = iVar2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "bVar5 = *(byte *)(param_3 + iVar2);" (assignment_expression "bVar5 = *(byte *)(param_3 + iVar2)" (identifier "bVar5") (= "=") (pointer_expression "*(byte *)(param_3 + iVar2)" (* "*") (cast_expression "(byte *)(param_3 + iVar2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + iVar2)" (( "(") (binary_expression "param_3 + iVar2" (identifier "param_3") (+ "+") (identifier "iVar2")) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);" (assignment_expression "iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" (* "*") (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001a90c0 + (long)iVar2 * 4)" (( "(") (binary_expression "&DAT_001a90c0 + (long)iVar2 * 4" (pointer_expression "&DAT_001a90c0" (& "&") (identifier "DAT_001a90c0")) (+ "+") (binary_expression "(long)iVar2 * 4" (cast_expression "(long)iVar2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar2")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];" (assignment_expression "bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (identifier "bVar4") (= "=") (binary_expression "(byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (call_expression "(byte)(param_1 >> 8)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(param_1 >> 8)" (( "(") (binary_expression "param_1 >> 8" (identifier "param_1") (>> ">>") (number_literal "8")) () ")"))) (^ "^") (subscript_expression "(&DAT_001a9100)[(bVar1 ^ param_1) & 0xff]" (parenthesized_expression "(&DAT_001a9100)" (( "(") (pointer_expression "&DAT_001a9100" (& "&") (identifier "DAT_001a9100")) () ")")) ([ "[") (binary_expression "(bVar1 ^ param_1) & 0xff" (parenthesized_expression "(bVar1 ^ param_1)" (( "(") (binary_expression "bVar1 ^ param_1" (identifier "bVar1") (^ "^") (identifier "param_1")) () ")")) (& "&") (number_literal "0xff")) (] "]")))) (; ";")) (expression_statement "*param_2 = iVar2;" (assignment_expression "*param_2 = iVar2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];" (assignment_expression "bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4]" (identifier "bVar5") (= "=") (binary_expression "(byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4]" (cast_expression "(byte)param_1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "param_1")) (^ "^") (subscript_expression "(&DAT_001a9100)[bVar5 ^ bVar4]" (parenthesized_expression "(&DAT_001a9100)" (( "(") (pointer_expression "&DAT_001a9100" (& "&") (identifier "DAT_001a9100")) () ")")) ([ "[") (binary_expression "bVar5 ^ bVar4" (identifier "bVar5") (^ "^") (identifier "bVar4")) (] "]")))) (; ";")) (expression_statement "iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);" (assignment_expression "iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" (* "*") (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar2 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001a90c0 + (long)iVar2 * 4)" (( "(") (binary_expression "&DAT_001a90c0 + (long)iVar2 * 4" (pointer_expression "&DAT_001a90c0" (& "&") (identifier "DAT_001a90c0")) (+ "+") (binary_expression "(long)iVar2 * 4" (cast_expression "(long)iVar2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar2")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];" (assignment_expression "bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" (identifier "bVar4") (= "=") (binary_expression "bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" (identifier "bVar4") (^ "^") (subscript_expression "(&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5]" (parenthesized_expression "(&DAT_001a9100)" (( "(") (pointer_expression "&DAT_001a9100" (& "&") (identifier "DAT_001a9100")) () ")")) ([ "[") (binary_expression "*(byte *)(param_3 + iVar2) ^ bVar5" (pointer_expression "*(byte *)(param_3 + iVar2)" (* "*") (cast_expression "(byte *)(param_3 + iVar2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + iVar2)" (( "(") (binary_expression "param_3 + iVar2" (identifier "param_3") (+ "+") (identifier "iVar2")) () ")")))) (^ "^") (identifier "bVar5")) (] "]")))) (; ";")) (expression_statement "*param_2 = iVar3;" (assignment_expression "*param_2 = iVar3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "iVar3")) (; ";")) (expression_statement "bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];" (assignment_expression "bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4]" (identifier "bVar1") (= "=") (subscript_expression "(&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4]" (parenthesized_expression "(&DAT_001a9100)" (( "(") (pointer_expression "&DAT_001a9100" (& "&") (identifier "DAT_001a9100")) () ")")) ([ "[") (binary_expression "*(byte *)(param_3 + iVar3) ^ bVar4" (pointer_expression "*(byte *)(param_3 + iVar3)" (* "*") (cast_expression "(byte *)(param_3 + iVar3)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + iVar3)" (( "(") (binary_expression "param_3 + iVar3" (identifier "param_3") (+ "+") (identifier "iVar3")) () ")")))) (^ "^") (identifier "bVar4")) (] "]"))) (; ";")) (expression_statement "*param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);" (assignment_expression "*param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (pointer_expression "*(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" (* "*") (cast_expression "(int *)(&DAT_001a90c0 + (long)iVar3 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001a90c0 + (long)iVar3 * 4)" (( "(") (binary_expression "&DAT_001a90c0 + (long)iVar3 * 4" (pointer_expression "&DAT_001a90c0" (& "&") (identifier "DAT_001a90c0")) (+ "+") (binary_expression "(long)iVar3 * 4" (cast_expression "(long)iVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar3")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (return_statement "return CONCAT11(bVar4,bVar5 ^ bVar1);" (return "return") (call_expression "CONCAT11(bVar4,bVar5 ^ bVar1)" (identifier "CONCAT11") (argument_list "(bVar4,bVar5 ^ bVar1)" (( "(") (identifier "bVar4") (, ",") (binary_expression "bVar5 ^ bVar1" (identifier "bVar5") (^ "^") (identifier "bVar1")) () ")"))) (; ";")) (} "}")))

type_1 function_1(type_1 var_1,int *kp,type_2 *key)

{
  type_3 var_2;
  int iVar2;
  int iVar3;
  type_3 var_4;
  type_3 var_3;
  
  var_2 = key[*kp];
  iVar2 = keystep[*kp];
  *kp = iVar2;
  var_3 = key[iVar2];
  iVar2 = keystep[iVar2];
  var_4 = (type_3)(var_1 >> 8) ^ sbox[(var_2 ^ var_1) & 0xff];
  *kp = iVar2;
  var_3 = (type_3)var_1 ^ sbox[var_3 ^ var_4];
  iVar3 = keystep[iVar2];
  var_4 = var_4 ^ sbox[key[iVar2] ^ var_3];
  *kp = iVar3;
  var_2 = sbox[key[iVar3] ^ var_4];
  *kp = keystep[iVar3];
  return (type_1)var_5(var_4,var_3 ^ var_2);
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))))) (return_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier))))))))

undefined2 MASKED(uint param_1,int *param_2,long param_3)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  byte bVar4;
  byte bVar5;
  
  bVar1 = *(byte *)(param_3 + *param_2);
  iVar2 = *(int *)(&DAT_001a90c0 + (long)*param_2 * 4);
  *param_2 = iVar2;
  bVar5 = *(byte *)(param_3 + iVar2);
  iVar2 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);
  bVar4 = (byte)(param_1 >> 8) ^ (&DAT_001a9100)[(bVar1 ^ param_1) & 0xff];
  *param_2 = iVar2;
  bVar5 = (byte)param_1 ^ (&DAT_001a9100)[bVar5 ^ bVar4];
  iVar3 = *(int *)(&DAT_001a90c0 + (long)iVar2 * 4);
  bVar4 = bVar4 ^ (&DAT_001a9100)[*(byte *)(param_3 + iVar2) ^ bVar5];
  *param_2 = iVar3;
  bVar1 = (&DAT_001a9100)[*(byte *)(param_3 + iVar3) ^ bVar4];
  *param_2 = *(int *)(&DAT_001a90c0 + (long)iVar3 * 4);
  return CONCAT11(bVar4,bVar5 ^ bVar1);
}

