
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

Bignum_conflict bignum_lshift(Bignum_conflict a,int shift)

{
  uint uVar1;
  sbyte sVar2;
  int iVar3;
  Bignum_conflict __s;
  int iVar4;
  int iVar5;
  uint uVar6;
  int in_stack_ffffffd4;
  size_t n;
  byte local_28;
  
  if (shift < 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");
  }
  iVar3 = *a * 0x20;
  iVar4 = iVar3 + -1;
  if ((-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1])) {
    do {
      iVar3 = iVar4;
      iVar4 = iVar3 + -1;
      if (iVar4 == -1) break;
    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);
  }
  iVar5 = iVar3 + shift + 0x1f;
  iVar4 = iVar3 + shift + 0x3e;
  if (-1 < iVar5) {
    iVar4 = iVar5;
  }
  uVar6 = iVar4 >> 5;
  if (0x3fffffe < uVar6) {
                    /* WARNING: Subroutine does not return */
    newbn(in_stack_ffffffd4);
  }
  n = uVar6 + 1;
  __s = (Bignum_conflict)safemalloc(n,4);
  memset(__s,0,n << 2);
  *__s = uVar6;
  iVar3 = shift >> 5;
  iVar4 = iVar3 + 1;
  if ((shift & 0x1fU) == 0) {
    memcpy(__s + iVar4,a + 1,*a << 2);
    return __s;
  }
  if (0 < (int)*a) {
    sVar2 = (sbyte)(shift & 0x1fU);
    local_28 = 0x20 - sVar2;
    uVar6 = 0;
    do {
      uVar1 = a[iVar4 - iVar3];
      __s[iVar4] = uVar6 | uVar1 << sVar2;
      uVar6 = uVar1 >> (local_28 & 0x1f);
      iVar4 = iVar4 + 1;
    } while (iVar4 <= (int)(iVar3 + *a));
    if (uVar6 != 0) {
      __s[iVar4] = uVar6;
    }
  }
  return __s;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

uint * FUN_00062940(int *param_1,uint param_2)

{
  uint uVar1;
  sbyte sVar2;
  int iVar3;
  uint *__s;
  int iVar4;
  int iVar5;
  uint uVar6;
  byte local_28;
  
  if ((int)param_2 < 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");
  }
  iVar3 = *param_1 * 0x20;
  iVar4 = iVar3 + -1;
  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {
    do {
      iVar3 = iVar4;
      iVar4 = iVar3 + -1;
      if (iVar4 == -1) break;
    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);
  }
  iVar5 = iVar3 + param_2 + 0x1f;
  iVar4 = iVar3 + param_2 + 0x3e;
  if (-1 < iVar5) {
    iVar4 = iVar5;
  }
  uVar6 = iVar4 >> 5;
  if (0x3fffffe < uVar6) {
                    /* WARNING: Subroutine does not return */
    FUN_0005f500();
  }
  __s = (uint *)FUN_000329a0(uVar6 + 1,4);
  memset(__s,0,(uVar6 + 1) * 4);
  *__s = uVar6;
  iVar3 = (int)param_2 >> 5;
  iVar4 = iVar3 + 1;
  if ((param_2 & 0x1f) == 0) {
    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);
    return __s;
  }
  if (0 < *param_1) {
    sVar2 = (sbyte)(param_2 & 0x1f);
    local_28 = 0x20 - sVar2;
    uVar6 = 0;
    do {
      uVar1 = param_1[iVar4 - iVar3];
      __s[iVar4] = uVar6 | uVar1 << sVar2;
      uVar6 = uVar1 >> (local_28 & 0x1f);
      iVar4 = iVar4 + 1;
    } while (iVar4 <= iVar3 + *param_1);
    if (uVar6 != 0) {
      __s[iVar4] = uVar6;
    }
  }
  return __s;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x0001c520
ADD EBX,0xd7e07
SUB ESP,0x1c
MOV EBP,dword ptr [ESP + 0x34]
MOV ESI,dword ptr [ESP + 0x30]
TEST EBP,EBP
JS 0x00062a9f
MOV EAX,dword ptr [ESI]
SHL EAX,0x5
MOV EDX,EAX
SUB EDX,0x1
JS 0x00062a98
MOV ECX,EDX
SAR ECX,0x5
MOV EDI,dword ptr [ESI + ECX*0x4 + 0x4]
TEST EDI,EDI
JNS 0x00062999
JMP 0x00062a98
MOV EAX,ECX
SAR EAX,0x5
MOV EAX,dword ptr [ESI + EAX*0x4 + 0x4]
SHR EAX,CL
TEST EAX,EAX
JNZ 0x000629a1
MOV EDX,ECX
LEA ECX,[EDX + -0x1]
CMP ECX,-0x1
JNZ 0x00062988
ADD EDX,dword ptr [ESP + 0x34]
LEA EDI,[EDX + 0x3e]
ADD EDX,0x1f
CMOVNS EDI,EDX
SAR EDI,0x5
CMP EDI,0x3fffffe
JA 0x00062abe
SUB ESP,0x8
LEA EDX,[EDI + 0x1]
PUSH 0x4
PUSH EDX
MOV dword ptr [ESP + 0x10],EDX
CALL 0x000329a0
MOV EDX,dword ptr [ESP + 0x10]
ADD ESP,0xc
MOV EBP,EAX
SHL EDX,0x2
PUSH EDX
PUSH 0x0
PUSH EAX
CALL 0x0001bad0
MOV EDX,dword ptr [ESP + 0x44]
ADD ESP,0x10
MOV dword ptr [EBP],EDI
MOV EDI,dword ptr [ESP + 0x34]
SAR EDX,0x5
AND EDI,0x1f
LEA EAX,[EDX + 0x1]
MOV dword ptr [ESP],EDI
JZ 0x00062a70
MOV ECX,dword ptr [ESI]
TEST ECX,ECX
JLE 0x00062a63
MOV ECX,0x20
SUB ECX,dword ptr [ESP]
MOV EBX,ESI
MOV dword ptr [ESP + 0xc],EDX
MOV dword ptr [ESP + 0x4],ECX
LEA ECX,[EDX*0x4 + 0x0]
SUB EBX,ECX
MOV dword ptr [ESP + 0x8],EBX
XOR EBX,EBX
LEA ESI,[ESI]
NOP
MOV EDI,dword ptr [ESP + 0x8]
MOVZX ECX,byte ptr [ESP]
MOV EDI,dword ptr [EDI + EAX*0x4]
MOV EDX,EDI
SHL EDX,CL
MOVZX ECX,byte ptr [ESP + 0x4]
OR EBX,EDX
MOV dword ptr [EBP + EAX*0x4],EBX
SHR EDI,CL
ADD EAX,0x1
MOV ECX,dword ptr [ESP + 0xc]
ADD ECX,dword ptr [ESI]
MOV EBX,EDI
CMP ECX,EAX
JGE 0x00062a30
TEST EDI,EDI
JZ 0x00062a63
MOV dword ptr [EBP + EAX*0x4],EDI
ADD ESP,0x1c
MOV EAX,EBP
POP EBX
POP ESI
POP EDI
POP EBP
RET
LEA EDX,[EBP + EAX*0x4]
MOV EAX,dword ptr [ESI]
SUB ESP,0x4
ADD ESI,0x4
SHL EAX,0x2
PUSH EAX
PUSH ESI
PUSH EDX
CALL 0x0001a820
ADD ESP,0x10
MOV EAX,EBP
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,EAX
JMP 0x000629a1
LEA EAX,[EBX + 0xfffae53c]
PUSH EAX
LEA EAX,[EBX + 0xfffae3f8]
PUSH 0x69b
PUSH EAX
LEA EAX,[EBX + 0xfffae492]
PUSH EAX
CALL 0x0001c000
CALL 0x0005f500
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint * FUN_00062940(int *param_1,uint param_2)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}\n\n" comment (function_definition "uint * FUN_00062940(int *param_1,uint param_2)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" type_identifier (pointer_declarator "* FUN_00062940(int *param_1,uint param_2)" * (function_declarator "FUN_00062940(int *param_1,uint param_2)" identifier (parameter_list "(int *param_1,uint param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) )))) (compound_statement "{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "sbyte sVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "byte local_28;" type_identifier identifier ;) (if_statement "if ((int)param_2 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" if (parenthesized_expression "((int)param_2 < 0)" ( (binary_expression "(int)param_2 < 0" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" { comment (expression_statement "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");" (call_expression "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" identifier (argument_list "("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" ( (string_literal ""shift >= 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bignum_lshift"" " string_content ") ))) ;) })) (expression_statement "iVar3 = *param_1 * 0x20;" (assignment_expression "iVar3 = *param_1 * 0x20" identifier = (binary_expression "*param_1 * 0x20" (pointer_expression "*param_1" * identifier) * number_literal)) ;) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" if (parenthesized_expression "((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1]))" ( (binary_expression "(-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])" (parenthesized_expression "(-1 < iVar4)" ( (binary_expression "-1 < iVar4" number_literal < identifier) )) && (parenthesized_expression "(-1 < param_1[(iVar4 >> 5) + 1])" ( (binary_expression "-1 < param_1[(iVar4 >> 5) + 1]" number_literal < (subscript_expression "param_1[(iVar4 >> 5) + 1]" identifier [ (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" ( (binary_expression "iVar4 >> 5" identifier >> number_literal) )) + number_literal) ])) ))) )) (compound_statement "{\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" { (do_statement "do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);" do (compound_statement "{\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    }" { (expression_statement "iVar3 = iVar4;" (assignment_expression "iVar3 = iVar4" identifier = identifier) ;) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if (iVar4 == -1) break;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0)" ( (binary_expression "(uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0" (binary_expression "(uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f)" (cast_expression "(uint)param_1[(iVar4 >> 5) + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[(iVar4 >> 5) + 1]" identifier [ (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" ( (binary_expression "iVar4 >> 5" identifier >> number_literal) )) + number_literal) ])) >> (parenthesized_expression "((byte)iVar4 & 0x1f)" ( (binary_expression "(byte)iVar4 & 0x1f" (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) == number_literal) )) ;) })) (expression_statement "iVar5 = iVar3 + param_2 + 0x1f;" (assignment_expression "iVar5 = iVar3 + param_2 + 0x1f" identifier = (binary_expression "iVar3 + param_2 + 0x1f" (binary_expression "iVar3 + param_2" identifier + identifier) + number_literal)) ;) (expression_statement "iVar4 = iVar3 + param_2 + 0x3e;" (assignment_expression "iVar4 = iVar3 + param_2 + 0x3e" identifier = (binary_expression "iVar3 + param_2 + 0x3e" (binary_expression "iVar3 + param_2" identifier + identifier) + number_literal)) ;) (if_statement "if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }" if (parenthesized_expression "(-1 < iVar5)" ( (binary_expression "-1 < iVar5" number_literal < identifier) )) (compound_statement "{\n    iVar4 = iVar5;\n  }" { (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) })) (expression_statement "uVar6 = iVar4 >> 5;" (assignment_expression "uVar6 = iVar4 >> 5" identifier = (binary_expression "iVar4 >> 5" identifier >> number_literal)) ;) (if_statement "if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f500();\n  }" if (parenthesized_expression "(0x3fffffe < uVar6)" ( (binary_expression "0x3fffffe < uVar6" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f500();\n  }" { comment (expression_statement "FUN_0005f500();" (call_expression "FUN_0005f500()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "__s = (uint *)FUN_000329a0(uVar6 + 1,4);" (assignment_expression "__s = (uint *)FUN_000329a0(uVar6 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar6 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar6 + 1,4)" identifier (argument_list "(uVar6 + 1,4)" ( (binary_expression "uVar6 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(__s,0,(uVar6 + 1) * 4);" (call_expression "memset(__s,0,(uVar6 + 1) * 4)" identifier (argument_list "(__s,0,(uVar6 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar6 + 1) * 4" (parenthesized_expression "(uVar6 + 1)" ( (binary_expression "uVar6 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*__s = uVar6;" (assignment_expression "*__s = uVar6" (pointer_expression "*__s" * identifier) = identifier) ;) (expression_statement "iVar3 = (int)param_2 >> 5;" (assignment_expression "iVar3 = (int)param_2 >> 5" identifier = (binary_expression "(int)param_2 >> 5" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }" if (parenthesized_expression "((param_2 & 0x1f) == 0)" ( (binary_expression "(param_2 & 0x1f) == 0" (parenthesized_expression "(param_2 & 0x1f)" ( (binary_expression "param_2 & 0x1f" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }" { (expression_statement "memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);" (call_expression "memcpy(__s + iVar4,param_1 + 1,*param_1 << 2)" identifier (argument_list "(__s + iVar4,param_1 + 1,*param_1 << 2)" ( (binary_expression "__s + iVar4" identifier + identifier) , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "*param_1 << 2" (pointer_expression "*param_1" * identifier) << number_literal) ))) ;) (return_statement "return __s;" return identifier ;) })) (if_statement "if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" if (parenthesized_expression "(0 < *param_1)" ( (binary_expression "0 < *param_1" number_literal < (pointer_expression "*param_1" * identifier)) )) (compound_statement "{\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" { (expression_statement "sVar2 = (sbyte)(param_2 & 0x1f);" (assignment_expression "sVar2 = (sbyte)(param_2 & 0x1f)" identifier = (call_expression "(sbyte)(param_2 & 0x1f)" (parenthesized_expression "(sbyte)" ( identifier )) (argument_list "(param_2 & 0x1f)" ( (binary_expression "param_2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "local_28 = 0x20 - sVar2;" (assignment_expression "local_28 = 0x20 - sVar2" identifier = (binary_expression "0x20 - sVar2" number_literal - identifier)) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);" do (compound_statement "{\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    }" { (expression_statement "uVar1 = param_1[iVar4 - iVar3];" (assignment_expression "uVar1 = param_1[iVar4 - iVar3]" identifier = (subscript_expression "param_1[iVar4 - iVar3]" identifier [ (binary_expression "iVar4 - iVar3" identifier - identifier) ])) ;) (expression_statement "__s[iVar4] = uVar6 | uVar1 << sVar2;" (assignment_expression "__s[iVar4] = uVar6 | uVar1 << sVar2" (subscript_expression "__s[iVar4]" identifier [ identifier ]) = (binary_expression "uVar6 | uVar1 << sVar2" identifier | (binary_expression "uVar1 << sVar2" identifier << identifier))) ;) (expression_statement "uVar6 = uVar1 >> (local_28 & 0x1f);" (assignment_expression "uVar6 = uVar1 >> (local_28 & 0x1f)" identifier = (binary_expression "uVar1 >> (local_28 & 0x1f)" identifier >> (parenthesized_expression "(local_28 & 0x1f)" ( (binary_expression "local_28 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 <= iVar3 + *param_1)" ( (binary_expression "iVar4 <= iVar3 + *param_1" identifier <= (binary_expression "iVar3 + *param_1" identifier + (pointer_expression "*param_1" * identifier))) )) ;) (if_statement "if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      __s[iVar4] = uVar6;\n    }" { (expression_statement "__s[iVar4] = uVar6;" (assignment_expression "__s[iVar4] = uVar6" (subscript_expression "__s[iVar4]" identifier [ identifier ]) = identifier) ;) })) })) (return_statement "return __s;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nBignum_conflict bignum_lshift(Bignum_conflict a,int shift)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  Bignum_conflict __s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  int in_stack_ffffffd4;\n  size_t n;\n  byte local_28;\n  \n  if (shift < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *a * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + shift + 0x1f;\n  iVar4 = iVar3 + shift + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    newbn(in_stack_ffffffd4);\n  }\n  n = uVar6 + 1;\n  __s = (Bignum_conflict)safemalloc(n,4);\n  memset(__s,0,n << 2);\n  *__s = uVar6;\n  iVar3 = shift >> 5;\n  iVar4 = iVar3 + 1;\n  if ((shift & 0x1fU) == 0) {\n    memcpy(__s + iVar4,a + 1,*a << 2);\n    return __s;\n  }\n  if (0 < (int)*a) {\n    sVar2 = (sbyte)(shift & 0x1fU);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= (int)(iVar3 + *a));\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}\n\n" comment comment (function_definition "Bignum_conflict bignum_lshift(Bignum_conflict a,int shift)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  Bignum_conflict __s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  int in_stack_ffffffd4;\n  size_t n;\n  byte local_28;\n  \n  if (shift < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *a * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + shift + 0x1f;\n  iVar4 = iVar3 + shift + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    newbn(in_stack_ffffffd4);\n  }\n  n = uVar6 + 1;\n  __s = (Bignum_conflict)safemalloc(n,4);\n  memset(__s,0,n << 2);\n  *__s = uVar6;\n  iVar3 = shift >> 5;\n  iVar4 = iVar3 + 1;\n  if ((shift & 0x1fU) == 0) {\n    memcpy(__s + iVar4,a + 1,*a << 2);\n    return __s;\n  }\n  if (0 < (int)*a) {\n    sVar2 = (sbyte)(shift & 0x1fU);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= (int)(iVar3 + *a));\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" type_identifier (function_declarator "bignum_lshift(Bignum_conflict a,int shift)" identifier (parameter_list "(Bignum_conflict a,int shift)" ( (parameter_declaration "Bignum_conflict a" type_identifier identifier) , (parameter_declaration "int shift" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  Bignum_conflict __s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  int in_stack_ffffffd4;\n  size_t n;\n  byte local_28;\n  \n  if (shift < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *a * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + shift + 0x1f;\n  iVar4 = iVar3 + shift + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    newbn(in_stack_ffffffd4);\n  }\n  n = uVar6 + 1;\n  __s = (Bignum_conflict)safemalloc(n,4);\n  memset(__s,0,n << 2);\n  *__s = uVar6;\n  iVar3 = shift >> 5;\n  iVar4 = iVar3 + 1;\n  if ((shift & 0x1fU) == 0) {\n    memcpy(__s + iVar4,a + 1,*a << 2);\n    return __s;\n  }\n  if (0 < (int)*a) {\n    sVar2 = (sbyte)(shift & 0x1fU);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= (int)(iVar3 + *a));\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "sbyte sVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "Bignum_conflict __s;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int in_stack_ffffffd4;" primitive_type identifier ;) (declaration "size_t n;" primitive_type identifier ;) (declaration "byte local_28;" type_identifier identifier ;) (if_statement "if (shift < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" if (parenthesized_expression "(shift < 0)" ( (binary_expression "shift < 0" identifier < number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" { comment (expression_statement "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");" (call_expression "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" identifier (argument_list "("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" ( (string_literal ""shift >= 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bignum_lshift"" " string_content ") ))) ;) })) (expression_statement "iVar3 = *a * 0x20;" (assignment_expression "iVar3 = *a * 0x20" identifier = (binary_expression "*a * 0x20" (pointer_expression "*a" * identifier) * number_literal)) ;) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if ((-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" if (parenthesized_expression "((-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1]))" ( (binary_expression "(-1 < iVar4) && (-1 < (int)a[(iVar4 >> 5) + 1])" (parenthesized_expression "(-1 < iVar4)" ( (binary_expression "-1 < iVar4" number_literal < identifier) )) && (parenthesized_expression "(-1 < (int)a[(iVar4 >> 5) + 1])" ( (binary_expression "-1 < (int)a[(iVar4 >> 5) + 1]" number_literal < (cast_expression "(int)a[(iVar4 >> 5) + 1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "a[(iVar4 >> 5) + 1]" identifier [ (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" ( (binary_expression "iVar4 >> 5" identifier >> number_literal) )) + number_literal) ]))) ))) )) (compound_statement "{\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" { (do_statement "do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while (a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);" do (compound_statement "{\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    }" { (expression_statement "iVar3 = iVar4;" (assignment_expression "iVar3 = iVar4" identifier = identifier) ;) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if (iVar4 == -1) break;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0)" ( (binary_expression "a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0" (binary_expression "a[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f)" (subscript_expression "a[(iVar4 >> 5) + 1]" identifier [ (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" ( (binary_expression "iVar4 >> 5" identifier >> number_literal) )) + number_literal) ]) >> (parenthesized_expression "((byte)iVar4 & 0x1f)" ( (binary_expression "(byte)iVar4 & 0x1f" (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) == number_literal) )) ;) })) (expression_statement "iVar5 = iVar3 + shift + 0x1f;" (assignment_expression "iVar5 = iVar3 + shift + 0x1f" identifier = (binary_expression "iVar3 + shift + 0x1f" (binary_expression "iVar3 + shift" identifier + identifier) + number_literal)) ;) (expression_statement "iVar4 = iVar3 + shift + 0x3e;" (assignment_expression "iVar4 = iVar3 + shift + 0x3e" identifier = (binary_expression "iVar3 + shift + 0x3e" (binary_expression "iVar3 + shift" identifier + identifier) + number_literal)) ;) (if_statement "if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }" if (parenthesized_expression "(-1 < iVar5)" ( (binary_expression "-1 < iVar5" number_literal < identifier) )) (compound_statement "{\n    iVar4 = iVar5;\n  }" { (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) })) (expression_statement "uVar6 = iVar4 >> 5;" (assignment_expression "uVar6 = iVar4 >> 5" identifier = (binary_expression "iVar4 >> 5" identifier >> number_literal)) ;) (if_statement "if (0x3fffffe < uVar6) {\n                    /* WARNING: Subroutine does not return */\n    newbn(in_stack_ffffffd4);\n  }" if (parenthesized_expression "(0x3fffffe < uVar6)" ( (binary_expression "0x3fffffe < uVar6" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    newbn(in_stack_ffffffd4);\n  }" { comment (expression_statement "newbn(in_stack_ffffffd4);" (call_expression "newbn(in_stack_ffffffd4)" identifier (argument_list "(in_stack_ffffffd4)" ( identifier ))) ;) })) (expression_statement "n = uVar6 + 1;" (assignment_expression "n = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "__s = (Bignum_conflict)safemalloc(n,4);" (assignment_expression "__s = (Bignum_conflict)safemalloc(n,4)" identifier = (cast_expression "(Bignum_conflict)safemalloc(n,4)" ( (type_descriptor "Bignum_conflict" type_identifier) ) (call_expression "safemalloc(n,4)" identifier (argument_list "(n,4)" ( identifier , number_literal ))))) ;) (expression_statement "memset(__s,0,n << 2);" (call_expression "memset(__s,0,n << 2)" identifier (argument_list "(__s,0,n << 2)" ( identifier , number_literal , (binary_expression "n << 2" identifier << number_literal) ))) ;) (expression_statement "*__s = uVar6;" (assignment_expression "*__s = uVar6" (pointer_expression "*__s" * identifier) = identifier) ;) (expression_statement "iVar3 = shift >> 5;" (assignment_expression "iVar3 = shift >> 5" identifier = (binary_expression "shift >> 5" identifier >> number_literal)) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if ((shift & 0x1fU) == 0) {\n    memcpy(__s + iVar4,a + 1,*a << 2);\n    return __s;\n  }" if (parenthesized_expression "((shift & 0x1fU) == 0)" ( (binary_expression "(shift & 0x1fU) == 0" (parenthesized_expression "(shift & 0x1fU)" ( (binary_expression "shift & 0x1fU" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    memcpy(__s + iVar4,a + 1,*a << 2);\n    return __s;\n  }" { (expression_statement "memcpy(__s + iVar4,a + 1,*a << 2);" (call_expression "memcpy(__s + iVar4,a + 1,*a << 2)" identifier (argument_list "(__s + iVar4,a + 1,*a << 2)" ( (binary_expression "__s + iVar4" identifier + identifier) , (binary_expression "a + 1" identifier + number_literal) , (binary_expression "*a << 2" (pointer_expression "*a" * identifier) << number_literal) ))) ;) (return_statement "return __s;" return identifier ;) })) (if_statement "if (0 < (int)*a) {\n    sVar2 = (sbyte)(shift & 0x1fU);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= (int)(iVar3 + *a));\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" if (parenthesized_expression "(0 < (int)*a)" ( (binary_expression "0 < (int)*a" number_literal < (cast_expression "(int)*a" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*a" * identifier))) )) (compound_statement "{\n    sVar2 = (sbyte)(shift & 0x1fU);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= (int)(iVar3 + *a));\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" { (expression_statement "sVar2 = (sbyte)(shift & 0x1fU);" (assignment_expression "sVar2 = (sbyte)(shift & 0x1fU)" identifier = (call_expression "(sbyte)(shift & 0x1fU)" (parenthesized_expression "(sbyte)" ( identifier )) (argument_list "(shift & 0x1fU)" ( (binary_expression "shift & 0x1fU" identifier & number_literal) )))) ;) (expression_statement "local_28 = 0x20 - sVar2;" (assignment_expression "local_28 = 0x20 - sVar2" identifier = (binary_expression "0x20 - sVar2" number_literal - identifier)) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= (int)(iVar3 + *a));" do (compound_statement "{\n      uVar1 = a[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    }" { (expression_statement "uVar1 = a[iVar4 - iVar3];" (assignment_expression "uVar1 = a[iVar4 - iVar3]" identifier = (subscript_expression "a[iVar4 - iVar3]" identifier [ (binary_expression "iVar4 - iVar3" identifier - identifier) ])) ;) (expression_statement "__s[iVar4] = uVar6 | uVar1 << sVar2;" (assignment_expression "__s[iVar4] = uVar6 | uVar1 << sVar2" (subscript_expression "__s[iVar4]" identifier [ identifier ]) = (binary_expression "uVar6 | uVar1 << sVar2" identifier | (binary_expression "uVar1 << sVar2" identifier << identifier))) ;) (expression_statement "uVar6 = uVar1 >> (local_28 & 0x1f);" (assignment_expression "uVar6 = uVar1 >> (local_28 & 0x1f)" identifier = (binary_expression "uVar1 >> (local_28 & 0x1f)" identifier >> (parenthesized_expression "(local_28 & 0x1f)" ( (binary_expression "local_28 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 <= (int)(iVar3 + *a))" ( (binary_expression "iVar4 <= (int)(iVar3 + *a)" identifier <= (cast_expression "(int)(iVar3 + *a)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar3 + *a)" ( (binary_expression "iVar3 + *a" identifier + (pointer_expression "*a" * identifier)) )))) )) ;) (if_statement "if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      __s[iVar4] = uVar6;\n    }" { (expression_statement "__s[iVar4] = uVar6;" (assignment_expression "__s[iVar4] = uVar6" (subscript_expression "__s[iVar4]" identifier [ identifier ]) = identifier) ;) })) })) (return_statement "return __s;" return identifier ;) })))
(translation_unit "uint * FUN_00062940(int *param_1,uint param_2)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}\n\n" (function_definition "uint * FUN_00062940(int *param_1,uint param_2)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" type_identifier (pointer_declarator "* FUN_00062940(int *param_1,uint param_2)" * (function_declarator "FUN_00062940(int *param_1,uint param_2)" identifier (parameter_list "(int *param_1,uint param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) )))) (compound_statement "{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "sbyte sVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "byte local_28;" type_identifier identifier ;) (if_statement "if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" if (parenthesized_expression "((int)param_2 < 0)" ( (binary_expression "(int)param_2 < 0" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" { (expression_statement "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");" (call_expression "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" identifier (argument_list "("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" ( (string_literal ""shift >= 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bignum_lshift"" " string_content ") ))) ;) })) (expression_statement "iVar3 = *param_1 * 0x20;" (assignment_expression "iVar3 = *param_1 * 0x20" identifier = (binary_expression "*param_1 * 0x20" (pointer_expression "*param_1" * identifier) * number_literal)) ;) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" if (parenthesized_expression "((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1]))" ( (binary_expression "(-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])" (parenthesized_expression "(-1 < iVar4)" ( (binary_expression "-1 < iVar4" number_literal < identifier) )) && (parenthesized_expression "(-1 < param_1[(iVar4 >> 5) + 1])" ( (binary_expression "-1 < param_1[(iVar4 >> 5) + 1]" number_literal < (subscript_expression "param_1[(iVar4 >> 5) + 1]" identifier [ (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" ( (binary_expression "iVar4 >> 5" identifier >> number_literal) )) + number_literal) ])) ))) )) (compound_statement "{\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" { (do_statement "do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);" do (compound_statement "{\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    }" { (expression_statement "iVar3 = iVar4;" (assignment_expression "iVar3 = iVar4" identifier = identifier) ;) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if (iVar4 == -1) break;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0)" ( (binary_expression "(uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0" (binary_expression "(uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f)" (cast_expression "(uint)param_1[(iVar4 >> 5) + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[(iVar4 >> 5) + 1]" identifier [ (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" ( (binary_expression "iVar4 >> 5" identifier >> number_literal) )) + number_literal) ])) >> (parenthesized_expression "((byte)iVar4 & 0x1f)" ( (binary_expression "(byte)iVar4 & 0x1f" (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) == number_literal) )) ;) })) (expression_statement "iVar5 = iVar3 + param_2 + 0x1f;" (assignment_expression "iVar5 = iVar3 + param_2 + 0x1f" identifier = (binary_expression "iVar3 + param_2 + 0x1f" (binary_expression "iVar3 + param_2" identifier + identifier) + number_literal)) ;) (expression_statement "iVar4 = iVar3 + param_2 + 0x3e;" (assignment_expression "iVar4 = iVar3 + param_2 + 0x3e" identifier = (binary_expression "iVar3 + param_2 + 0x3e" (binary_expression "iVar3 + param_2" identifier + identifier) + number_literal)) ;) (if_statement "if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }" if (parenthesized_expression "(-1 < iVar5)" ( (binary_expression "-1 < iVar5" number_literal < identifier) )) (compound_statement "{\n    iVar4 = iVar5;\n  }" { (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) })) (expression_statement "uVar6 = iVar4 >> 5;" (assignment_expression "uVar6 = iVar4 >> 5" identifier = (binary_expression "iVar4 >> 5" identifier >> number_literal)) ;) (if_statement "if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }" if (parenthesized_expression "(0x3fffffe < uVar6)" ( (binary_expression "0x3fffffe < uVar6" number_literal < identifier) )) (compound_statement "{\n                    \n    FUN_0005f500();\n  }" { (expression_statement "FUN_0005f500();" (call_expression "FUN_0005f500()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "__s = (uint *)FUN_000329a0(uVar6 + 1,4);" (assignment_expression "__s = (uint *)FUN_000329a0(uVar6 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar6 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar6 + 1,4)" identifier (argument_list "(uVar6 + 1,4)" ( (binary_expression "uVar6 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(__s,0,(uVar6 + 1) * 4);" (call_expression "memset(__s,0,(uVar6 + 1) * 4)" identifier (argument_list "(__s,0,(uVar6 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar6 + 1) * 4" (parenthesized_expression "(uVar6 + 1)" ( (binary_expression "uVar6 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*__s = uVar6;" (assignment_expression "*__s = uVar6" (pointer_expression "*__s" * identifier) = identifier) ;) (expression_statement "iVar3 = (int)param_2 >> 5;" (assignment_expression "iVar3 = (int)param_2 >> 5" identifier = (binary_expression "(int)param_2 >> 5" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }" if (parenthesized_expression "((param_2 & 0x1f) == 0)" ( (binary_expression "(param_2 & 0x1f) == 0" (parenthesized_expression "(param_2 & 0x1f)" ( (binary_expression "param_2 & 0x1f" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }" { (expression_statement "memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);" (call_expression "memcpy(__s + iVar4,param_1 + 1,*param_1 << 2)" identifier (argument_list "(__s + iVar4,param_1 + 1,*param_1 << 2)" ( (binary_expression "__s + iVar4" identifier + identifier) , (binary_expression "param_1 + 1" identifier + number_literal) , (binary_expression "*param_1 << 2" (pointer_expression "*param_1" * identifier) << number_literal) ))) ;) (return_statement "return __s;" return identifier ;) })) (if_statement "if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" if (parenthesized_expression "(0 < *param_1)" ( (binary_expression "0 < *param_1" number_literal < (pointer_expression "*param_1" * identifier)) )) (compound_statement "{\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" { (expression_statement "sVar2 = (sbyte)(param_2 & 0x1f);" (assignment_expression "sVar2 = (sbyte)(param_2 & 0x1f)" identifier = (call_expression "(sbyte)(param_2 & 0x1f)" (parenthesized_expression "(sbyte)" ( identifier )) (argument_list "(param_2 & 0x1f)" ( (binary_expression "param_2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "local_28 = 0x20 - sVar2;" (assignment_expression "local_28 = 0x20 - sVar2" identifier = (binary_expression "0x20 - sVar2" number_literal - identifier)) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);" do (compound_statement "{\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    }" { (expression_statement "uVar1 = param_1[iVar4 - iVar3];" (assignment_expression "uVar1 = param_1[iVar4 - iVar3]" identifier = (subscript_expression "param_1[iVar4 - iVar3]" identifier [ (binary_expression "iVar4 - iVar3" identifier - identifier) ])) ;) (expression_statement "__s[iVar4] = uVar6 | uVar1 << sVar2;" (assignment_expression "__s[iVar4] = uVar6 | uVar1 << sVar2" (subscript_expression "__s[iVar4]" identifier [ identifier ]) = (binary_expression "uVar6 | uVar1 << sVar2" identifier | (binary_expression "uVar1 << sVar2" identifier << identifier))) ;) (expression_statement "uVar6 = uVar1 >> (local_28 & 0x1f);" (assignment_expression "uVar6 = uVar1 >> (local_28 & 0x1f)" identifier = (binary_expression "uVar1 >> (local_28 & 0x1f)" identifier >> (parenthesized_expression "(local_28 & 0x1f)" ( (binary_expression "local_28 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 <= iVar3 + *param_1)" ( (binary_expression "iVar4 <= iVar3 + *param_1" identifier <= (binary_expression "iVar3 + *param_1" identifier + (pointer_expression "*param_1" * identifier))) )) ;) (if_statement "if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      __s[iVar4] = uVar6;\n    }" { (expression_statement "__s[iVar4] = uVar6;" (assignment_expression "__s[iVar4] = uVar6" (subscript_expression "__s[iVar4]" identifier [ identifier ]) = identifier) ;) })) })) (return_statement "return __s;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT) ])) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) }) while (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT) ])) >> (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) == LIT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + IDENT) , (binary_expression IDENT + LIT) , (binary_expression (pointer_expression * IDENT) << LIT) ))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression IDENT | (binary_expression IDENT << IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= (binary_expression IDENT + (pointer_expression * IDENT))) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) })) })) (return_statement return IDENT ;) })))
(function_definition "uint * FUN_00062940(int *param_1,uint param_2)\n\n{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" (type_identifier "uint") (pointer_declarator "* FUN_00062940(int *param_1,uint param_2)" (* "*") (function_declarator "FUN_00062940(int *param_1,uint param_2)" (identifier "FUN_00062940") (parameter_list "(int *param_1,uint param_2)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")")))) (compound_statement "{\n  uint uVar1;\n  sbyte sVar2;\n  int iVar3;\n  uint *__s;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  byte local_28;\n  \n  if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }\n  iVar3 = *param_1 * 0x20;\n  iVar4 = iVar3 + -1;\n  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }\n  iVar5 = iVar3 + param_2 + 0x1f;\n  iVar4 = iVar3 + param_2 + 0x3e;\n  if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }\n  uVar6 = iVar4 >> 5;\n  if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }\n  __s = (uint *)FUN_000329a0(uVar6 + 1,4);\n  memset(__s,0,(uVar6 + 1) * 4);\n  *__s = uVar6;\n  iVar3 = (int)param_2 >> 5;\n  iVar4 = iVar3 + 1;\n  if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }\n  if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }\n  return __s;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "sbyte sVar2;" (type_identifier "sbyte") (identifier "sVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint *__s;" (type_identifier "uint") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "byte local_28;" (type_identifier "byte") (identifier "local_28") (; ";")) (if_statement "if ((int)param_2 < 0) {\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" (if "if") (parenthesized_expression "((int)param_2 < 0)" (( "(") (binary_expression "(int)param_2 < 0" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");\n  }" ({ "{") (expression_statement "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");" (call_expression "__assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" (identifier "__assert_fail") (argument_list "("shift >= 0","sshbn.c",0x69b,"bignum_lshift")" (( "(") (string_literal ""shift >= 0"" (" """) (string_content "shift >= 0") (" """)) (, ",") (string_literal ""sshbn.c"" (" """) (string_content "sshbn.c") (" """)) (, ",") (number_literal "0x69b") (, ",") (string_literal ""bignum_lshift"" (" """) (string_content "bignum_lshift") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar3 = *param_1 * 0x20;" (assignment_expression "iVar3 = *param_1 * 0x20" (identifier "iVar3") (= "=") (binary_expression "*param_1 * 0x20" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (* "*") (number_literal "0x20"))) (; ";")) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" (if "if") (parenthesized_expression "((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1]))" (( "(") (binary_expression "(-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])" (parenthesized_expression "(-1 < iVar4)" (( "(") (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4")) () ")")) (&& "&&") (parenthesized_expression "(-1 < param_1[(iVar4 >> 5) + 1])" (( "(") (binary_expression "-1 < param_1[(iVar4 >> 5) + 1]" (number_literal "-1") (< "<") (subscript_expression "param_1[(iVar4 >> 5) + 1]" (identifier "param_1") ([ "[") (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" (( "(") (binary_expression "iVar4 >> 5" (identifier "iVar4") (>> ">>") (number_literal "5")) () ")")) (+ "+") (number_literal "1")) (] "]"))) () ")"))) () ")")) (compound_statement "{\n    do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);\n  }" ({ "{") (do_statement "do {\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);" (do "do") (compound_statement "{\n      iVar3 = iVar4;\n      iVar4 = iVar3 + -1;\n      if (iVar4 == -1) break;\n    }" ({ "{") (expression_statement "iVar3 = iVar4;" (assignment_expression "iVar3 = iVar4" (identifier "iVar3") (= "=") (identifier "iVar4")) (; ";")) (expression_statement "iVar4 = iVar3 + -1;" (assignment_expression "iVar4 = iVar3 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar4 == -1) break;" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (while "while") (parenthesized_expression "((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0)" (( "(") (binary_expression "(uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0" (binary_expression "(uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f)" (cast_expression "(uint)param_1[(iVar4 >> 5) + 1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[(iVar4 >> 5) + 1]" (identifier "param_1") ([ "[") (binary_expression "(iVar4 >> 5) + 1" (parenthesized_expression "(iVar4 >> 5)" (( "(") (binary_expression "iVar4 >> 5" (identifier "iVar4") (>> ">>") (number_literal "5")) () ")")) (+ "+") (number_literal "1")) (] "]"))) (>> ">>") (parenthesized_expression "((byte)iVar4 & 0x1f)" (( "(") (binary_expression "(byte)iVar4 & 0x1f" (cast_expression "(byte)iVar4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar4")) (& "&") (number_literal "0x1f")) () ")"))) (== "==") (number_literal "0")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar5 = iVar3 + param_2 + 0x1f;" (assignment_expression "iVar5 = iVar3 + param_2 + 0x1f" (identifier "iVar5") (= "=") (binary_expression "iVar3 + param_2 + 0x1f" (binary_expression "iVar3 + param_2" (identifier "iVar3") (+ "+") (identifier "param_2")) (+ "+") (number_literal "0x1f"))) (; ";")) (expression_statement "iVar4 = iVar3 + param_2 + 0x3e;" (assignment_expression "iVar4 = iVar3 + param_2 + 0x3e" (identifier "iVar4") (= "=") (binary_expression "iVar3 + param_2 + 0x3e" (binary_expression "iVar3 + param_2" (identifier "iVar3") (+ "+") (identifier "param_2")) (+ "+") (number_literal "0x3e"))) (; ";")) (if_statement "if (-1 < iVar5) {\n    iVar4 = iVar5;\n  }" (if "if") (parenthesized_expression "(-1 < iVar5)" (( "(") (binary_expression "-1 < iVar5" (number_literal "-1") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n    iVar4 = iVar5;\n  }" ({ "{") (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" (identifier "iVar4") (= "=") (identifier "iVar5")) (; ";")) (} "}"))) (expression_statement "uVar6 = iVar4 >> 5;" (assignment_expression "uVar6 = iVar4 >> 5" (identifier "uVar6") (= "=") (binary_expression "iVar4 >> 5" (identifier "iVar4") (>> ">>") (number_literal "5"))) (; ";")) (if_statement "if (0x3fffffe < uVar6) {\n                    \n    FUN_0005f500();\n  }" (if "if") (parenthesized_expression "(0x3fffffe < uVar6)" (( "(") (binary_expression "0x3fffffe < uVar6" (number_literal "0x3fffffe") (< "<") (identifier "uVar6")) () ")")) (compound_statement "{\n                    \n    FUN_0005f500();\n  }" ({ "{") (expression_statement "FUN_0005f500();" (call_expression "FUN_0005f500()" (identifier "FUN_0005f500") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "__s = (uint *)FUN_000329a0(uVar6 + 1,4);" (assignment_expression "__s = (uint *)FUN_000329a0(uVar6 + 1,4)" (identifier "__s") (= "=") (cast_expression "(uint *)FUN_000329a0(uVar6 + 1,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar6 + 1,4)" (identifier "FUN_000329a0") (argument_list "(uVar6 + 1,4)" (( "(") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1")) (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "memset(__s,0,(uVar6 + 1) * 4);" (call_expression "memset(__s,0,(uVar6 + 1) * 4)" (identifier "memset") (argument_list "(__s,0,(uVar6 + 1) * 4)" (( "(") (identifier "__s") (, ",") (number_literal "0") (, ",") (binary_expression "(uVar6 + 1) * 4" (parenthesized_expression "(uVar6 + 1)" (( "(") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "*__s = uVar6;" (assignment_expression "*__s = uVar6" (pointer_expression "*__s" (* "*") (identifier "__s")) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "iVar3 = (int)param_2 >> 5;" (assignment_expression "iVar3 = (int)param_2 >> 5" (identifier "iVar3") (= "=") (binary_expression "(int)param_2 >> 5" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (>> ">>") (number_literal "5"))) (; ";")) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((param_2 & 0x1f) == 0) {\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }" (if "if") (parenthesized_expression "((param_2 & 0x1f) == 0)" (( "(") (binary_expression "(param_2 & 0x1f) == 0" (parenthesized_expression "(param_2 & 0x1f)" (( "(") (binary_expression "param_2 & 0x1f" (identifier "param_2") (& "&") (number_literal "0x1f")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);\n    return __s;\n  }" ({ "{") (expression_statement "memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);" (call_expression "memcpy(__s + iVar4,param_1 + 1,*param_1 << 2)" (identifier "memcpy") (argument_list "(__s + iVar4,param_1 + 1,*param_1 << 2)" (( "(") (binary_expression "__s + iVar4" (identifier "__s") (+ "+") (identifier "iVar4")) (, ",") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (binary_expression "*param_1 << 2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (<< "<<") (number_literal "2")) () ")"))) (; ";")) (return_statement "return __s;" (return "return") (identifier "__s") (; ";")) (} "}"))) (if_statement "if (0 < *param_1) {\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" (if "if") (parenthesized_expression "(0 < *param_1)" (( "(") (binary_expression "0 < *param_1" (number_literal "0") (< "<") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")) (compound_statement "{\n    sVar2 = (sbyte)(param_2 & 0x1f);\n    local_28 = 0x20 - sVar2;\n    uVar6 = 0;\n    do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);\n    if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }\n  }" ({ "{") (expression_statement "sVar2 = (sbyte)(param_2 & 0x1f);" (assignment_expression "sVar2 = (sbyte)(param_2 & 0x1f)" (identifier "sVar2") (= "=") (call_expression "(sbyte)(param_2 & 0x1f)" (parenthesized_expression "(sbyte)" (( "(") (identifier "sbyte") () ")")) (argument_list "(param_2 & 0x1f)" (( "(") (binary_expression "param_2 & 0x1f" (identifier "param_2") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "local_28 = 0x20 - sVar2;" (assignment_expression "local_28 = 0x20 - sVar2" (identifier "local_28") (= "=") (binary_expression "0x20 - sVar2" (number_literal "0x20") (- "-") (identifier "sVar2"))) (; ";")) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    } while (iVar4 <= iVar3 + *param_1);" (do "do") (compound_statement "{\n      uVar1 = param_1[iVar4 - iVar3];\n      __s[iVar4] = uVar6 | uVar1 << sVar2;\n      uVar6 = uVar1 >> (local_28 & 0x1f);\n      iVar4 = iVar4 + 1;\n    }" ({ "{") (expression_statement "uVar1 = param_1[iVar4 - iVar3];" (assignment_expression "uVar1 = param_1[iVar4 - iVar3]" (identifier "uVar1") (= "=") (subscript_expression "param_1[iVar4 - iVar3]" (identifier "param_1") ([ "[") (binary_expression "iVar4 - iVar3" (identifier "iVar4") (- "-") (identifier "iVar3")) (] "]"))) (; ";")) (expression_statement "__s[iVar4] = uVar6 | uVar1 << sVar2;" (assignment_expression "__s[iVar4] = uVar6 | uVar1 << sVar2" (subscript_expression "__s[iVar4]" (identifier "__s") ([ "[") (identifier "iVar4") (] "]")) (= "=") (binary_expression "uVar6 | uVar1 << sVar2" (identifier "uVar6") (| "|") (binary_expression "uVar1 << sVar2" (identifier "uVar1") (<< "<<") (identifier "sVar2")))) (; ";")) (expression_statement "uVar6 = uVar1 >> (local_28 & 0x1f);" (assignment_expression "uVar6 = uVar1 >> (local_28 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "uVar1 >> (local_28 & 0x1f)" (identifier "uVar1") (>> ">>") (parenthesized_expression "(local_28 & 0x1f)" (( "(") (binary_expression "local_28 & 0x1f" (identifier "local_28") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + 1" (identifier "iVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar4 <= iVar3 + *param_1)" (( "(") (binary_expression "iVar4 <= iVar3 + *param_1" (identifier "iVar4") (<= "<=") (binary_expression "iVar3 + *param_1" (identifier "iVar3") (+ "+") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) () ")")) (; ";")) (if_statement "if (uVar6 != 0) {\n      __s[iVar4] = uVar6;\n    }" (if "if") (parenthesized_expression "(uVar6 != 0)" (( "(") (binary_expression "uVar6 != 0" (identifier "uVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      __s[iVar4] = uVar6;\n    }" ({ "{") (expression_statement "__s[iVar4] = uVar6;" (assignment_expression "__s[iVar4] = uVar6" (subscript_expression "__s[iVar4]" (identifier "__s") ([ "[") (identifier "iVar4") (] "]")) (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (} "}"))) (return_statement "return __s;" (return "return") (identifier "__s") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

type_1 function_1(type_1 var_13,int var_1)

{
  type_2 var_15;
  type_3 var_14;
  int var_3;
  type_1 var_12;
  int var_4;
  int var_5;
  type_2 var_6;
  int in_stack_ffffffd4;
  size_t var_10;
  type_4 var_16;
  
  if (var_1 < 0) {
                    /* WARNING: Subroutine does not return */
    var_2("shift >= 0","sshbn.c",0x69b,"bignum_lshift");
  }
  var_3 = *var_13 * 0x20;
  var_4 = var_3 + -1;
  if ((-1 < var_4) && (-1 < (int)var_13[(var_4 >> 5) + 1])) {
    do {
      var_3 = var_4;
      var_4 = var_3 + -1;
      if (var_4 == -1) break;
    } while (var_13[(var_4 >> 5) + 1] >> ((type_4)var_4 & 0x1f) == 0);
  }
  var_5 = var_3 + var_1 + 0x1f;
  var_4 = var_3 + var_1 + 0x3e;
  if (-1 < var_5) {
    var_4 = var_5;
  }
  var_6 = var_4 >> 5;
  if (0x3fffffe < var_6) {
                    /* WARNING: Subroutine does not return */
    var_7(in_stack_ffffffd4);
  }
  var_10 = var_6 + 1;
  var_12 = (type_1)var_8(var_10,4);
  var_9(var_12,0,var_10 << 2);
  *var_12 = var_6;
  var_3 = var_1 >> 5;
  var_4 = var_3 + 1;
  if ((var_1 & 0x1fU) == 0) {
    var_11(var_12 + var_4,var_13 + 1,*var_13 << 2);
    return var_12;
  }
  if (0 < (int)*var_13) {
    var_14 = (type_3)(var_1 & 0x1fU);
    var_16 = 0x20 - var_14;
    var_6 = 0;
    do {
      var_15 = var_13[var_4 - var_3];
      var_12[var_4] = var_6 | var_15 << var_14;
      var_6 = var_15 >> (var_16 & 0x1f);
      var_4 = var_4 + 1;
    } while (var_4 <= (int)(var_3 + *var_13));
    if (var_6 != 0) {
      var_12[var_4] = var_6;
    }
  }
  return var_12;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

uint * MASKED(int *param_1,uint param_2)

{
  uint uVar1;
  sbyte sVar2;
  int iVar3;
  uint *__s;
  int iVar4;
  int iVar5;
  uint uVar6;
  byte local_28;
  
  if ((int)param_2 < 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("shift >= 0","sshbn.c",0x69b,"bignum_lshift");
  }
  iVar3 = *param_1 * 0x20;
  iVar4 = iVar3 + -1;
  if ((-1 < iVar4) && (-1 < param_1[(iVar4 >> 5) + 1])) {
    do {
      iVar3 = iVar4;
      iVar4 = iVar3 + -1;
      if (iVar4 == -1) break;
    } while ((uint)param_1[(iVar4 >> 5) + 1] >> ((byte)iVar4 & 0x1f) == 0);
  }
  iVar5 = iVar3 + param_2 + 0x1f;
  iVar4 = iVar3 + param_2 + 0x3e;
  if (-1 < iVar5) {
    iVar4 = iVar5;
  }
  uVar6 = iVar4 >> 5;
  if (0x3fffffe < uVar6) {
                    /* WARNING: Subroutine does not return */
    FUN_0005f500();
  }
  __s = (uint *)FUN_000329a0(uVar6 + 1,4);
  memset(__s,0,(uVar6 + 1) * 4);
  *__s = uVar6;
  iVar3 = (int)param_2 >> 5;
  iVar4 = iVar3 + 1;
  if ((param_2 & 0x1f) == 0) {
    memcpy(__s + iVar4,param_1 + 1,*param_1 << 2);
    return __s;
  }
  if (0 < *param_1) {
    sVar2 = (sbyte)(param_2 & 0x1f);
    local_28 = 0x20 - sVar2;
    uVar6 = 0;
    do {
      uVar1 = param_1[iVar4 - iVar3];
      __s[iVar4] = uVar6 | uVar1 << sVar2;
      uVar6 = uVar1 >> (local_28 & 0x1f);
      iVar4 = iVar4 + 1;
    } while (iVar4 <= iVar3 + *param_1);
    if (uVar6 != 0) {
      __s[iVar4] = uVar6;
    }
  }
  return __s;
}

