
int recomputeColumnsUsedExpr(Walker *pWalker,Expr *pExpr)

{
  Expr **ppEVar1;
  IdList **ppIVar2;
  ushort uVar3;
  SrcList *pSVar4;
  Table *pTVar5;
  uint uVar6;
  SrcList_item *pItem;
  int iVar7;
  uint uVar8;
  uint uVar9;
  
  if ((pExpr->op == 0xa4) &&
     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)) {
    uVar3 = pExpr->iColumn;
    uVar6 = (uint)uVar3;
    if (-1 < (short)uVar3) {
      pTVar5 = (pExpr->y).pTab;
      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {
        if (0x3f < (short)uVar3) {
          uVar6 = 0x3f;
        }
        uVar9 = uVar6 >> 5 & 1;
        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);
        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);
      }
      else {
        uVar3 = pTVar5->nCol;
        uVar8 = 0xffffffff;
        uVar6 = 0xffffffff;
        if ((short)uVar3 < 0x40) {
          uVar9 = uVar3 >> 5 & 1;
          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);
          uVar6 = iVar7 - 1;
          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);
        }
      }
      ppEVar1 = &pSVar4->a[0].pOn;
      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);
      ppIVar2 = &pSVar4->a[0].pUsing;
      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);
    }
  }
  return 0;
}



undefined4 FUN_0002a730(int param_1,char *param_2)

{
  ushort uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  
  if ((*param_2 == -0x5c) &&
     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {
    uVar1 = *(ushort *)(param_2 + 0x20);
    uVar3 = (uint)uVar1;
    if (-1 < (short)uVar1) {
      iVar4 = *(int *)(param_2 + 0x2c);
      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||
         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {
        if (0x3f < (short)uVar1) {
          uVar3 = 0x3f;
        }
        uVar6 = uVar3 >> 5 & 1;
        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);
        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);
      }
      else {
        uVar1 = *(ushort *)(iVar4 + 0x2a);
        uVar5 = 0xffffffff;
        uVar3 = 0xffffffff;
        if ((short)uVar1 < 0x40) {
          uVar6 = uVar1 >> 5 & 1;
          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);
          uVar3 = iVar4 - 1;
          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);
        }
      }
      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;
      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;
    }
  }
  return 0;
}


PUSH EDI
PUSH ESI
MOV EAX,dword ptr [ESP + 0x10]
CMP byte ptr [EAX],0xa4
JZ 0x0002a740
XOR EAX,EAX
POP ESI
POP EDI
RET
MOV EDX,dword ptr [ESP + 0xc]
MOV EDI,dword ptr [EAX + 0x1c]
MOV EDX,dword ptr [EDX + 0x18]
CMP dword ptr [EDX + 0x28],EDI
JNZ 0x0002a73b
MOVZX ECX,word ptr [EAX + 0x20]
TEST CX,CX
JS 0x0002a73b
MOV ESI,dword ptr [EAX + 0x2c]
TEST byte ptr [ESI + 0x24],0x60
JZ 0x0002a7a0
MOVSX EAX,CX
MOV EDI,dword ptr [ESI + 0x4]
LEA EAX,[EAX + EAX*0x4]
LEA EAX,[EDI + EAX*0x4]
TEST byte ptr [EAX + 0x10],0x60
JZ 0x0002a7a0
MOVZX ECX,word ptr [ESI + 0x2a]
MOV EDI,0xffffffff
MOV ESI,0xffffffff
CMP CX,0x3f
JG 0x0002a7bd
MOV EDI,ECX
SHR EDI,0x5
AND EDI,0x1
MOV ESI,EDI
SHL EDI,CL
XOR ESI,0x1
SHL ESI,CL
ADD ESI,-0x1
ADC EDI,-0x1
JMP 0x0002a7bd
CMP CX,0x3f
MOV EAX,0x3f
CMOVG ECX,EAX
MOV EDI,ECX
SHR EDI,0x5
AND EDI,0x1
MOV ESI,EDI
SHL EDI,CL
XOR ESI,0x1
SHL ESI,CL
OR dword ptr [EDX + 0x34],ESI
OR dword ptr [EDX + 0x38],EDI
JMP 0x0002a73b
(translation_unit "undefined4 FUN_0002a730(int param_1,char *param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_0002a730(int param_1,char *param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0002a730(int param_1,char *param_2)" identifier (parameter_list "(int param_1,char *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (if_statement "if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }" if (parenthesized_expression "((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)))" ( (binary_expression "(*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))" (parenthesized_expression "(*param_2 == -0x5c)" ( (binary_expression "*param_2 == -0x5c" (pointer_expression "*param_2" * identifier) == number_literal) )) && (parenthesized_expression "(iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))" ( (comma_expression "iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)" (assignment_expression "iVar2 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) , (binary_expression "*(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)" (pointer_expression "*(int *)(iVar2 + 0x28)" * (cast_expression "(int *)(iVar2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x28)" ( (binary_expression "iVar2 + 0x28" identifier + number_literal) )))) == (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) )))))) ))) )) (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }" { (expression_statement "uVar1 = *(ushort *)(param_2 + 0x20);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x20)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x20)" * (cast_expression "(ushort *)(param_2 + 0x20)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = (uint)uVar1;" (assignment_expression "uVar3 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }" if (parenthesized_expression "(-1 < (short)uVar1)" ( (binary_expression "-1 < (short)uVar1" number_literal < (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) )) (compound_statement "{\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x2c);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x2c)" identifier = (pointer_expression "*(int *)(param_2 + 0x2c)" * (cast_expression "(int *)(param_2 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2c)" ( (binary_expression "param_2 + 0x2c" identifier + number_literal) ))))) ;) (if_statement "if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" if (parenthesized_expression "(((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0))" ( (binary_expression "((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)" (parenthesized_expression "((*(byte *)(iVar4 + 0x24) & 0x60) == 0)" ( (binary_expression "(*(byte *)(iVar4 + 0x24) & 0x60) == 0" (parenthesized_expression "(*(byte *)(iVar4 + 0x24) & 0x60)" ( (binary_expression "*(byte *)(iVar4 + 0x24) & 0x60" (pointer_expression "*(byte *)(iVar4 + 0x24)" * (cast_expression "(byte *)(iVar4 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x24)" ( (binary_expression "iVar4 + 0x24" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)" ( (binary_expression "(*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0" (parenthesized_expression "(*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60)" ( (binary_expression "*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60" (pointer_expression "*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" * (cast_expression "(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" ( (binary_expression "*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10" (binary_expression "*(int *)(iVar4 + 4) + (short)uVar1 * 0x14" (pointer_expression "*(int *)(iVar4 + 4)" * (cast_expression "(int *)(iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) + (binary_expression "(short)uVar1 * 0x14" (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) * number_literal)) + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }" { (if_statement "if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }" if (parenthesized_expression "(0x3f < (short)uVar1)" ( (binary_expression "0x3f < (short)uVar1" number_literal < (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) )) (compound_statement "{\n          uVar3 = 0x3f;\n        }" { (expression_statement "uVar3 = 0x3f;" (assignment_expression "uVar3 = 0x3f" identifier = number_literal) ;) })) (expression_statement "uVar6 = uVar3 >> 5 & 1;" (assignment_expression "uVar6 = uVar3 >> 5 & 1" identifier = (binary_expression "uVar3 >> 5 & 1" (binary_expression "uVar3 >> 5" identifier >> number_literal) & number_literal)) ;) (expression_statement "uVar5 = uVar6 << ((byte)uVar3 & 0x1f);" (assignment_expression "uVar5 = uVar6 << ((byte)uVar3 & 0x1f)" identifier = (binary_expression "uVar6 << ((byte)uVar3 & 0x1f)" identifier << (parenthesized_expression "((byte)uVar3 & 0x1f)" ( (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);" (assignment_expression "uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f)" identifier = (binary_expression "(uVar6 ^ 1) << ((byte)uVar3 & 0x1f)" (parenthesized_expression "(uVar6 ^ 1)" ( (binary_expression "uVar6 ^ 1" identifier ^ number_literal) )) << (parenthesized_expression "((byte)uVar3 & 0x1f)" ( (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) }) (else_clause "else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" else (compound_statement "{\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" { (expression_statement "uVar1 = *(ushort *)(iVar4 + 0x2a);" (assignment_expression "uVar1 = *(ushort *)(iVar4 + 0x2a)" identifier = (pointer_expression "*(ushort *)(iVar4 + 0x2a)" * (cast_expression "(ushort *)(iVar4 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x2a)" ( (binary_expression "iVar4 + 0x2a" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" identifier = number_literal) ;) (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" identifier = number_literal) ;) (if_statement "if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }" if (parenthesized_expression "((short)uVar1 < 0x40)" ( (binary_expression "(short)uVar1 < 0x40" (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) (compound_statement "{\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }" { (expression_statement "uVar6 = uVar1 >> 5 & 1;" (assignment_expression "uVar6 = uVar1 >> 5 & 1" identifier = (binary_expression "uVar1 >> 5 & 1" (binary_expression "uVar1 >> 5" identifier >> number_literal) & number_literal)) ;) (expression_statement "iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);" (assignment_expression "iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f)" identifier = (binary_expression "(uVar6 ^ 1) << ((byte)uVar1 & 0x1f)" (parenthesized_expression "(uVar6 ^ 1)" ( (binary_expression "uVar6 ^ 1" identifier ^ number_literal) )) << (parenthesized_expression "((byte)uVar1 & 0x1f)" ( (binary_expression "(byte)uVar1 & 0x1f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar3 = iVar4 - 1;" (assignment_expression "uVar3 = iVar4 - 1" identifier = (binary_expression "iVar4 - 1" identifier - number_literal)) ;) (expression_statement "uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);" (assignment_expression "uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0)" identifier = (binary_expression "(uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0)" (binary_expression "(uVar6 << ((byte)uVar1 & 0x1f)) + -1" (parenthesized_expression "(uVar6 << ((byte)uVar1 & 0x1f))" ( (binary_expression "uVar6 << ((byte)uVar1 & 0x1f)" identifier << (parenthesized_expression "((byte)uVar1 & 0x1f)" ( (binary_expression "(byte)uVar1 & 0x1f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) )) + number_literal) + (call_expression "(uint)(iVar4 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) ))))) ;) })) }))) (expression_statement "*(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;" (assignment_expression "*(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3" (pointer_expression "*(uint *)(iVar2 + 0x34)" * (cast_expression "(uint *)(iVar2 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x34)" ( (binary_expression "iVar2 + 0x34" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x34) | uVar3" (pointer_expression "*(uint *)(iVar2 + 0x34)" * (cast_expression "(uint *)(iVar2 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x34)" ( (binary_expression "iVar2 + 0x34" identifier + number_literal) )))) | identifier)) ;) (expression_statement "*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;" (assignment_expression "*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5" (pointer_expression "*(uint *)(iVar2 + 0x38)" * (cast_expression "(uint *)(iVar2 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x38) | uVar5" (pointer_expression "*(uint *)(iVar2 + 0x38)" * (cast_expression "(uint *)(iVar2 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) )))) | identifier)) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int recomputeColumnsUsedExpr(Walker *pWalker,Expr *pExpr)\n\n{\n  Expr **ppEVar1;\n  IdList **ppIVar2;\n  ushort uVar3;\n  SrcList *pSVar4;\n  Table *pTVar5;\n  uint uVar6;\n  SrcList_item *pItem;\n  int iVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if ((pExpr->op == 0xa4) &&\n     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)) {\n    uVar3 = pExpr->iColumn;\n    uVar6 = (uint)uVar3;\n    if (-1 < (short)uVar3) {\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int recomputeColumnsUsedExpr(Walker *pWalker,Expr *pExpr)\n\n{\n  Expr **ppEVar1;\n  IdList **ppIVar2;\n  ushort uVar3;\n  SrcList *pSVar4;\n  Table *pTVar5;\n  uint uVar6;\n  SrcList_item *pItem;\n  int iVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if ((pExpr->op == 0xa4) &&\n     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)) {\n    uVar3 = pExpr->iColumn;\n    uVar6 = (uint)uVar3;\n    if (-1 < (short)uVar3) {\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "recomputeColumnsUsedExpr(Walker *pWalker,Expr *pExpr)" identifier (parameter_list "(Walker *pWalker,Expr *pExpr)" ( (parameter_declaration "Walker *pWalker" type_identifier (pointer_declarator "*pWalker" * identifier)) , (parameter_declaration "Expr *pExpr" type_identifier (pointer_declarator "*pExpr" * identifier)) ))) (compound_statement "{\n  Expr **ppEVar1;\n  IdList **ppIVar2;\n  ushort uVar3;\n  SrcList *pSVar4;\n  Table *pTVar5;\n  uint uVar6;\n  SrcList_item *pItem;\n  int iVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if ((pExpr->op == 0xa4) &&\n     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)) {\n    uVar3 = pExpr->iColumn;\n    uVar6 = (uint)uVar3;\n    if (-1 < (short)uVar3) {\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }\n  }\n  return 0;\n}" { (declaration "Expr **ppEVar1;" type_identifier (pointer_declarator "**ppEVar1" * (pointer_declarator "*ppEVar1" * identifier)) ;) (declaration "IdList **ppIVar2;" type_identifier (pointer_declarator "**ppIVar2" * (pointer_declarator "*ppIVar2" * identifier)) ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "SrcList *pSVar4;" type_identifier (pointer_declarator "*pSVar4" * identifier) ;) (declaration "Table *pTVar5;" type_identifier (pointer_declarator "*pTVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "SrcList_item *pItem;" type_identifier (pointer_declarator "*pItem" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (if_statement "if ((pExpr->op == 0xa4) &&\n     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)) {\n    uVar3 = pExpr->iColumn;\n    uVar6 = (uint)uVar3;\n    if (-1 < (short)uVar3) {\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }\n  }" if (parenthesized_expression "((pExpr->op == 0xa4) &&\n     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable))" ( (binary_expression "(pExpr->op == 0xa4) &&\n     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)" (parenthesized_expression "(pExpr->op == 0xa4)" ( (binary_expression "pExpr->op == 0xa4" (field_expression "pExpr->op" identifier -> field_identifier) == number_literal) )) && (parenthesized_expression "(pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)" ( (comma_expression "pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable" (assignment_expression "pSVar4 = (pWalker->u).pSrcList" identifier = (field_expression "(pWalker->u).pSrcList" (parenthesized_expression "(pWalker->u)" ( (field_expression "pWalker->u" identifier -> field_identifier) )) . field_identifier)) , (binary_expression "pSVar4->a[0].regResult == pExpr->iTable" (field_expression "pSVar4->a[0].regResult" (subscript_expression "pSVar4->a[0]" (field_expression "pSVar4->a" identifier -> field_identifier) [ number_literal ]) . field_identifier) == (field_expression "pExpr->iTable" identifier -> field_identifier))) ))) )) (compound_statement "{\n    uVar3 = pExpr->iColumn;\n    uVar6 = (uint)uVar3;\n    if (-1 < (short)uVar3) {\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }\n  }" { (expression_statement "uVar3 = pExpr->iColumn;" (assignment_expression "uVar3 = pExpr->iColumn" identifier = (field_expression "pExpr->iColumn" identifier -> field_identifier)) ;) (expression_statement "uVar6 = (uint)uVar3;" (assignment_expression "uVar6 = (uint)uVar3" identifier = (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (-1 < (short)uVar3) {\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }" if (parenthesized_expression "(-1 < (short)uVar3)" ( (binary_expression "-1 < (short)uVar3" number_literal < (cast_expression "(short)uVar3" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) )) (compound_statement "{\n      pTVar5 = (pExpr->y).pTab;\n      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }\n      ppEVar1 = &pSVar4->a[0].pOn;\n      *ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);\n      ppIVar2 = &pSVar4->a[0].pUsing;\n      *ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);\n    }" { (expression_statement "pTVar5 = (pExpr->y).pTab;" (assignment_expression "pTVar5 = (pExpr->y).pTab" identifier = (field_expression "(pExpr->y).pTab" (parenthesized_expression "(pExpr->y)" ( (field_expression "pExpr->y" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)) {\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }\n      else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }" if (parenthesized_expression "(((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0))" ( (binary_expression "((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)" (parenthesized_expression "((pTVar5->tabFlags & 0x60) == 0)" ( (binary_expression "(pTVar5->tabFlags & 0x60) == 0" (parenthesized_expression "(pTVar5->tabFlags & 0x60)" ( (binary_expression "pTVar5->tabFlags & 0x60" (field_expression "pTVar5->tabFlags" identifier -> field_identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0)" ( (binary_expression "(pTVar5->aCol[(short)uVar3].colFlags & 0x60) == 0" (parenthesized_expression "(pTVar5->aCol[(short)uVar3].colFlags & 0x60)" ( (binary_expression "pTVar5->aCol[(short)uVar3].colFlags & 0x60" (field_expression "pTVar5->aCol[(short)uVar3].colFlags" (subscript_expression "pTVar5->aCol[(short)uVar3]" (field_expression "pTVar5->aCol" identifier -> field_identifier) [ (cast_expression "(short)uVar3" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) ]) . field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }\n        uVar9 = uVar6 >> 5 & 1;\n        uVar8 = uVar9 << ((byte)uVar6 & 0x1f);\n        uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);\n      }" { (if_statement "if (0x3f < (short)uVar3) {\n          uVar6 = 0x3f;\n        }" if (parenthesized_expression "(0x3f < (short)uVar3)" ( (binary_expression "0x3f < (short)uVar3" number_literal < (cast_expression "(short)uVar3" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) )) (compound_statement "{\n          uVar6 = 0x3f;\n        }" { (expression_statement "uVar6 = 0x3f;" (assignment_expression "uVar6 = 0x3f" identifier = number_literal) ;) })) (expression_statement "uVar9 = uVar6 >> 5 & 1;" (assignment_expression "uVar9 = uVar6 >> 5 & 1" identifier = (binary_expression "uVar6 >> 5 & 1" (binary_expression "uVar6 >> 5" identifier >> number_literal) & number_literal)) ;) (expression_statement "uVar8 = uVar9 << ((byte)uVar6 & 0x1f);" (assignment_expression "uVar8 = uVar9 << ((byte)uVar6 & 0x1f)" identifier = (binary_expression "uVar9 << ((byte)uVar6 & 0x1f)" identifier << (parenthesized_expression "((byte)uVar6 & 0x1f)" ( (binary_expression "(byte)uVar6 & 0x1f" (cast_expression "(byte)uVar6" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f);" (assignment_expression "uVar6 = (uVar9 ^ 1) << ((byte)uVar6 & 0x1f)" identifier = (binary_expression "(uVar9 ^ 1) << ((byte)uVar6 & 0x1f)" (parenthesized_expression "(uVar9 ^ 1)" ( (binary_expression "uVar9 ^ 1" identifier ^ number_literal) )) << (parenthesized_expression "((byte)uVar6 & 0x1f)" ( (binary_expression "(byte)uVar6 & 0x1f" (cast_expression "(byte)uVar6" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) }) (else_clause "else {\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }" else (compound_statement "{\n        uVar3 = pTVar5->nCol;\n        uVar8 = 0xffffffff;\n        uVar6 = 0xffffffff;\n        if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }\n      }" { (expression_statement "uVar3 = pTVar5->nCol;" (assignment_expression "uVar3 = pTVar5->nCol" identifier = (field_expression "pTVar5->nCol" identifier -> field_identifier)) ;) (expression_statement "uVar8 = 0xffffffff;" (assignment_expression "uVar8 = 0xffffffff" identifier = number_literal) ;) (expression_statement "uVar6 = 0xffffffff;" (assignment_expression "uVar6 = 0xffffffff" identifier = number_literal) ;) (if_statement "if ((short)uVar3 < 0x40) {\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }" if (parenthesized_expression "((short)uVar3 < 0x40)" ( (binary_expression "(short)uVar3 < 0x40" (cast_expression "(short)uVar3" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) (compound_statement "{\n          uVar9 = uVar3 >> 5 & 1;\n          iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);\n          uVar6 = iVar7 - 1;\n          uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);\n        }" { (expression_statement "uVar9 = uVar3 >> 5 & 1;" (assignment_expression "uVar9 = uVar3 >> 5 & 1" identifier = (binary_expression "uVar3 >> 5 & 1" (binary_expression "uVar3 >> 5" identifier >> number_literal) & number_literal)) ;) (expression_statement "iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f);" (assignment_expression "iVar7 = (uVar9 ^ 1) << ((byte)uVar3 & 0x1f)" identifier = (binary_expression "(uVar9 ^ 1) << ((byte)uVar3 & 0x1f)" (parenthesized_expression "(uVar9 ^ 1)" ( (binary_expression "uVar9 ^ 1" identifier ^ number_literal) )) << (parenthesized_expression "((byte)uVar3 & 0x1f)" ( (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar6 = iVar7 - 1;" (assignment_expression "uVar6 = iVar7 - 1" identifier = (binary_expression "iVar7 - 1" identifier - number_literal)) ;) (expression_statement "uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0);" (assignment_expression "uVar8 = (uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0)" identifier = (binary_expression "(uVar9 << ((byte)uVar3 & 0x1f)) + -1 + (uint)(iVar7 != 0)" (binary_expression "(uVar9 << ((byte)uVar3 & 0x1f)) + -1" (parenthesized_expression "(uVar9 << ((byte)uVar3 & 0x1f))" ( (binary_expression "uVar9 << ((byte)uVar3 & 0x1f)" identifier << (parenthesized_expression "((byte)uVar3 & 0x1f)" ( (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) )) + number_literal) + (call_expression "(uint)(iVar7 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) ))))) ;) })) }))) (expression_statement "ppEVar1 = &pSVar4->a[0].pOn;" (assignment_expression "ppEVar1 = &pSVar4->a[0].pOn" identifier = (pointer_expression "&pSVar4->a[0].pOn" & (field_expression "pSVar4->a[0].pOn" (subscript_expression "pSVar4->a[0]" (field_expression "pSVar4->a" identifier -> field_identifier) [ number_literal ]) . field_identifier))) ;) (expression_statement "*ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6);" (assignment_expression "*ppEVar1 = (Expr *)((uint)*ppEVar1 | uVar6)" (pointer_expression "*ppEVar1" * identifier) = (cast_expression "(Expr *)((uint)*ppEVar1 | uVar6)" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)*ppEVar1 | uVar6)" ( (binary_expression "(uint)*ppEVar1 | uVar6" (binary_expression "(uint)*ppEVar1" (parenthesized_expression "(uint)" ( identifier )) * identifier) | identifier) )))) ;) (expression_statement "ppIVar2 = &pSVar4->a[0].pUsing;" (assignment_expression "ppIVar2 = &pSVar4->a[0].pUsing" identifier = (pointer_expression "&pSVar4->a[0].pUsing" & (field_expression "pSVar4->a[0].pUsing" (subscript_expression "pSVar4->a[0]" (field_expression "pSVar4->a" identifier -> field_identifier) [ number_literal ]) . field_identifier))) ;) (expression_statement "*ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8);" (assignment_expression "*ppIVar2 = (IdList *)((uint)*ppIVar2 | uVar8)" (pointer_expression "*ppIVar2" * identifier) = (cast_expression "(IdList *)((uint)*ppIVar2 | uVar8)" ( (type_descriptor "IdList *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)*ppIVar2 | uVar8)" ( (binary_expression "(uint)*ppIVar2 | uVar8" (binary_expression "(uint)*ppIVar2" (parenthesized_expression "(uint)" ( identifier )) * identifier) | identifier) )))) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined4 FUN_0002a730(int param_1,char *param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_0002a730(int param_1,char *param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0002a730(int param_1,char *param_2)" identifier (parameter_list "(int param_1,char *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (if_statement "if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }" if (parenthesized_expression "((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)))" ( (binary_expression "(*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))" (parenthesized_expression "(*param_2 == -0x5c)" ( (binary_expression "*param_2 == -0x5c" (pointer_expression "*param_2" * identifier) == number_literal) )) && (parenthesized_expression "(iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))" ( (comma_expression "iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)" (assignment_expression "iVar2 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) , (binary_expression "*(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)" (pointer_expression "*(int *)(iVar2 + 0x28)" * (cast_expression "(int *)(iVar2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x28)" ( (binary_expression "iVar2 + 0x28" identifier + number_literal) )))) == (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) )))))) ))) )) (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }" { (expression_statement "uVar1 = *(ushort *)(param_2 + 0x20);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x20)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x20)" * (cast_expression "(ushort *)(param_2 + 0x20)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = (uint)uVar1;" (assignment_expression "uVar3 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }" if (parenthesized_expression "(-1 < (short)uVar1)" ( (binary_expression "-1 < (short)uVar1" number_literal < (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) )) (compound_statement "{\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x2c);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x2c)" identifier = (pointer_expression "*(int *)(param_2 + 0x2c)" * (cast_expression "(int *)(param_2 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2c)" ( (binary_expression "param_2 + 0x2c" identifier + number_literal) ))))) ;) (if_statement "if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" if (parenthesized_expression "(((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0))" ( (binary_expression "((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)" (parenthesized_expression "((*(byte *)(iVar4 + 0x24) & 0x60) == 0)" ( (binary_expression "(*(byte *)(iVar4 + 0x24) & 0x60) == 0" (parenthesized_expression "(*(byte *)(iVar4 + 0x24) & 0x60)" ( (binary_expression "*(byte *)(iVar4 + 0x24) & 0x60" (pointer_expression "*(byte *)(iVar4 + 0x24)" * (cast_expression "(byte *)(iVar4 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x24)" ( (binary_expression "iVar4 + 0x24" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)" ( (binary_expression "(*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0" (parenthesized_expression "(*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60)" ( (binary_expression "*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60" (pointer_expression "*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" * (cast_expression "(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" ( (binary_expression "*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10" (binary_expression "*(int *)(iVar4 + 4) + (short)uVar1 * 0x14" (pointer_expression "*(int *)(iVar4 + 4)" * (cast_expression "(int *)(iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) + (binary_expression "(short)uVar1 * 0x14" (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) * number_literal)) + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }" { (if_statement "if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }" if (parenthesized_expression "(0x3f < (short)uVar1)" ( (binary_expression "0x3f < (short)uVar1" number_literal < (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) )) (compound_statement "{\n          uVar3 = 0x3f;\n        }" { (expression_statement "uVar3 = 0x3f;" (assignment_expression "uVar3 = 0x3f" identifier = number_literal) ;) })) (expression_statement "uVar6 = uVar3 >> 5 & 1;" (assignment_expression "uVar6 = uVar3 >> 5 & 1" identifier = (binary_expression "uVar3 >> 5 & 1" (binary_expression "uVar3 >> 5" identifier >> number_literal) & number_literal)) ;) (expression_statement "uVar5 = uVar6 << ((byte)uVar3 & 0x1f);" (assignment_expression "uVar5 = uVar6 << ((byte)uVar3 & 0x1f)" identifier = (binary_expression "uVar6 << ((byte)uVar3 & 0x1f)" identifier << (parenthesized_expression "((byte)uVar3 & 0x1f)" ( (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);" (assignment_expression "uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f)" identifier = (binary_expression "(uVar6 ^ 1) << ((byte)uVar3 & 0x1f)" (parenthesized_expression "(uVar6 ^ 1)" ( (binary_expression "uVar6 ^ 1" identifier ^ number_literal) )) << (parenthesized_expression "((byte)uVar3 & 0x1f)" ( (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) }) (else_clause "else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" else (compound_statement "{\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" { (expression_statement "uVar1 = *(ushort *)(iVar4 + 0x2a);" (assignment_expression "uVar1 = *(ushort *)(iVar4 + 0x2a)" identifier = (pointer_expression "*(ushort *)(iVar4 + 0x2a)" * (cast_expression "(ushort *)(iVar4 + 0x2a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x2a)" ( (binary_expression "iVar4 + 0x2a" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" identifier = number_literal) ;) (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" identifier = number_literal) ;) (if_statement "if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }" if (parenthesized_expression "((short)uVar1 < 0x40)" ( (binary_expression "(short)uVar1 < 0x40" (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) (compound_statement "{\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }" { (expression_statement "uVar6 = uVar1 >> 5 & 1;" (assignment_expression "uVar6 = uVar1 >> 5 & 1" identifier = (binary_expression "uVar1 >> 5 & 1" (binary_expression "uVar1 >> 5" identifier >> number_literal) & number_literal)) ;) (expression_statement "iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);" (assignment_expression "iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f)" identifier = (binary_expression "(uVar6 ^ 1) << ((byte)uVar1 & 0x1f)" (parenthesized_expression "(uVar6 ^ 1)" ( (binary_expression "uVar6 ^ 1" identifier ^ number_literal) )) << (parenthesized_expression "((byte)uVar1 & 0x1f)" ( (binary_expression "(byte)uVar1 & 0x1f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar3 = iVar4 - 1;" (assignment_expression "uVar3 = iVar4 - 1" identifier = (binary_expression "iVar4 - 1" identifier - number_literal)) ;) (expression_statement "uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);" (assignment_expression "uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0)" identifier = (binary_expression "(uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0)" (binary_expression "(uVar6 << ((byte)uVar1 & 0x1f)) + -1" (parenthesized_expression "(uVar6 << ((byte)uVar1 & 0x1f))" ( (binary_expression "uVar6 << ((byte)uVar1 & 0x1f)" identifier << (parenthesized_expression "((byte)uVar1 & 0x1f)" ( (binary_expression "(byte)uVar1 & 0x1f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) )) + number_literal) + (call_expression "(uint)(iVar4 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) ))))) ;) })) }))) (expression_statement "*(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;" (assignment_expression "*(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3" (pointer_expression "*(uint *)(iVar2 + 0x34)" * (cast_expression "(uint *)(iVar2 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x34)" ( (binary_expression "iVar2 + 0x34" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x34) | uVar3" (pointer_expression "*(uint *)(iVar2 + 0x34)" * (cast_expression "(uint *)(iVar2 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x34)" ( (binary_expression "iVar2 + 0x34" identifier + number_literal) )))) | identifier)) ;) (expression_statement "*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;" (assignment_expression "*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5" (pointer_expression "*(uint *)(iVar2 + 0x38)" * (cast_expression "(uint *)(iVar2 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x38) | uVar5" (pointer_expression "*(uint *)(iVar2 + 0x38)" * (cast_expression "(uint *)(iVar2 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) )))) | identifier)) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT) * LIT)) + LIT) )))) & LIT) )) == LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ LIT) )) << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ LIT) )) << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) )) + LIT) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))))) ;) })) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | IDENT)) ;) })) })) (return_statement return LIT ;) })))
(function_definition "undefined4 FUN_0002a730(int param_1,char *param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}" (type_identifier "undefined4") (function_declarator "FUN_0002a730(int param_1,char *param_2)" (identifier "FUN_0002a730") (parameter_list "(int param_1,char *param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  ushort uVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (if_statement "if ((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }" (if "if") (parenthesized_expression "((*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)))" (( "(") (binary_expression "(*param_2 == -0x5c) &&\n     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))" (parenthesized_expression "(*param_2 == -0x5c)" (( "(") (binary_expression "*param_2 == -0x5c" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (== "==") (number_literal "-0x5c")) () ")")) (&& "&&") (parenthesized_expression "(iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))" (( "(") (comma_expression "iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)" (assignment_expression "iVar2 = *(int *)(param_1 + 0x18)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (, ",") (binary_expression "*(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c)" (pointer_expression "*(int *)(iVar2 + 0x28)" (* "*") (cast_expression "(int *)(iVar2 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x28)" (( "(") (binary_expression "iVar2 + 0x28" (identifier "iVar2") (+ "+") (number_literal "0x28")) () ")")))) (== "==") (pointer_expression "*(int *)(param_2 + 0x1c)" (* "*") (cast_expression "(int *)(param_2 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1c)" (( "(") (binary_expression "param_2 + 0x1c" (identifier "param_2") (+ "+") (number_literal "0x1c")) () ")")))))) () ")"))) () ")")) (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x20);\n    uVar3 = (uint)uVar1;\n    if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }\n  }" ({ "{") (expression_statement "uVar1 = *(ushort *)(param_2 + 0x20);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x20)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(param_2 + 0x20)" (* "*") (cast_expression "(ushort *)(param_2 + 0x20)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "uVar3 = (uint)uVar1;" (assignment_expression "uVar3 = (uint)uVar1" (identifier "uVar3") (= "=") (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1"))) (; ";")) (if_statement "if (-1 < (short)uVar1) {\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }" (if "if") (parenthesized_expression "(-1 < (short)uVar1)" (( "(") (binary_expression "-1 < (short)uVar1" (number_literal "-1") (< "<") (cast_expression "(short)uVar1" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar1"))) () ")")) (compound_statement "{\n      iVar4 = *(int *)(param_2 + 0x2c);\n      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }\n      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;\n      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;\n    }" ({ "{") (expression_statement "iVar4 = *(int *)(param_2 + 0x2c);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x2c)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_2 + 0x2c)" (* "*") (cast_expression "(int *)(param_2 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2c)" (( "(") (binary_expression "param_2 + 0x2c" (identifier "param_2") (+ "+") (number_literal "0x2c")) () ")"))))) (; ";")) (if_statement "if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }\n      else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" (if "if") (parenthesized_expression "(((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0))" (( "(") (binary_expression "((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||\n         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)" (parenthesized_expression "((*(byte *)(iVar4 + 0x24) & 0x60) == 0)" (( "(") (binary_expression "(*(byte *)(iVar4 + 0x24) & 0x60) == 0" (parenthesized_expression "(*(byte *)(iVar4 + 0x24) & 0x60)" (( "(") (binary_expression "*(byte *)(iVar4 + 0x24) & 0x60" (pointer_expression "*(byte *)(iVar4 + 0x24)" (* "*") (cast_expression "(byte *)(iVar4 + 0x24)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x24)" (( "(") (binary_expression "iVar4 + 0x24" (identifier "iVar4") (+ "+") (number_literal "0x24")) () ")")))) (& "&") (number_literal "0x60")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)" (( "(") (binary_expression "(*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0" (parenthesized_expression "(*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60)" (( "(") (binary_expression "*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60" (pointer_expression "*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" (* "*") (cast_expression "(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10)" (( "(") (binary_expression "*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10" (binary_expression "*(int *)(iVar4 + 4) + (short)uVar1 * 0x14" (pointer_expression "*(int *)(iVar4 + 4)" (* "*") (cast_expression "(int *)(iVar4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "(short)uVar1 * 0x14" (cast_expression "(short)uVar1" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar1")) (* "*") (number_literal "0x14"))) (+ "+") (number_literal "0x10")) () ")")))) (& "&") (number_literal "0x60")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }\n        uVar6 = uVar3 >> 5 & 1;\n        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);\n        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);\n      }" ({ "{") (if_statement "if (0x3f < (short)uVar1) {\n          uVar3 = 0x3f;\n        }" (if "if") (parenthesized_expression "(0x3f < (short)uVar1)" (( "(") (binary_expression "0x3f < (short)uVar1" (number_literal "0x3f") (< "<") (cast_expression "(short)uVar1" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar1"))) () ")")) (compound_statement "{\n          uVar3 = 0x3f;\n        }" ({ "{") (expression_statement "uVar3 = 0x3f;" (assignment_expression "uVar3 = 0x3f" (identifier "uVar3") (= "=") (number_literal "0x3f")) (; ";")) (} "}"))) (expression_statement "uVar6 = uVar3 >> 5 & 1;" (assignment_expression "uVar6 = uVar3 >> 5 & 1" (identifier "uVar6") (= "=") (binary_expression "uVar3 >> 5 & 1" (binary_expression "uVar3 >> 5" (identifier "uVar3") (>> ">>") (number_literal "5")) (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = uVar6 << ((byte)uVar3 & 0x1f);" (assignment_expression "uVar5 = uVar6 << ((byte)uVar3 & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "uVar6 << ((byte)uVar3 & 0x1f)" (identifier "uVar6") (<< "<<") (parenthesized_expression "((byte)uVar3 & 0x1f)" (( "(") (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar3")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);" (assignment_expression "uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f)" (identifier "uVar3") (= "=") (binary_expression "(uVar6 ^ 1) << ((byte)uVar3 & 0x1f)" (parenthesized_expression "(uVar6 ^ 1)" (( "(") (binary_expression "uVar6 ^ 1" (identifier "uVar6") (^ "^") (number_literal "1")) () ")")) (<< "<<") (parenthesized_expression "((byte)uVar3 & 0x1f)" (( "(") (binary_expression "(byte)uVar3 & 0x1f" (cast_expression "(byte)uVar3" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar3")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" (else "else") (compound_statement "{\n        uVar1 = *(ushort *)(iVar4 + 0x2a);\n        uVar5 = 0xffffffff;\n        uVar3 = 0xffffffff;\n        if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }\n      }" ({ "{") (expression_statement "uVar1 = *(ushort *)(iVar4 + 0x2a);" (assignment_expression "uVar1 = *(ushort *)(iVar4 + 0x2a)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(iVar4 + 0x2a)" (* "*") (cast_expression "(ushort *)(iVar4 + 0x2a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x2a)" (( "(") (binary_expression "iVar4 + 0x2a" (identifier "iVar4") (+ "+") (number_literal "0x2a")) () ")"))))) (; ";")) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" (identifier "uVar5") (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" (identifier "uVar3") (= "=") (number_literal "0xffffffff")) (; ";")) (if_statement "if ((short)uVar1 < 0x40) {\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }" (if "if") (parenthesized_expression "((short)uVar1 < 0x40)" (( "(") (binary_expression "(short)uVar1 < 0x40" (cast_expression "(short)uVar1" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar1")) (< "<") (number_literal "0x40")) () ")")) (compound_statement "{\n          uVar6 = uVar1 >> 5 & 1;\n          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);\n          uVar3 = iVar4 - 1;\n          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);\n        }" ({ "{") (expression_statement "uVar6 = uVar1 >> 5 & 1;" (assignment_expression "uVar6 = uVar1 >> 5 & 1" (identifier "uVar6") (= "=") (binary_expression "uVar1 >> 5 & 1" (binary_expression "uVar1 >> 5" (identifier "uVar1") (>> ">>") (number_literal "5")) (& "&") (number_literal "1"))) (; ";")) (expression_statement "iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);" (assignment_expression "iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f)" (identifier "iVar4") (= "=") (binary_expression "(uVar6 ^ 1) << ((byte)uVar1 & 0x1f)" (parenthesized_expression "(uVar6 ^ 1)" (( "(") (binary_expression "uVar6 ^ 1" (identifier "uVar6") (^ "^") (number_literal "1")) () ")")) (<< "<<") (parenthesized_expression "((byte)uVar1 & 0x1f)" (( "(") (binary_expression "(byte)uVar1 & 0x1f" (cast_expression "(byte)uVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar1")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar3 = iVar4 - 1;" (assignment_expression "uVar3 = iVar4 - 1" (identifier "uVar3") (= "=") (binary_expression "iVar4 - 1" (identifier "iVar4") (- "-") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);" (assignment_expression "uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0)" (identifier "uVar5") (= "=") (binary_expression "(uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0)" (binary_expression "(uVar6 << ((byte)uVar1 & 0x1f)) + -1" (parenthesized_expression "(uVar6 << ((byte)uVar1 & 0x1f))" (( "(") (binary_expression "uVar6 << ((byte)uVar1 & 0x1f)" (identifier "uVar6") (<< "<<") (parenthesized_expression "((byte)uVar1 & 0x1f)" (( "(") (binary_expression "(byte)uVar1 & 0x1f" (cast_expression "(byte)uVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar1")) (& "&") (number_literal "0x1f")) () ")"))) () ")")) (+ "+") (number_literal "-1")) (+ "+") (call_expression "(uint)(iVar4 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")"))))) (; ";")) (} "}"))) (} "}")))) (expression_statement "*(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;" (assignment_expression "*(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3" (pointer_expression "*(uint *)(iVar2 + 0x34)" (* "*") (cast_expression "(uint *)(iVar2 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x34)" (( "(") (binary_expression "iVar2 + 0x34" (identifier "iVar2") (+ "+") (number_literal "0x34")) () ")")))) (= "=") (binary_expression "*(uint *)(iVar2 + 0x34) | uVar3" (pointer_expression "*(uint *)(iVar2 + 0x34)" (* "*") (cast_expression "(uint *)(iVar2 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x34)" (( "(") (binary_expression "iVar2 + 0x34" (identifier "iVar2") (+ "+") (number_literal "0x34")) () ")")))) (| "|") (identifier "uVar3"))) (; ";")) (expression_statement "*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;" (assignment_expression "*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5" (pointer_expression "*(uint *)(iVar2 + 0x38)" (* "*") (cast_expression "(uint *)(iVar2 + 0x38)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x38)" (( "(") (binary_expression "iVar2 + 0x38" (identifier "iVar2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (binary_expression "*(uint *)(iVar2 + 0x38) | uVar5" (pointer_expression "*(uint *)(iVar2 + 0x38)" (* "*") (cast_expression "(uint *)(iVar2 + 0x38)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x38)" (( "(") (binary_expression "iVar2 + 0x38" (identifier "iVar2") (+ "+") (number_literal "0x38")) () ")")))) (| "|") (identifier "uVar5"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int function_1(type_1 *pWalker,type_2 *pExpr)

{
  type_2 **var_5;
  type_3 **var_6;
  type_4 var_3;
  type_5 *pSVar4;
  type_6 *pTVar5;
  type_7 var_1;
  type_8 *pItem;
  int var_4;
  type_7 var_7;
  type_7 var_2;
  
  if ((pExpr->op == 0xa4) &&
     (pSVar4 = (pWalker->u).pSrcList, pSVar4->a[0].regResult == pExpr->iTable)) {
    var_3 = pExpr->iColumn;
    var_1 = (type_7)var_3;
    if (-1 < (short)var_3) {
      pTVar5 = (pExpr->y).pTab;
      if (((pTVar5->tabFlags & 0x60) == 0) || ((pTVar5->aCol[(short)var_3].colFlags & 0x60) == 0)) {
        if (0x3f < (short)var_3) {
          var_1 = 0x3f;
        }
        var_2 = var_1 >> 5 & 1;
        var_7 = var_2 << ((type_9)var_1 & 0x1f);
        var_1 = (var_2 ^ 1) << ((type_9)var_1 & 0x1f);
      }
      else {
        var_3 = pTVar5->nCol;
        var_7 = 0xffffffff;
        var_1 = 0xffffffff;
        if ((short)var_3 < 0x40) {
          var_2 = var_3 >> 5 & 1;
          var_4 = (var_2 ^ 1) << ((type_9)var_3 & 0x1f);
          var_1 = var_4 - 1;
          var_7 = (var_2 << ((type_9)var_3 & 0x1f)) + -1 + (type_7)(var_4 != 0);
        }
      }
      var_5 = &pSVar4->a[0].pOn;
      *var_5 = (type_2 *)((type_7)*var_5 | var_1);
      var_6 = &pSVar4->a[0].pUsing;
      *var_6 = (type_3 *)((type_7)*var_6 | var_7);
    }
  }
  return 0;
}


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

undefined4 MASKED(int param_1,char *param_2)

{
  ushort uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  
  if ((*param_2 == -0x5c) &&
     (iVar2 = *(int *)(param_1 + 0x18), *(int *)(iVar2 + 0x28) == *(int *)(param_2 + 0x1c))) {
    uVar1 = *(ushort *)(param_2 + 0x20);
    uVar3 = (uint)uVar1;
    if (-1 < (short)uVar1) {
      iVar4 = *(int *)(param_2 + 0x2c);
      if (((*(byte *)(iVar4 + 0x24) & 0x60) == 0) ||
         ((*(byte *)(*(int *)(iVar4 + 4) + (short)uVar1 * 0x14 + 0x10) & 0x60) == 0)) {
        if (0x3f < (short)uVar1) {
          uVar3 = 0x3f;
        }
        uVar6 = uVar3 >> 5 & 1;
        uVar5 = uVar6 << ((byte)uVar3 & 0x1f);
        uVar3 = (uVar6 ^ 1) << ((byte)uVar3 & 0x1f);
      }
      else {
        uVar1 = *(ushort *)(iVar4 + 0x2a);
        uVar5 = 0xffffffff;
        uVar3 = 0xffffffff;
        if ((short)uVar1 < 0x40) {
          uVar6 = uVar1 >> 5 & 1;
          iVar4 = (uVar6 ^ 1) << ((byte)uVar1 & 0x1f);
          uVar3 = iVar4 - 1;
          uVar5 = (uVar6 << ((byte)uVar1 & 0x1f)) + -1 + (uint)(iVar4 != 0);
        }
      }
      *(uint *)(iVar2 + 0x34) = *(uint *)(iVar2 + 0x34) | uVar3;
      *(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) | uVar5;
    }
  }
  return 0;
}

