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

BignumInt __regparm3 reciprocal_word(BignumInt d)

{
  longlong lVar1;
  uint uVar2;
  int iVar3;
  BignumInt BVar4;
  bool bVar5;
  uint local_24;
  
  if (-1 < (int)d) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");
  }
  uVar2 = (((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000;
  lVar1 = (ulonglong)
          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +
          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;
  BVar4 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;
  lVar1 = (ulonglong)(d + 1) * (ulonglong)BVar4;
  uVar2 = (uint)lVar1;
  iVar3 = (0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20);
  if (iVar3 < 0) {
    do {
      bVar5 = CARRY4(uVar2,~d + 1);
      BVar4 = BVar4 - 1;
      uVar2 = uVar2 - d;
      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;
    } while (iVar3 < 0);
    return BVar4;
  }
  for (iVar3 = (uint)CARRY4(uVar2,d) + iVar3; -1 < iVar3; iVar3 = iVar3 + (uint)CARRY4(uVar2,d)) {
    uVar2 = uVar2 + d;
    BVar4 = BVar4 + 1;
  }
  return BVar4;
}



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

uint __regparm3 FUN_00053910(uint param_1)

{
  longlong lVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  bool bVar5;
  uint local_24;
  
  if (-1 < (int)param_1) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");
  }
  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;
  lVar1 = (ulonglong)
          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +
            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;
  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;
  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;
  uVar3 = (uint)lVar1;
  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);
  if (iVar4 < 0) {
    do {
      bVar5 = CARRY4(uVar3,~param_1 + 1);
      uVar2 = uVar2 - 1;
      uVar3 = uVar3 - param_1;
      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;
    } while (iVar4 < 0);
    return uVar2;
  }
  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;
      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {
    uVar3 = uVar3 + param_1;
    uVar2 = uVar2 + 1;
  }
  return uVar2;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000149a0
ADD EBX,0x79457
SUB ESP,0x2c
MOV dword ptr [ESP + 0xc],EAX
TEST EAX,EAX
JNS 0x00053a39
MOV ECX,EAX
MOV EBX,EAX
XOR EDX,EDX
XOR EBP,EBP
SHR ECX,0x10
MOV EDI,EBX
LEA EAX,[ECX + 0x80000000]
ADD ECX,0x1
DIV ECX
MOV EDX,EBP
SHL EAX,0x10
MOV ESI,EAX
MOV EAX,EBX
ADD EAX,0x1
ADC EDX,0x0
MOV dword ptr [ESP + 0x10],EAX
MOV EAX,dword ptr [ESP + 0x10]
MOV dword ptr [ESP + 0x14],EDX
IMUL EDX,ESI
MOV EBX,EDX
MUL ESI
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x1c],EDX
ADD EDX,EBX
XOR EBX,EBX
NOT EAX
NOT EDX
MOV ECX,EAX
ADD ECX,0x1
ADC EBX,0x0
LEA ECX,[EDX + EBX*0x1]
MOV EAX,ECX
MUL ESI
MOV ECX,EDX
MOV ESI,EAX
MOV EDX,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [ESP + 0x10]
ADD ECX,ECX
SHR ESI,0x1f
OR ESI,ECX
MOV ECX,EDX
IMUL ECX,ESI
MUL ESI
MOV dword ptr [ESP + 0x10],ECX
MOV ECX,EAX
MOV EAX,dword ptr [ESP + 0x10]
ADD EAX,EDX
MOV dword ptr [ESP + 0x18],EAX
MOV EDX,EAX
MOV EAX,ECX
JS 0x00053a00
MOV dword ptr [ESP + 0x10],ECX
MOV ECX,dword ptr [ESP + 0x10]
MOV dword ptr [ESP + 0x14],0x0
MOV EBX,dword ptr [ESP + 0x14]
ADD EAX,dword ptr [ESP + 0xc]
ADD ECX,EDI
ADC EBX,EBP
MOV EDX,EBX
ADD EDX,dword ptr [ESP + 0x18]
JS 0x000539f3
NOP
MOV ECX,EAX
XOR EBX,EBX
ADD ESI,0x1
ADD EAX,dword ptr [ESP + 0xc]
ADD ECX,EDI
ADC EBX,EBP
ADD EDX,EBX
JNS 0x000539e0
ADD ESP,0x2c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,dword ptr [ESP + 0xc]
NOT EBX
MOV ECX,EBX
XOR EBX,EBX
MOV EDI,ECX
MOV EBP,EBX
ADD EDI,0x1
ADC EBP,0x0
LEA ESI,[ESI]
MOV ECX,EAX
XOR EBX,EBX
ADD ECX,EDI
ADC EBX,EBP
SUB ESI,0x1
SUB EAX,dword ptr [ESP + 0xc]
LEA EDX,[EDX + EBX*0x1 + -0x1]
TEST EDX,EDX
JS 0x00053a18
ADD ESP,0x2c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
LEA EAX,[EBX + 0xfffcccdc]
PUSH EAX
LEA EAX,[EBX + 0xfffccaf8]
PUSH 0x22c
PUSH EAX
LEA EAX,[EBX + 0xfffccb00]
PUSH EAX
CALL 0x00014880
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint __regparm3 FUN_00053910(uint param_1)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}\n\n" comment (function_definition "uint __regparm3 FUN_00053910(uint param_1)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00053910(uint param_1)" identifier (parameter_list "(uint param_1)" ( (parameter_declaration "uint param_1" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (if_statement "if (-1 < (int)param_1) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" if (parenthesized_expression "(-1 < (int)param_1)" ( (binary_expression "-1 < (int)param_1" number_literal < (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" { comment (expression_statement "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");" (call_expression "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" identifier (argument_list "("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" ( (string_literal ""d >> (BIGNUM_INT_BITS-1) == 1"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""reciprocal_word"" " string_content ") ))) ;) })) (expression_statement "uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;" (assignment_expression "uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000" identifier = (binary_expression "(((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000" (parenthesized_expression "(((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1))" ( (binary_expression "((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)" (parenthesized_expression "((param_1 >> 0x10) + 0x80000000)" ( (binary_expression "(param_1 >> 0x10) + 0x80000000" (parenthesized_expression "(param_1 >> 0x10)" ( (binary_expression "param_1 >> 0x10" identifier >> number_literal) )) + number_literal) )) / (parenthesized_expression "((param_1 >> 0x10) + 1)" ( (binary_expression "(param_1 >> 0x10) + 1" (parenthesized_expression "(param_1 >> 0x10)" ( (binary_expression "param_1 >> 0x10" identifier >> number_literal) )) + number_literal) ))) )) * number_literal)) ;) (expression_statement "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" identifier = (binary_expression "(ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" (call_expression "(ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24))" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24))" ( (binary_expression "~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)" (unary_expression "~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2)" ~ (parenthesized_expression "((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2)" ( (binary_expression "(int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2" (cast_expression "(int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20)" ( (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20" (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(param_1 + 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) + (binary_expression "(0xfffffffe < param_1) * uVar2" (parenthesized_expression "(0xfffffffe < param_1)" ( (binary_expression "0xfffffffe < param_1" number_literal < identifier) )) * identifier)) ))) + (call_expression "(uint)(0xfffffffe < ~local_24)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0xfffffffe < ~local_24)" ( (binary_expression "0xfffffffe < ~local_24" number_literal < (unary_expression "~local_24" ~ identifier)) )))) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;" (assignment_expression "uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" identifier = (binary_expression "(uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" (binary_expression "(uint)lVar1 >> 0x1f" (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) | (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * 2" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * number_literal))) ;) (expression_statement "lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2" identifier = (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(param_1 + 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar3 = (uint)lVar1;" (assignment_expression "uVar3 = (uint)lVar1" identifier = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);" (assignment_expression "iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20)" identifier = (binary_expression "(0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20)" (binary_expression "(0xfffffffe < param_1) * uVar2" (parenthesized_expression "(0xfffffffe < param_1)" ( (binary_expression "0xfffffffe < param_1" number_literal < identifier) )) * identifier) + (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) (if_statement "if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }" { (do_statement "do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);" do (compound_statement "{\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    }" { (expression_statement "bVar5 = CARRY4(uVar3,~param_1 + 1);" (assignment_expression "bVar5 = CARRY4(uVar3,~param_1 + 1)" identifier = (call_expression "CARRY4(uVar3,~param_1 + 1)" identifier (argument_list "(uVar3,~param_1 + 1)" ( identifier , (binary_expression "~param_1 + 1" (unary_expression "~param_1" ~ identifier) + number_literal) )))) ;) (expression_statement "uVar2 = uVar2 - 1;" (assignment_expression "uVar2 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ;) (expression_statement "uVar3 = uVar3 - param_1;" (assignment_expression "uVar3 = uVar3 - param_1" identifier = (binary_expression "uVar3 - param_1" identifier - identifier)) ;) (expression_statement "iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;" (assignment_expression "iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5" identifier = (binary_expression "iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5" (binary_expression "iVar4 + -1 + (uint)(0xfffffffe < ~param_1)" (binary_expression "iVar4 + -1" identifier + number_literal) + (call_expression "(uint)(0xfffffffe < ~param_1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0xfffffffe < ~param_1)" ( (binary_expression "0xfffffffe < ~param_1" number_literal < (unary_expression "~param_1" ~ identifier)) )))) + (cast_expression "(uint)bVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) }) while (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) ;) (return_statement "return uVar2;" return identifier ;) })) (for_statement "for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }" for ( (assignment_expression "iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4" identifier = (binary_expression "(uint)CARRY4(uVar3,param_1) + iVar4" (cast_expression "(uint)CARRY4(uVar3,param_1)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,param_1)" identifier (argument_list "(uVar3,param_1)" ( identifier , identifier )))) + identifier)) ; (binary_expression "-1 < iVar4" number_literal < identifier) ; (assignment_expression "iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)" identifier = (binary_expression "iVar4 + (uint)CARRY4(uVar3,param_1)" identifier + (cast_expression "(uint)CARRY4(uVar3,param_1)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,param_1)" identifier (argument_list "(uVar3,param_1)" ( identifier , identifier )))))) ) (compound_statement "{\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }" { (expression_statement "uVar3 = uVar3 + param_1;" (assignment_expression "uVar3 = uVar3 + param_1" identifier = (binary_expression "uVar3 + param_1" identifier + identifier)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nBignumInt __regparm3 reciprocal_word(BignumInt d)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  int iVar3;\n  BignumInt BVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)d) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  BVar4 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(d + 1) * (ulonglong)BVar4;\n  uVar2 = (uint)lVar1;\n  iVar3 = (0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar3 < 0) {\n    do {\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    } while (iVar3 < 0);\n    return BVar4;\n  }\n  for (iVar3 = (uint)CARRY4(uVar2,d) + iVar3; -1 < iVar3; iVar3 = iVar3 + (uint)CARRY4(uVar2,d)) {\n    uVar2 = uVar2 + d;\n    BVar4 = BVar4 + 1;\n  }\n  return BVar4;\n}\n\n" comment (function_definition "BignumInt __regparm3 reciprocal_word(BignumInt d)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  int iVar3;\n  BignumInt BVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)d) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  BVar4 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(d + 1) * (ulonglong)BVar4;\n  uVar2 = (uint)lVar1;\n  iVar3 = (0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar3 < 0) {\n    do {\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    } while (iVar3 < 0);\n    return BVar4;\n  }\n  for (iVar3 = (uint)CARRY4(uVar2,d) + iVar3; -1 < iVar3; iVar3 = iVar3 + (uint)CARRY4(uVar2,d)) {\n    uVar2 = uVar2 + d;\n    BVar4 = BVar4 + 1;\n  }\n  return BVar4;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "reciprocal_word(BignumInt d)" identifier (parameter_list "(BignumInt d)" ( (parameter_declaration "BignumInt d" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  int iVar3;\n  BignumInt BVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)d) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  BVar4 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(d + 1) * (ulonglong)BVar4;\n  uVar2 = (uint)lVar1;\n  iVar3 = (0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar3 < 0) {\n    do {\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    } while (iVar3 < 0);\n    return BVar4;\n  }\n  for (iVar3 = (uint)CARRY4(uVar2,d) + iVar3; -1 < iVar3; iVar3 = iVar3 + (uint)CARRY4(uVar2,d)) {\n    uVar2 = uVar2 + d;\n    BVar4 = BVar4 + 1;\n  }\n  return BVar4;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "BignumInt BVar4;" type_identifier identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (if_statement "if (-1 < (int)d) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" if (parenthesized_expression "(-1 < (int)d)" ( (binary_expression "-1 < (int)d" number_literal < (cast_expression "(int)d" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" { comment (expression_statement "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");" (call_expression "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" identifier (argument_list "("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" ( (string_literal ""d >> (BIGNUM_INT_BITS-1) == 1"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""reciprocal_word"" " string_content ") ))) ;) })) (expression_statement "uVar2 = (((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000;" (assignment_expression "uVar2 = (((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000" identifier = (binary_expression "(((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)) * 0x10000" (parenthesized_expression "(((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1))" ( (binary_expression "((d >> 0x10) + 0x80000000) / ((d >> 0x10) + 1)" (parenthesized_expression "((d >> 0x10) + 0x80000000)" ( (binary_expression "(d >> 0x10) + 0x80000000" (parenthesized_expression "(d >> 0x10)" ( (binary_expression "d >> 0x10" identifier >> number_literal) )) + number_literal) )) / (parenthesized_expression "((d >> 0x10) + 1)" ( (binary_expression "(d >> 0x10) + 1" (parenthesized_expression "(d >> 0x10)" ( (binary_expression "d >> 0x10" identifier >> number_literal) )) + number_literal) ))) )) * number_literal)) ;) (expression_statement "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" identifier = (binary_expression "(ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" (call_expression "(ulonglong)\n          (~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24))" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24))" ( (binary_expression "~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2) +\n          (uint)(0xfffffffe < ~local_24)" (unary_expression "~((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2)" ~ (parenthesized_expression "((int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2)" ( (binary_expression "(int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20) + (0xfffffffe < d) * uVar2" (cast_expression "(int)((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20)" ( (binary_expression "(ulonglong)(d + 1) * (ulonglong)uVar2 >> 0x20" (binary_expression "(ulonglong)(d + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(d + 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(d + 1)" ( (binary_expression "d + 1" identifier + number_literal) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) + (binary_expression "(0xfffffffe < d) * uVar2" (parenthesized_expression "(0xfffffffe < d)" ( (binary_expression "0xfffffffe < d" number_literal < identifier) )) * identifier)) ))) + (call_expression "(uint)(0xfffffffe < ~local_24)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0xfffffffe < ~local_24)" ( (binary_expression "0xfffffffe < ~local_24" number_literal < (unary_expression "~local_24" ~ identifier)) )))) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "BVar4 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;" (assignment_expression "BVar4 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" identifier = (binary_expression "(uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" (binary_expression "(uint)lVar1 >> 0x1f" (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) | (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * 2" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * number_literal))) ;) (expression_statement "lVar1 = (ulonglong)(d + 1) * (ulonglong)BVar4;" (assignment_expression "lVar1 = (ulonglong)(d + 1) * (ulonglong)BVar4" identifier = (binary_expression "(ulonglong)(d + 1) * (ulonglong)BVar4" (call_expression "(ulonglong)(d + 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(d + 1)" ( (binary_expression "d + 1" identifier + number_literal) ))) * (cast_expression "(ulonglong)BVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar2 = (uint)lVar1;" (assignment_expression "uVar2 = (uint)lVar1" identifier = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar3 = (0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20);" (assignment_expression "iVar3 = (0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20)" identifier = (binary_expression "(0xfffffffe < d) * BVar4 + (int)((ulonglong)lVar1 >> 0x20)" (binary_expression "(0xfffffffe < d) * BVar4" (parenthesized_expression "(0xfffffffe < d)" ( (binary_expression "0xfffffffe < d" number_literal < identifier) )) * identifier) + (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) (if_statement "if (iVar3 < 0) {\n    do {\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    } while (iVar3 < 0);\n    return BVar4;\n  }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n    do {\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    } while (iVar3 < 0);\n    return BVar4;\n  }" { (do_statement "do {\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    } while (iVar3 < 0);" do (compound_statement "{\n      bVar5 = CARRY4(uVar2,~d + 1);\n      BVar4 = BVar4 - 1;\n      uVar2 = uVar2 - d;\n      iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;\n    }" { (expression_statement "bVar5 = CARRY4(uVar2,~d + 1);" (assignment_expression "bVar5 = CARRY4(uVar2,~d + 1)" identifier = (call_expression "CARRY4(uVar2,~d + 1)" identifier (argument_list "(uVar2,~d + 1)" ( identifier , (binary_expression "~d + 1" (unary_expression "~d" ~ identifier) + number_literal) )))) ;) (expression_statement "BVar4 = BVar4 - 1;" (assignment_expression "BVar4 = BVar4 - 1" identifier = (binary_expression "BVar4 - 1" identifier - number_literal)) ;) (expression_statement "uVar2 = uVar2 - d;" (assignment_expression "uVar2 = uVar2 - d" identifier = (binary_expression "uVar2 - d" identifier - identifier)) ;) (expression_statement "iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5;" (assignment_expression "iVar3 = iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5" identifier = (binary_expression "iVar3 + -1 + (uint)(0xfffffffe < ~d) + (uint)bVar5" (binary_expression "iVar3 + -1 + (uint)(0xfffffffe < ~d)" (binary_expression "iVar3 + -1" identifier + number_literal) + (call_expression "(uint)(0xfffffffe < ~d)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0xfffffffe < ~d)" ( (binary_expression "0xfffffffe < ~d" number_literal < (unary_expression "~d" ~ identifier)) )))) + (cast_expression "(uint)bVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) }) while (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) ;) (return_statement "return BVar4;" return identifier ;) })) (for_statement "for (iVar3 = (uint)CARRY4(uVar2,d) + iVar3; -1 < iVar3; iVar3 = iVar3 + (uint)CARRY4(uVar2,d)) {\n    uVar2 = uVar2 + d;\n    BVar4 = BVar4 + 1;\n  }" for ( (assignment_expression "iVar3 = (uint)CARRY4(uVar2,d) + iVar3" identifier = (binary_expression "(uint)CARRY4(uVar2,d) + iVar3" (cast_expression "(uint)CARRY4(uVar2,d)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar2,d)" identifier (argument_list "(uVar2,d)" ( identifier , identifier )))) + identifier)) ; (binary_expression "-1 < iVar3" number_literal < identifier) ; (assignment_expression "iVar3 = iVar3 + (uint)CARRY4(uVar2,d)" identifier = (binary_expression "iVar3 + (uint)CARRY4(uVar2,d)" identifier + (cast_expression "(uint)CARRY4(uVar2,d)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar2,d)" identifier (argument_list "(uVar2,d)" ( identifier , identifier )))))) ) (compound_statement "{\n    uVar2 = uVar2 + d;\n    BVar4 = BVar4 + 1;\n  }" { (expression_statement "uVar2 = uVar2 + d;" (assignment_expression "uVar2 = uVar2 + d" identifier = (binary_expression "uVar2 + d" identifier + identifier)) ;) (expression_statement "BVar4 = BVar4 + 1;" (assignment_expression "BVar4 = BVar4 + 1" identifier = (binary_expression "BVar4 + 1" identifier + number_literal)) ;) })) (return_statement "return BVar4;" return identifier ;) })))
(translation_unit "uint __regparm3 FUN_00053910(uint param_1)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}\n\n" (function_definition "uint __regparm3 FUN_00053910(uint param_1)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00053910(uint param_1)" identifier (parameter_list "(uint param_1)" ( (parameter_declaration "uint param_1" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (if_statement "if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" if (parenthesized_expression "(-1 < (int)param_1)" ( (binary_expression "-1 < (int)param_1" number_literal < (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" { (expression_statement "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");" (call_expression "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" identifier (argument_list "("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" ( (string_literal ""d >> (BIGNUM_INT_BITS-1) == 1"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""reciprocal_word"" " string_content ") ))) ;) })) (expression_statement "uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;" (assignment_expression "uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000" identifier = (binary_expression "(((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000" (parenthesized_expression "(((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1))" ( (binary_expression "((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)" (parenthesized_expression "((param_1 >> 0x10) + 0x80000000)" ( (binary_expression "(param_1 >> 0x10) + 0x80000000" (parenthesized_expression "(param_1 >> 0x10)" ( (binary_expression "param_1 >> 0x10" identifier >> number_literal) )) + number_literal) )) / (parenthesized_expression "((param_1 >> 0x10) + 1)" ( (binary_expression "(param_1 >> 0x10) + 1" (parenthesized_expression "(param_1 >> 0x10)" ( (binary_expression "param_1 >> 0x10" identifier >> number_literal) )) + number_literal) ))) )) * number_literal)) ;) (expression_statement "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" identifier = (binary_expression "(ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" (call_expression "(ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24))" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24))" ( (binary_expression "~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)" (unary_expression "~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2)" ~ (parenthesized_expression "((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2)" ( (binary_expression "(int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2" (cast_expression "(int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20)" ( (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20" (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(param_1 + 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) + (binary_expression "(0xfffffffe < param_1) * uVar2" (parenthesized_expression "(0xfffffffe < param_1)" ( (binary_expression "0xfffffffe < param_1" number_literal < identifier) )) * identifier)) ))) + (call_expression "(uint)(0xfffffffe < ~local_24)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0xfffffffe < ~local_24)" ( (binary_expression "0xfffffffe < ~local_24" number_literal < (unary_expression "~local_24" ~ identifier)) )))) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;" (assignment_expression "uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" identifier = (binary_expression "(uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" (binary_expression "(uint)lVar1 >> 0x1f" (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) | (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * 2" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * number_literal))) ;) (expression_statement "lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2" identifier = (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(param_1 + 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) * (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar3 = (uint)lVar1;" (assignment_expression "uVar3 = (uint)lVar1" identifier = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);" (assignment_expression "iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20)" identifier = (binary_expression "(0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20)" (binary_expression "(0xfffffffe < param_1) * uVar2" (parenthesized_expression "(0xfffffffe < param_1)" ( (binary_expression "0xfffffffe < param_1" number_literal < identifier) )) * identifier) + (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) (if_statement "if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }" { (do_statement "do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);" do (compound_statement "{\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    }" { (expression_statement "bVar5 = CARRY4(uVar3,~param_1 + 1);" (assignment_expression "bVar5 = CARRY4(uVar3,~param_1 + 1)" identifier = (call_expression "CARRY4(uVar3,~param_1 + 1)" identifier (argument_list "(uVar3,~param_1 + 1)" ( identifier , (binary_expression "~param_1 + 1" (unary_expression "~param_1" ~ identifier) + number_literal) )))) ;) (expression_statement "uVar2 = uVar2 - 1;" (assignment_expression "uVar2 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ;) (expression_statement "uVar3 = uVar3 - param_1;" (assignment_expression "uVar3 = uVar3 - param_1" identifier = (binary_expression "uVar3 - param_1" identifier - identifier)) ;) (expression_statement "iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;" (assignment_expression "iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5" identifier = (binary_expression "iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5" (binary_expression "iVar4 + -1 + (uint)(0xfffffffe < ~param_1)" (binary_expression "iVar4 + -1" identifier + number_literal) + (call_expression "(uint)(0xfffffffe < ~param_1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0xfffffffe < ~param_1)" ( (binary_expression "0xfffffffe < ~param_1" number_literal < (unary_expression "~param_1" ~ identifier)) )))) + (cast_expression "(uint)bVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) }) while (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) ;) (return_statement "return uVar2;" return identifier ;) })) (for_statement "for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }" for ( (assignment_expression "iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4" identifier = (binary_expression "(uint)CARRY4(uVar3,param_1) + iVar4" (cast_expression "(uint)CARRY4(uVar3,param_1)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,param_1)" identifier (argument_list "(uVar3,param_1)" ( identifier , identifier )))) + identifier)) ; (binary_expression "-1 < iVar4" number_literal < identifier) ; (assignment_expression "iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)" identifier = (binary_expression "iVar4 + (uint)CARRY4(uVar3,param_1)" identifier + (cast_expression "(uint)CARRY4(uVar3,param_1)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,param_1)" identifier (argument_list "(uVar3,param_1)" ( identifier , identifier )))))) ) (compound_statement "{\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }" { (expression_statement "uVar3 = uVar3 + param_1;" (assignment_expression "uVar3 = uVar3 + param_1" identifier = (binary_expression "uVar3 + param_1" identifier + identifier)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE 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 LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (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 (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT) )) / (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT) ))) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (unary_expression ~ (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT) ))) + (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) * IDENT)) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < (unary_expression ~ IDENT)) )))) ))) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) | (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) * IDENT) + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (unary_expression ~ IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT + LIT) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < (unary_expression ~ IDENT)) )))) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < LIT) )) ;) (return_statement return IDENT ;) })) (for_statement for ( (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + IDENT)) ; (binary_expression LIT < IDENT) ; (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (return_statement return IDENT ;) })))
(function_definition "uint __regparm3 FUN_00053910(uint param_1)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}" (type_identifier "uint") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00053910(uint param_1)" (identifier "FUN_00053910") (parameter_list "(uint param_1)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) () ")"))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  bool bVar5;\n  uint local_24;\n  \n  if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }\n  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;\n  lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;\n  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;\n  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;\n  uVar3 = (uint)lVar1;\n  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);\n  if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }\n  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }\n  return uVar2;\n}" ({ "{") (declaration "longlong lVar1;" (type_identifier "longlong") (identifier "lVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "bool bVar5;" (primitive_type "bool") (identifier "bVar5") (; ";")) (declaration "uint local_24;" (type_identifier "uint") (identifier "local_24") (; ";")) (if_statement "if (-1 < (int)param_1) {\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" (if "if") (parenthesized_expression "(-1 < (int)param_1)" (( "(") (binary_expression "-1 < (int)param_1" (number_literal "-1") (< "<") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")")) (compound_statement "{\n                    \n    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");\n  }" ({ "{") (expression_statement "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");" (call_expression "__assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" (identifier "__assert_fail") (argument_list "("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word")" (( "(") (string_literal ""d >> (BIGNUM_INT_BITS-1) == 1"" (" """) (string_content "d >> (BIGNUM_INT_BITS-1) == 1") (" """)) (, ",") (string_literal ""sshbn.c"" (" """) (string_content "sshbn.c") (" """)) (, ",") (number_literal "0x22c") (, ",") (string_literal ""reciprocal_word"" (" """) (string_content "reciprocal_word") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;" (assignment_expression "uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000" (identifier "uVar2") (= "=") (binary_expression "(((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000" (parenthesized_expression "(((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1))" (( "(") (binary_expression "((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)" (parenthesized_expression "((param_1 >> 0x10) + 0x80000000)" (( "(") (binary_expression "(param_1 >> 0x10) + 0x80000000" (parenthesized_expression "(param_1 >> 0x10)" (( "(") (binary_expression "param_1 >> 0x10" (identifier "param_1") (>> ">>") (number_literal "0x10")) () ")")) (+ "+") (number_literal "0x80000000")) () ")")) (/ "/") (parenthesized_expression "((param_1 >> 0x10) + 1)" (( "(") (binary_expression "(param_1 >> 0x10) + 1" (parenthesized_expression "(param_1 >> 0x10)" (( "(") (binary_expression "param_1 >> 0x10" (identifier "param_1") (>> ">>") (number_literal "0x10")) () ")")) (+ "+") (number_literal "1")) () ")"))) () ")")) (* "*") (number_literal "0x10000"))) (; ";")) (expression_statement "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2" (call_expression "(ulonglong)\n          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24))" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24))" (( "(") (binary_expression "~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)" (unary_expression "~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2)" (~ "~") (parenthesized_expression "((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2)" (( "(") (binary_expression "(int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +\n            (0xfffffffe < param_1) * uVar2" (cast_expression "(int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20" (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(param_1 + 1)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")"))) (* "*") (cast_expression "(ulonglong)uVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar2"))) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (binary_expression "(0xfffffffe < param_1) * uVar2" (parenthesized_expression "(0xfffffffe < param_1)" (( "(") (binary_expression "0xfffffffe < param_1" (number_literal "0xfffffffe") (< "<") (identifier "param_1")) () ")")) (* "*") (identifier "uVar2"))) () ")"))) (+ "+") (call_expression "(uint)(0xfffffffe < ~local_24)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(0xfffffffe < ~local_24)" (( "(") (binary_expression "0xfffffffe < ~local_24" (number_literal "0xfffffffe") (< "<") (unary_expression "~local_24" (~ "~") (identifier "local_24"))) () ")")))) () ")"))) (* "*") (cast_expression "(ulonglong)uVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar2")))) (; ";")) (expression_statement "uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;" (assignment_expression "uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" (identifier "uVar2") (= "=") (binary_expression "(uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2" (binary_expression "(uint)lVar1 >> 0x1f" (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x1f")) (| "|") (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * 2" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")"))) (* "*") (number_literal "2")))) (; ";")) (expression_statement "lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;" (assignment_expression "lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)(param_1 + 1) * (ulonglong)uVar2" (call_expression "(ulonglong)(param_1 + 1)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")"))) (* "*") (cast_expression "(ulonglong)uVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar2")))) (; ";")) (expression_statement "uVar3 = (uint)lVar1;" (assignment_expression "uVar3 = (uint)lVar1" (identifier "uVar3") (= "=") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) (; ";")) (expression_statement "iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);" (assignment_expression "iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20)" (identifier "iVar4") (= "=") (binary_expression "(0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20)" (binary_expression "(0xfffffffe < param_1) * uVar2" (parenthesized_expression "(0xfffffffe < param_1)" (( "(") (binary_expression "0xfffffffe < param_1" (number_literal "0xfffffffe") (< "<") (identifier "param_1")) () ")")) (* "*") (identifier "uVar2")) (+ "+") (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if (iVar4 < 0) {\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }" (if "if") (parenthesized_expression "(iVar4 < 0)" (( "(") (binary_expression "iVar4 < 0" (identifier "iVar4") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);\n    return uVar2;\n  }" ({ "{") (do_statement "do {\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    } while (iVar4 < 0);" (do "do") (compound_statement "{\n      bVar5 = CARRY4(uVar3,~param_1 + 1);\n      uVar2 = uVar2 - 1;\n      uVar3 = uVar3 - param_1;\n      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;\n    }" ({ "{") (expression_statement "bVar5 = CARRY4(uVar3,~param_1 + 1);" (assignment_expression "bVar5 = CARRY4(uVar3,~param_1 + 1)" (identifier "bVar5") (= "=") (call_expression "CARRY4(uVar3,~param_1 + 1)" (identifier "CARRY4") (argument_list "(uVar3,~param_1 + 1)" (( "(") (identifier "uVar3") (, ",") (binary_expression "~param_1 + 1" (unary_expression "~param_1" (~ "~") (identifier "param_1")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "uVar2 = uVar2 - 1;" (assignment_expression "uVar2 = uVar2 - 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 - 1" (identifier "uVar2") (- "-") (number_literal "1"))) (; ";")) (expression_statement "uVar3 = uVar3 - param_1;" (assignment_expression "uVar3 = uVar3 - param_1" (identifier "uVar3") (= "=") (binary_expression "uVar3 - param_1" (identifier "uVar3") (- "-") (identifier "param_1"))) (; ";")) (expression_statement "iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;" (assignment_expression "iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5" (binary_expression "iVar4 + -1 + (uint)(0xfffffffe < ~param_1)" (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1")) (+ "+") (call_expression "(uint)(0xfffffffe < ~param_1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(0xfffffffe < ~param_1)" (( "(") (binary_expression "0xfffffffe < ~param_1" (number_literal "0xfffffffe") (< "<") (unary_expression "~param_1" (~ "~") (identifier "param_1"))) () ")")))) (+ "+") (cast_expression "(uint)bVar5" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar5")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar4 < 0)" (( "(") (binary_expression "iVar4 < 0" (identifier "iVar4") (< "<") (number_literal "0")) () ")")) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (for_statement "for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;\n      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }" (for "for") (( "(") (assignment_expression "iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4" (identifier "iVar4") (= "=") (binary_expression "(uint)CARRY4(uVar3,param_1) + iVar4" (cast_expression "(uint)CARRY4(uVar3,param_1)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar3,param_1)" (identifier "CARRY4") (argument_list "(uVar3,param_1)" (( "(") (identifier "uVar3") (, ",") (identifier "param_1") () ")")))) (+ "+") (identifier "iVar4"))) (; ";") (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4")) (; ";") (assignment_expression "iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)" (identifier "iVar4") (= "=") (binary_expression "iVar4 + (uint)CARRY4(uVar3,param_1)" (identifier "iVar4") (+ "+") (cast_expression "(uint)CARRY4(uVar3,param_1)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar3,param_1)" (identifier "CARRY4") (argument_list "(uVar3,param_1)" (( "(") (identifier "uVar3") (, ",") (identifier "param_1") () ")")))))) () ")") (compound_statement "{\n    uVar3 = uVar3 + param_1;\n    uVar2 = uVar2 + 1;\n  }" ({ "{") (expression_statement "uVar3 = uVar3 + param_1;" (assignment_expression "uVar3 = uVar3 + param_1" (identifier "uVar3") (= "=") (binary_expression "uVar3 + param_1" (identifier "uVar3") (+ "+") (identifier "param_1"))) (; ";")) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

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

type_1 __regparm3 function_1(type_1 var_2)

{
  type_2 lVar1;
  type_3 var_3;
  int var_5;
  type_1 var_4;
  bool bVar5;
  type_3 local_24;
  
  if (-1 < (int)var_2) {
                    /* WARNING: Subroutine does not return */
    var_1("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");
  }
  var_3 = (((var_2 >> 0x10) + 0x80000000) / ((var_2 >> 0x10) + 1)) * 0x10000;
  lVar1 = (type_4)
          (~((int)((type_4)(var_2 + 1) * (type_4)var_3 >> 0x20) + (0xfffffffe < var_2) * var_3) +
          (type_3)(0xfffffffe < ~local_24)) * (type_4)var_3;
  var_4 = (type_3)lVar1 >> 0x1f | (int)((type_4)lVar1 >> 0x20) * 2;
  lVar1 = (type_4)(var_2 + 1) * (type_4)var_4;
  var_3 = (type_3)lVar1;
  var_5 = (0xfffffffe < var_2) * var_4 + (int)((type_4)lVar1 >> 0x20);
  if (var_5 < 0) {
    do {
      bVar5 = var_6(var_3,~var_2 + 1);
      var_4 = var_4 - 1;
      var_3 = var_3 - var_2;
      var_5 = var_5 + -1 + (type_3)(0xfffffffe < ~var_2) + (type_3)bVar5;
    } while (var_5 < 0);
    return var_4;
  }
  for (var_5 = (type_3)var_6(var_3,var_2) + var_5; -1 < var_5; var_5 = var_5 + (type_3)var_6(var_3,var_2)) {
    var_3 = var_3 + var_2;
    var_4 = var_4 + 1;
  }
  return var_4;
}


(translation_unit (function_definition type: (type_identifier) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) 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: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (unary_expression argument: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (number_literal)))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (identifier))))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (unary_expression argument: (identifier)))))))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (unary_expression argument: (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: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (unary_expression argument: (identifier)))))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (return_statement (identifier)))) (for_statement initializer: (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (identifier))) condition: (binary_expression left: (number_literal) right: (identifier)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (return_statement (identifier)))))

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

uint __regparm3 MASKED(uint param_1)

{
  longlong lVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  bool bVar5;
  uint local_24;
  
  if (-1 < (int)param_1) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("d >> (BIGNUM_INT_BITS-1) == 1","sshbn.c",0x22c,"reciprocal_word");
  }
  uVar2 = (((param_1 >> 0x10) + 0x80000000) / ((param_1 >> 0x10) + 1)) * 0x10000;
  lVar1 = (ulonglong)
          (~((int)((ulonglong)(param_1 + 1) * (ulonglong)uVar2 >> 0x20) +
            (0xfffffffe < param_1) * uVar2) + (uint)(0xfffffffe < ~local_24)) * (ulonglong)uVar2;
  uVar2 = (uint)lVar1 >> 0x1f | (int)((ulonglong)lVar1 >> 0x20) * 2;
  lVar1 = (ulonglong)(param_1 + 1) * (ulonglong)uVar2;
  uVar3 = (uint)lVar1;
  iVar4 = (0xfffffffe < param_1) * uVar2 + (int)((ulonglong)lVar1 >> 0x20);
  if (iVar4 < 0) {
    do {
      bVar5 = CARRY4(uVar3,~param_1 + 1);
      uVar2 = uVar2 - 1;
      uVar3 = uVar3 - param_1;
      iVar4 = iVar4 + -1 + (uint)(0xfffffffe < ~param_1) + (uint)bVar5;
    } while (iVar4 < 0);
    return uVar2;
  }
  for (iVar4 = (uint)CARRY4(uVar3,param_1) + iVar4; -1 < iVar4;
      iVar4 = iVar4 + (uint)CARRY4(uVar3,param_1)) {
    uVar3 = uVar3 + param_1;
    uVar2 = uVar2 + 1;
  }
  return uVar2;
}

