
/* WARNING: Unknown calling convention */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

CURLcode Curl_speedcheck(Curl_easy *data,curltime now)

{
  int iVar1;
  uint uVar2;
  timediff_t tVar3;
  int iVar4;
  uint uVar5;
  int unaff_EDI;
  
  __x86_get_pc_thunk_di();
  iVar1 = *(int *)((int)&(data->progress).current_speed + 4);
  uVar5 = (data->set).low_speed_limit;
  if ((-1 < iVar1) && ((data->set).low_speed_time != 0)) {
    uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);
    iVar4 = iVar1 - ((int)uVar5 >> 0x1f);
    if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {
      (data->state).keeps_speed.tv_sec = 0;
    }
    else if ((data->state).keeps_speed.tv_sec == 0) {
      (data->state).keeps_speed.tv_sec = now.tv_sec;
      (data->state).keeps_speed.tv_usec = now.tv_usec;
    }
    else {
      tVar3 = Curl_timediff(now,(data->state).keeps_speed);
      iVar1 = (data->set).low_speed_time;
      iVar4 = iVar1 * 1000;
      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {
        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);
        return CURLE_OPERATION_TIMEDOUT;
      }
      uVar5 = (data->set).low_speed_limit;
    }
  }
  if (uVar5 == 0) {
    return CURLE_OK;
  }
  Curl_expire(data,1000,EXPIRE_SPEEDCHECK);
  return CURLE_OK;
}



undefined4 FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int unaff_EDI;
  
  FUN_0002eb2c();
  iVar2 = *(int *)(param_1 + 0xb68);
  uVar4 = *(uint *)(param_1 + 0x658);
  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {
    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);
    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);
    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {
      *(undefined4 *)(param_1 + 0xc54) = 0;
    }
    else if (*(int *)(param_1 + 0xc54) == 0) {
      *(undefined4 *)(param_1 + 0xc54) = param_2;
      *(undefined4 *)(param_1 + 0xc58) = param_3;
    }
    else {
      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),
                           *(undefined4 *)(param_1 + 0xc58));
      iVar3 = *(int *)(param_1 + 0x65c) * 1000;
      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {
        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),
                     *(int *)(param_1 + 0x65c));
        return 0x1c;
      }
      uVar4 = *(uint *)(param_1 + 0x658);
    }
  }
  if (uVar4 == 0) {
    return 0;
  }
  FUN_00046bc0(param_1,1000,7);
  return 0;
}


PUSH EBP
PUSH EDI
CALL 0x0002eb2c
ADD EDI,0x815f9
PUSH ESI
PUSH EBX
SUB ESP,0xc
MOV ESI,dword ptr [ESP + 0x20]
MOV EAX,dword ptr [ESI + 0xb68]
MOV EBP,dword ptr [ESI + 0xb64]
MOV EDX,dword ptr [ESI + 0x658]
TEST EAX,EAX
JS 0x00035216
MOV ECX,dword ptr [ESI + 0x65c]
TEST ECX,ECX
JNZ 0x00035230
XOR EBP,EBP
TEST EDX,EDX
JNZ 0x00035260
ADD ESP,0xc
MOV EAX,EBP
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,EDX
SAR EBX,0x1f
CMP EBP,EDX
SBB EAX,EBX
JGE 0x00035280
MOV EAX,dword ptr [ESI + 0xc54]
TEST EAX,EAX
JNZ 0x00035290
MOV ECX,dword ptr [ESP + 0x24]
MOV EBX,dword ptr [ESP + 0x28]
MOV dword ptr [ESI + 0xc54],ECX
MOV dword ptr [ESI + 0xc58],EBX
JMP 0x00035216
SUB ESP,0x4
MOV EBX,EDI
PUSH 0x7
PUSH 0x3e8
PUSH ESI
CALL 0x00046bc0
ADD ESP,0x10
MOV EAX,EBP
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV dword ptr [ESI + 0xc54],0x0
JMP 0x00035216
PUSH dword ptr [ESI + 0xc58]
MOV EBX,EDI
PUSH dword ptr [ESI + 0xc54]
PUSH dword ptr [ESP + 0x30]
PUSH dword ptr [ESP + 0x30]
CALL 0x0001ac30
MOV EDX,dword ptr [ESI + 0x65c]
ADD ESP,0x10
IMUL ECX,EDX,0x3e8
CMP ECX,EAX
JLE 0x000352c9
MOV EDX,dword ptr [ESI + 0x658]
JMP 0x00035216
LEA EAX,[EDI + 0xfffcf2d8]
PUSH EDX
MOV EBP,0x1c
PUSH dword ptr [ESI + 0x658]
PUSH EAX
PUSH ESI
CALL 0x00027d40
ADD ESP,0x10
JMP 0x0003521c
(translation_unit "undefined4 FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}" type_identifier (function_declarator "FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_0002eb2c();" (call_expression "FUN_0002eb2c()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0xb68);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xb68)" identifier = (pointer_expression "*(int *)(param_1 + 0xb68)" * (cast_expression "(int *)(param_1 + 0xb68)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb68)" ( (binary_expression "param_1 + 0xb68" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(param_1 + 0x658);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x658)" identifier = (pointer_expression "*(uint *)(param_1 + 0x658)" * (cast_expression "(uint *)(param_1 + 0x658)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x658)" ( (binary_expression "param_1 + 0x658" identifier + number_literal) ))))) ;) (if_statement "if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }" if (parenthesized_expression "((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0))" ( (binary_expression "(-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)" (parenthesized_expression "(-1 < iVar2)" ( (binary_expression "-1 < iVar2" number_literal < identifier) )) && (parenthesized_expression "(*(int *)(param_1 + 0x65c) != 0)" ( (binary_expression "*(int *)(param_1 + 0x65c) != 0" (pointer_expression "*(int *)(param_1 + 0x65c)" * (cast_expression "(int *)(param_1 + 0x65c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x65c)" ( (binary_expression "param_1 + 0x65c" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }" { (expression_statement "uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);" (assignment_expression "uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4)" identifier = (call_expression "(uint)(*(uint *)(param_1 + 0xb64) < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 0xb64) < uVar4)" ( (binary_expression "*(uint *)(param_1 + 0xb64) < uVar4" (pointer_expression "*(uint *)(param_1 + 0xb64)" * (cast_expression "(uint *)(param_1 + 0xb64)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb64)" ( (binary_expression "param_1 + 0xb64" identifier + number_literal) )))) < identifier) )))) ;) (expression_statement "iVar3 = iVar2 - ((int)uVar4 >> 0x1f);" (assignment_expression "iVar3 = iVar2 - ((int)uVar4 >> 0x1f)" identifier = (binary_expression "iVar2 - ((int)uVar4 >> 0x1f)" identifier - (parenthesized_expression "((int)uVar4 >> 0x1f)" ( (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" if (parenthesized_expression "((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0)" ( (binary_expression "(SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0" (parenthesized_expression "(SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1))" ( (binary_expression "SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)" (call_expression "SBORROW4(iVar2,(int)uVar4 >> 0x1f)" identifier (argument_list "(iVar2,(int)uVar4 >> 0x1f)" ( identifier , (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) != (call_expression "SBORROW4(iVar3,uVar1)" identifier (argument_list "(iVar3,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar3 - uVar1) < 0" (cast_expression "(int)(iVar3 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar3 - uVar1)" ( (binary_expression "iVar3 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0xc54) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0xc54) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" * (cast_expression "(undefined4 *)(param_1 + 0xc54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" else (if_statement "if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0xc54) == 0)" ( (binary_expression "*(int *)(param_1 + 0xc54) == 0" (pointer_expression "*(int *)(param_1 + 0xc54)" * (cast_expression "(int *)(param_1 + 0xc54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0xc54) = param_2;" (assignment_expression "*(undefined4 *)(param_1 + 0xc54) = param_2" (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" * (cast_expression "(undefined4 *)(param_1 + 0xc54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_1 + 0xc58) = param_3;" (assignment_expression "*(undefined4 *)(param_1 + 0xc58) = param_3" (pointer_expression "*(undefined4 *)(param_1 + 0xc58)" * (cast_expression "(undefined4 *)(param_1 + 0xc58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc58)" ( (binary_expression "param_1 + 0xc58" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" else (compound_statement "{\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" { (expression_statement "iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));" (assignment_expression "iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" identifier = (call_expression "FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" identifier (argument_list "(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" * (cast_expression "(undefined4 *)(param_1 + 0xc54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc58)" * (cast_expression "(undefined4 *)(param_1 + 0xc58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc58)" ( (binary_expression "param_1 + 0xc58" identifier + number_literal) )))) )))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x65c) * 1000;" (assignment_expression "iVar3 = *(int *)(param_1 + 0x65c) * 1000" identifier = (binary_expression "*(int *)(param_1 + 0x65c) * 1000" (pointer_expression "*(int *)(param_1 + 0x65c)" * (cast_expression "(int *)(param_1 + 0x65c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x65c)" ( (binary_expression "param_1 + 0x65c" identifier + number_literal) )))) * number_literal)) ;) (if_statement "if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }" if (parenthesized_expression "(iVar3 - iVar2 == 0 || iVar3 < iVar2)" ( (binary_expression "iVar3 - iVar2 == 0 || iVar3 < iVar2" (binary_expression "iVar3 - iVar2 == 0" (binary_expression "iVar3 - iVar2" identifier - identifier) == number_literal) || (binary_expression "iVar3 < iVar2" identifier < identifier)) )) (compound_statement "{\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }" { (expression_statement "FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));" (call_expression "FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c))" identifier (argument_list "(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c))" ( identifier , (binary_expression "unaff_EDI + 0x508d1" identifier + number_literal) , (pointer_expression "*(undefined4 *)(param_1 + 0x658)" * (cast_expression "(undefined4 *)(param_1 + 0x658)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x658)" ( (binary_expression "param_1 + 0x658" identifier + number_literal) )))) , (pointer_expression "*(int *)(param_1 + 0x65c)" * (cast_expression "(int *)(param_1 + 0x65c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x65c)" ( (binary_expression "param_1 + 0x65c" identifier + number_literal) )))) ))) ;) (return_statement "return 0x1c;" return number_literal ;) })) (expression_statement "uVar4 = *(uint *)(param_1 + 0x658);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x658)" identifier = (pointer_expression "*(uint *)(param_1 + 0x658)" * (cast_expression "(uint *)(param_1 + 0x658)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x658)" ( (binary_expression "param_1 + 0x658" identifier + number_literal) ))))) ;) }))))) })) (if_statement "if (uVar4 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00046bc0(param_1,1000,7);" (call_expression "FUN_00046bc0(param_1,1000,7)" identifier (argument_list "(param_1,1000,7)" ( identifier , number_literal , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nCURLcode Curl_speedcheck(Curl_easy *data,curltime now)\n\n{\n  int iVar1;\n  uint uVar2;\n  timediff_t tVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  iVar1 = *(int *)((int)&(data->progress).current_speed + 4);\n  uVar5 = (data->set).low_speed_limit;\n  if ((-1 < iVar1) && ((data->set).low_speed_time != 0)) {\n    uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);\n    iVar4 = iVar1 - ((int)uVar5 >> 0x1f);\n    if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {\n      (data->state).keeps_speed.tv_sec = 0;\n    }\n    else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }\n  }\n  if (uVar5 == 0) {\n    return CURLE_OK;\n  }\n  Curl_expire(data,1000,EXPIRE_SPEEDCHECK);\n  return CURLE_OK;\n}\n\n" comment comment (function_definition "CURLcode Curl_speedcheck(Curl_easy *data,curltime now)\n\n{\n  int iVar1;\n  uint uVar2;\n  timediff_t tVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  iVar1 = *(int *)((int)&(data->progress).current_speed + 4);\n  uVar5 = (data->set).low_speed_limit;\n  if ((-1 < iVar1) && ((data->set).low_speed_time != 0)) {\n    uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);\n    iVar4 = iVar1 - ((int)uVar5 >> 0x1f);\n    if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {\n      (data->state).keeps_speed.tv_sec = 0;\n    }\n    else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }\n  }\n  if (uVar5 == 0) {\n    return CURLE_OK;\n  }\n  Curl_expire(data,1000,EXPIRE_SPEEDCHECK);\n  return CURLE_OK;\n}" type_identifier (function_declarator "Curl_speedcheck(Curl_easy *data,curltime now)" identifier (parameter_list "(Curl_easy *data,curltime now)" ( (parameter_declaration "Curl_easy *data" type_identifier (pointer_declarator "*data" * identifier)) , (parameter_declaration "curltime now" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  timediff_t tVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  iVar1 = *(int *)((int)&(data->progress).current_speed + 4);\n  uVar5 = (data->set).low_speed_limit;\n  if ((-1 < iVar1) && ((data->set).low_speed_time != 0)) {\n    uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);\n    iVar4 = iVar1 - ((int)uVar5 >> 0x1f);\n    if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {\n      (data->state).keeps_speed.tv_sec = 0;\n    }\n    else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }\n  }\n  if (uVar5 == 0) {\n    return CURLE_OK;\n  }\n  Curl_expire(data,1000,EXPIRE_SPEEDCHECK);\n  return CURLE_OK;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "timediff_t tVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar1 = *(int *)((int)&(data->progress).current_speed + 4);" (assignment_expression "iVar1 = *(int *)((int)&(data->progress).current_speed + 4)" identifier = (pointer_expression "*(int *)((int)&(data->progress).current_speed + 4)" * (cast_expression "(int *)((int)&(data->progress).current_speed + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(data->progress).current_speed + 4)" ( (binary_expression "(int)&(data->progress).current_speed + 4" (cast_expression "(int)&(data->progress).current_speed" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(data->progress).current_speed" & (field_expression "(data->progress).current_speed" (parenthesized_expression "(data->progress)" ( (field_expression "data->progress" identifier -> field_identifier) )) . field_identifier))) + number_literal) ))))) ;) (expression_statement "uVar5 = (data->set).low_speed_limit;" (assignment_expression "uVar5 = (data->set).low_speed_limit" identifier = (field_expression "(data->set).low_speed_limit" (parenthesized_expression "(data->set)" ( (field_expression "data->set" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if ((-1 < iVar1) && ((data->set).low_speed_time != 0)) {\n    uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);\n    iVar4 = iVar1 - ((int)uVar5 >> 0x1f);\n    if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {\n      (data->state).keeps_speed.tv_sec = 0;\n    }\n    else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }\n  }" if (parenthesized_expression "((-1 < iVar1) && ((data->set).low_speed_time != 0))" ( (binary_expression "(-1 < iVar1) && ((data->set).low_speed_time != 0)" (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) && (parenthesized_expression "((data->set).low_speed_time != 0)" ( (binary_expression "(data->set).low_speed_time != 0" (field_expression "(data->set).low_speed_time" (parenthesized_expression "(data->set)" ( (field_expression "data->set" identifier -> field_identifier) )) . field_identifier) != number_literal) ))) )) (compound_statement "{\n    uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);\n    iVar4 = iVar1 - ((int)uVar5 >> 0x1f);\n    if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {\n      (data->state).keeps_speed.tv_sec = 0;\n    }\n    else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }\n  }" { (expression_statement "uVar2 = (uint)((uint)(data->progress).current_speed < uVar5);" (assignment_expression "uVar2 = (uint)((uint)(data->progress).current_speed < uVar5)" identifier = (call_expression "(uint)((uint)(data->progress).current_speed < uVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)(data->progress).current_speed < uVar5)" ( (binary_expression "(uint)(data->progress).current_speed < uVar5" (field_expression "(uint)(data->progress).current_speed" (call_expression "(uint)(data->progress)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(data->progress)" ( (field_expression "data->progress" identifier -> field_identifier) ))) . field_identifier) < identifier) )))) ;) (expression_statement "iVar4 = iVar1 - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar4 = iVar1 - ((int)uVar5 >> 0x1f)" identifier = (binary_expression "iVar1 - ((int)uVar5 >> 0x1f)" identifier - (parenthesized_expression "((int)uVar5 >> 0x1f)" ( (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if ((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0) {\n      (data->state).keeps_speed.tv_sec = 0;\n    }\n    else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }" if (parenthesized_expression "((SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0)" ( (binary_expression "(SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)) == (int)(iVar4 - uVar2) < 0" (parenthesized_expression "(SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2))" ( (binary_expression "SBORROW4(iVar1,(int)uVar5 >> 0x1f) != SBORROW4(iVar4,uVar2)" (call_expression "SBORROW4(iVar1,(int)uVar5 >> 0x1f)" identifier (argument_list "(iVar1,(int)uVar5 >> 0x1f)" ( identifier , (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) != (call_expression "SBORROW4(iVar4,uVar2)" identifier (argument_list "(iVar4,uVar2)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar4 - uVar2) < 0" (cast_expression "(int)(iVar4 - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar4 - uVar2)" ( (binary_expression "iVar4 - uVar2" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n      (data->state).keeps_speed.tv_sec = 0;\n    }" { (expression_statement "(data->state).keeps_speed.tv_sec = 0;" (assignment_expression "(data->state).keeps_speed.tv_sec = 0" (field_expression "(data->state).keeps_speed.tv_sec" (field_expression "(data->state).keeps_speed" (parenthesized_expression "(data->state)" ( (field_expression "data->state" identifier -> field_identifier) )) . field_identifier) . field_identifier) = number_literal) ;) }) (else_clause "else if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }" else (if_statement "if ((data->state).keeps_speed.tv_sec == 0) {\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }\n    else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }" if (parenthesized_expression "((data->state).keeps_speed.tv_sec == 0)" ( (binary_expression "(data->state).keeps_speed.tv_sec == 0" (field_expression "(data->state).keeps_speed.tv_sec" (field_expression "(data->state).keeps_speed" (parenthesized_expression "(data->state)" ( (field_expression "data->state" identifier -> field_identifier) )) . field_identifier) . field_identifier) == number_literal) )) (compound_statement "{\n      (data->state).keeps_speed.tv_sec = now.tv_sec;\n      (data->state).keeps_speed.tv_usec = now.tv_usec;\n    }" { (expression_statement "(data->state).keeps_speed.tv_sec = now.tv_sec;" (assignment_expression "(data->state).keeps_speed.tv_sec = now.tv_sec" (field_expression "(data->state).keeps_speed.tv_sec" (field_expression "(data->state).keeps_speed" (parenthesized_expression "(data->state)" ( (field_expression "data->state" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "now.tv_sec" identifier . field_identifier)) ;) (expression_statement "(data->state).keeps_speed.tv_usec = now.tv_usec;" (assignment_expression "(data->state).keeps_speed.tv_usec = now.tv_usec" (field_expression "(data->state).keeps_speed.tv_usec" (field_expression "(data->state).keeps_speed" (parenthesized_expression "(data->state)" ( (field_expression "data->state" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "now.tv_usec" identifier . field_identifier)) ;) }) (else_clause "else {\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }" else (compound_statement "{\n      tVar3 = Curl_timediff(now,(data->state).keeps_speed);\n      iVar1 = (data->set).low_speed_time;\n      iVar4 = iVar1 * 1000;\n      if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }\n      uVar5 = (data->set).low_speed_limit;\n    }" { (expression_statement "tVar3 = Curl_timediff(now,(data->state).keeps_speed);" (assignment_expression "tVar3 = Curl_timediff(now,(data->state).keeps_speed)" identifier = (call_expression "Curl_timediff(now,(data->state).keeps_speed)" identifier (argument_list "(now,(data->state).keeps_speed)" ( identifier , (field_expression "(data->state).keeps_speed" (parenthesized_expression "(data->state)" ( (field_expression "data->state" identifier -> field_identifier) )) . field_identifier) )))) ;) (expression_statement "iVar1 = (data->set).low_speed_time;" (assignment_expression "iVar1 = (data->set).low_speed_time" identifier = (field_expression "(data->set).low_speed_time" (parenthesized_expression "(data->set)" ( (field_expression "data->set" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "iVar4 = iVar1 * 1000;" (assignment_expression "iVar4 = iVar1 * 1000" identifier = (binary_expression "iVar1 * 1000" identifier * number_literal)) ;) (if_statement "if (iVar4 - tVar3 == 0 || iVar4 < tVar3) {\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }" if (parenthesized_expression "(iVar4 - tVar3 == 0 || iVar4 < tVar3)" ( (binary_expression "iVar4 - tVar3 == 0 || iVar4 < tVar3" (binary_expression "iVar4 - tVar3 == 0" (binary_expression "iVar4 - tVar3" identifier - identifier) == number_literal) || (binary_expression "iVar4 < tVar3" identifier < identifier)) )) (compound_statement "{\n        Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);\n        return CURLE_OPERATION_TIMEDOUT;\n      }" { (expression_statement "Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1);" (call_expression "Curl_failf(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1)" identifier (argument_list "(data,(char *)(unaff_EDI + 0x508d1),(data->set).low_speed_limit,iVar1)" ( identifier , (cast_expression "(char *)(unaff_EDI + 0x508d1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x508d1)" ( (binary_expression "unaff_EDI + 0x508d1" identifier + number_literal) ))) , (field_expression "(data->set).low_speed_limit" (parenthesized_expression "(data->set)" ( (field_expression "data->set" identifier -> field_identifier) )) . field_identifier) , identifier ))) ;) (return_statement "return CURLE_OPERATION_TIMEDOUT;" return identifier ;) })) (expression_statement "uVar5 = (data->set).low_speed_limit;" (assignment_expression "uVar5 = (data->set).low_speed_limit" identifier = (field_expression "(data->set).low_speed_limit" (parenthesized_expression "(data->set)" ( (field_expression "data->set" identifier -> field_identifier) )) . field_identifier)) ;) }))))) })) (if_statement "if (uVar5 == 0) {\n    return CURLE_OK;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    return CURLE_OK;\n  }" { (return_statement "return CURLE_OK;" return identifier ;) })) (expression_statement "Curl_expire(data,1000,EXPIRE_SPEEDCHECK);" (call_expression "Curl_expire(data,1000,EXPIRE_SPEEDCHECK)" identifier (argument_list "(data,1000,EXPIRE_SPEEDCHECK)" ( identifier , number_literal , identifier ))) ;) (return_statement "return CURLE_OK;" return identifier ;) })))
(translation_unit "undefined4 FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}" type_identifier (function_declarator "FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_0002eb2c();" (call_expression "FUN_0002eb2c()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0xb68);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xb68)" identifier = (pointer_expression "*(int *)(param_1 + 0xb68)" * (cast_expression "(int *)(param_1 + 0xb68)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb68)" ( (binary_expression "param_1 + 0xb68" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(param_1 + 0x658);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x658)" identifier = (pointer_expression "*(uint *)(param_1 + 0x658)" * (cast_expression "(uint *)(param_1 + 0x658)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x658)" ( (binary_expression "param_1 + 0x658" identifier + number_literal) ))))) ;) (if_statement "if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }" if (parenthesized_expression "((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0))" ( (binary_expression "(-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)" (parenthesized_expression "(-1 < iVar2)" ( (binary_expression "-1 < iVar2" number_literal < identifier) )) && (parenthesized_expression "(*(int *)(param_1 + 0x65c) != 0)" ( (binary_expression "*(int *)(param_1 + 0x65c) != 0" (pointer_expression "*(int *)(param_1 + 0x65c)" * (cast_expression "(int *)(param_1 + 0x65c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x65c)" ( (binary_expression "param_1 + 0x65c" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }" { (expression_statement "uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);" (assignment_expression "uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4)" identifier = (call_expression "(uint)(*(uint *)(param_1 + 0xb64) < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 0xb64) < uVar4)" ( (binary_expression "*(uint *)(param_1 + 0xb64) < uVar4" (pointer_expression "*(uint *)(param_1 + 0xb64)" * (cast_expression "(uint *)(param_1 + 0xb64)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb64)" ( (binary_expression "param_1 + 0xb64" identifier + number_literal) )))) < identifier) )))) ;) (expression_statement "iVar3 = iVar2 - ((int)uVar4 >> 0x1f);" (assignment_expression "iVar3 = iVar2 - ((int)uVar4 >> 0x1f)" identifier = (binary_expression "iVar2 - ((int)uVar4 >> 0x1f)" identifier - (parenthesized_expression "((int)uVar4 >> 0x1f)" ( (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" if (parenthesized_expression "((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0)" ( (binary_expression "(SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0" (parenthesized_expression "(SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1))" ( (binary_expression "SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)" (call_expression "SBORROW4(iVar2,(int)uVar4 >> 0x1f)" identifier (argument_list "(iVar2,(int)uVar4 >> 0x1f)" ( identifier , (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) != (call_expression "SBORROW4(iVar3,uVar1)" identifier (argument_list "(iVar3,uVar1)" ( identifier , identifier )))) )) == (binary_expression "(int)(iVar3 - uVar1) < 0" (cast_expression "(int)(iVar3 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar3 - uVar1)" ( (binary_expression "iVar3 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0xc54) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0xc54) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" * (cast_expression "(undefined4 *)(param_1 + 0xc54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" else (if_statement "if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0xc54) == 0)" ( (binary_expression "*(int *)(param_1 + 0xc54) == 0" (pointer_expression "*(int *)(param_1 + 0xc54)" * (cast_expression "(int *)(param_1 + 0xc54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0xc54) = param_2;" (assignment_expression "*(undefined4 *)(param_1 + 0xc54) = param_2" (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" * (cast_expression "(undefined4 *)(param_1 + 0xc54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_1 + 0xc58) = param_3;" (assignment_expression "*(undefined4 *)(param_1 + 0xc58) = param_3" (pointer_expression "*(undefined4 *)(param_1 + 0xc58)" * (cast_expression "(undefined4 *)(param_1 + 0xc58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc58)" ( (binary_expression "param_1 + 0xc58" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" else (compound_statement "{\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" { (expression_statement "iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));" (assignment_expression "iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" identifier = (call_expression "FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" identifier (argument_list "(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" * (cast_expression "(undefined4 *)(param_1 + 0xc54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc54)" ( (binary_expression "param_1 + 0xc54" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)(param_1 + 0xc58)" * (cast_expression "(undefined4 *)(param_1 + 0xc58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc58)" ( (binary_expression "param_1 + 0xc58" identifier + number_literal) )))) )))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x65c) * 1000;" (assignment_expression "iVar3 = *(int *)(param_1 + 0x65c) * 1000" identifier = (binary_expression "*(int *)(param_1 + 0x65c) * 1000" (pointer_expression "*(int *)(param_1 + 0x65c)" * (cast_expression "(int *)(param_1 + 0x65c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x65c)" ( (binary_expression "param_1 + 0x65c" identifier + number_literal) )))) * number_literal)) ;) (if_statement "if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }" if (parenthesized_expression "(iVar3 - iVar2 == 0 || iVar3 < iVar2)" ( (binary_expression "iVar3 - iVar2 == 0 || iVar3 < iVar2" (binary_expression "iVar3 - iVar2 == 0" (binary_expression "iVar3 - iVar2" identifier - identifier) == number_literal) || (binary_expression "iVar3 < iVar2" identifier < identifier)) )) (compound_statement "{\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }" { (expression_statement "FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));" (call_expression "FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c))" identifier (argument_list "(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c))" ( identifier , (binary_expression "unaff_EDI + 0x508d1" identifier + number_literal) , (pointer_expression "*(undefined4 *)(param_1 + 0x658)" * (cast_expression "(undefined4 *)(param_1 + 0x658)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x658)" ( (binary_expression "param_1 + 0x658" identifier + number_literal) )))) , (pointer_expression "*(int *)(param_1 + 0x65c)" * (cast_expression "(int *)(param_1 + 0x65c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x65c)" ( (binary_expression "param_1 + 0x65c" identifier + number_literal) )))) ))) ;) (return_statement "return 0x1c;" return number_literal ;) })) (expression_statement "uVar4 = *(uint *)(param_1 + 0x658);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x658)" identifier = (pointer_expression "*(uint *)(param_1 + 0x658)" * (cast_expression "(uint *)(param_1 + 0x658)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x658)" ( (binary_expression "param_1 + 0x658" identifier + number_literal) ))))) ;) }))))) })) (if_statement "if (uVar4 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00046bc0(param_1,1000,7);" (call_expression "FUN_00046bc0(param_1,1000,7)" identifier (argument_list "(param_1,1000,7)" ( identifier , number_literal , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) != (call_expression IDENT (argument_list ( IDENT , IDENT )))) )) == (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) < LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT - IDENT) == LIT) || (binary_expression IDENT < IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))))) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT ))) ;) (return_statement return LIT ;) })))
(function_definition "undefined4 FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}" (type_identifier "undefined4") (function_declarator "FUN_000351e0(int param_1,undefined4 param_2,undefined4 param_3)" (identifier "FUN_000351e0") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EDI;\n  \n  FUN_0002eb2c();\n  iVar2 = *(int *)(param_1 + 0xb68);\n  uVar4 = *(uint *)(param_1 + 0x658);\n  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }\n  if (uVar4 == 0) {\n    return 0;\n  }\n  FUN_00046bc0(param_1,1000,7);\n  return 0;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (expression_statement "FUN_0002eb2c();" (call_expression "FUN_0002eb2c()" (identifier "FUN_0002eb2c") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0xb68);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xb68)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0xb68)" (* "*") (cast_expression "(int *)(param_1 + 0xb68)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb68)" (( "(") (binary_expression "param_1 + 0xb68" (identifier "param_1") (+ "+") (number_literal "0xb68")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(uint *)(param_1 + 0x658);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x658)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x658)" (* "*") (cast_expression "(uint *)(param_1 + 0x658)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x658)" (( "(") (binary_expression "param_1 + 0x658" (identifier "param_1") (+ "+") (number_literal "0x658")) () ")"))))) (; ";")) (if_statement "if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }" (if "if") (parenthesized_expression "((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0))" (( "(") (binary_expression "(-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)" (parenthesized_expression "(-1 < iVar2)" (( "(") (binary_expression "-1 < iVar2" (number_literal "-1") (< "<") (identifier "iVar2")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0x65c) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x65c) != 0" (pointer_expression "*(int *)(param_1 + 0x65c)" (* "*") (cast_expression "(int *)(param_1 + 0x65c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x65c)" (( "(") (binary_expression "param_1 + 0x65c" (identifier "param_1") (+ "+") (number_literal "0x65c")) () ")")))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);\n    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);\n    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }\n  }" ({ "{") (expression_statement "uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);" (assignment_expression "uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4)" (identifier "uVar1") (= "=") (call_expression "(uint)(*(uint *)(param_1 + 0xb64) < uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(uint *)(param_1 + 0xb64) < uVar4)" (( "(") (binary_expression "*(uint *)(param_1 + 0xb64) < uVar4" (pointer_expression "*(uint *)(param_1 + 0xb64)" (* "*") (cast_expression "(uint *)(param_1 + 0xb64)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb64)" (( "(") (binary_expression "param_1 + 0xb64" (identifier "param_1") (+ "+") (number_literal "0xb64")) () ")")))) (< "<") (identifier "uVar4")) () ")")))) (; ";")) (expression_statement "iVar3 = iVar2 - ((int)uVar4 >> 0x1f);" (assignment_expression "iVar3 = iVar2 - ((int)uVar4 >> 0x1f)" (identifier "iVar3") (= "=") (binary_expression "iVar2 - ((int)uVar4 >> 0x1f)" (identifier "iVar2") (- "-") (parenthesized_expression "((int)uVar4 >> 0x1f)" (( "(") (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }\n    else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" (if "if") (parenthesized_expression "((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0)" (( "(") (binary_expression "(SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0" (parenthesized_expression "(SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1))" (( "(") (binary_expression "SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)" (call_expression "SBORROW4(iVar2,(int)uVar4 >> 0x1f)" (identifier "SBORROW4") (argument_list "(iVar2,(int)uVar4 >> 0x1f)" (( "(") (identifier "iVar2") (, ",") (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (>> ">>") (number_literal "0x1f")) () ")"))) (!= "!=") (call_expression "SBORROW4(iVar3,uVar1)" (identifier "SBORROW4") (argument_list "(iVar3,uVar1)" (( "(") (identifier "iVar3") (, ",") (identifier "uVar1") () ")")))) () ")")) (== "==") (binary_expression "(int)(iVar3 - uVar1) < 0" (cast_expression "(int)(iVar3 - uVar1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(iVar3 - uVar1)" (( "(") (binary_expression "iVar3 - uVar1" (identifier "iVar3") (- "-") (identifier "uVar1")) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 0xc54) = 0;\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0xc54) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0xc54) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc54)" (( "(") (binary_expression "param_1 + 0xc54" (identifier "param_1") (+ "+") (number_literal "0xc54")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" (else "else") (if_statement "if (*(int *)(param_1 + 0xc54) == 0) {\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }\n    else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0xc54) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xc54) == 0" (pointer_expression "*(int *)(param_1 + 0xc54)" (* "*") (cast_expression "(int *)(param_1 + 0xc54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc54)" (( "(") (binary_expression "param_1 + 0xc54" (identifier "param_1") (+ "+") (number_literal "0xc54")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 0xc54) = param_2;\n      *(undefined4 *)(param_1 + 0xc58) = param_3;\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0xc54) = param_2;" (assignment_expression "*(undefined4 *)(param_1 + 0xc54) = param_2" (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc54)" (( "(") (binary_expression "param_1 + 0xc54" (identifier "param_1") (+ "+") (number_literal "0xc54")) () ")")))) (= "=") (identifier "param_2")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0xc58) = param_3;" (assignment_expression "*(undefined4 *)(param_1 + 0xc58) = param_3" (pointer_expression "*(undefined4 *)(param_1 + 0xc58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc58)" (( "(") (binary_expression "param_1 + 0xc58" (identifier "param_1") (+ "+") (number_literal "0xc58")) () ")")))) (= "=") (identifier "param_3")) (; ";")) (} "}")) (else_clause "else {\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" (else "else") (compound_statement "{\n      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));\n      iVar3 = *(int *)(param_1 + 0x65c) * 1000;\n      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }\n      uVar4 = *(uint *)(param_1 + 0x658);\n    }" ({ "{") (expression_statement "iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58));" (assignment_expression "iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" (identifier "iVar2") (= "=") (call_expression "FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" (identifier "FUN_0001ac30") (argument_list "(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),\n                           *(undefined4 *)(param_1 + 0xc58))" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0xc54)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc54)" (( "(") (binary_expression "param_1 + 0xc54" (identifier "param_1") (+ "+") (number_literal "0xc54")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0xc58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc58)" (( "(") (binary_expression "param_1 + 0xc58" (identifier "param_1") (+ "+") (number_literal "0xc58")) () ")")))) () ")")))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x65c) * 1000;" (assignment_expression "iVar3 = *(int *)(param_1 + 0x65c) * 1000" (identifier "iVar3") (= "=") (binary_expression "*(int *)(param_1 + 0x65c) * 1000" (pointer_expression "*(int *)(param_1 + 0x65c)" (* "*") (cast_expression "(int *)(param_1 + 0x65c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x65c)" (( "(") (binary_expression "param_1 + 0x65c" (identifier "param_1") (+ "+") (number_literal "0x65c")) () ")")))) (* "*") (number_literal "1000"))) (; ";")) (if_statement "if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }" (if "if") (parenthesized_expression "(iVar3 - iVar2 == 0 || iVar3 < iVar2)" (( "(") (binary_expression "iVar3 - iVar2 == 0 || iVar3 < iVar2" (binary_expression "iVar3 - iVar2 == 0" (binary_expression "iVar3 - iVar2" (identifier "iVar3") (- "-") (identifier "iVar2")) (== "==") (number_literal "0")) (|| "||") (binary_expression "iVar3 < iVar2" (identifier "iVar3") (< "<") (identifier "iVar2"))) () ")")) (compound_statement "{\n        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));\n        return 0x1c;\n      }" ({ "{") (expression_statement "FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c));" (call_expression "FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c))" (identifier "FUN_00027d40") (argument_list "(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),\n                     *(int *)(param_1 + 0x65c))" (( "(") (identifier "param_1") (, ",") (binary_expression "unaff_EDI + 0x508d1" (identifier "unaff_EDI") (+ "+") (number_literal "0x508d1")) (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x658)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x658)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x658)" (( "(") (binary_expression "param_1 + 0x658" (identifier "param_1") (+ "+") (number_literal "0x658")) () ")")))) (, ",") (pointer_expression "*(int *)(param_1 + 0x65c)" (* "*") (cast_expression "(int *)(param_1 + 0x65c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x65c)" (( "(") (binary_expression "param_1 + 0x65c" (identifier "param_1") (+ "+") (number_literal "0x65c")) () ")")))) () ")"))) (; ";")) (return_statement "return 0x1c;" (return "return") (number_literal "0x1c") (; ";")) (} "}"))) (expression_statement "uVar4 = *(uint *)(param_1 + 0x658);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x658)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x658)" (* "*") (cast_expression "(uint *)(param_1 + 0x658)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x658)" (( "(") (binary_expression "param_1 + 0x658" (identifier "param_1") (+ "+") (number_literal "0x658")) () ")"))))) (; ";")) (} "}")))))) (} "}"))) (if_statement "if (uVar4 == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_00046bc0(param_1,1000,7);" (call_expression "FUN_00046bc0(param_1,1000,7)" (identifier "FUN_00046bc0") (argument_list "(param_1,1000,7)" (( "(") (identifier "param_1") (, ",") (number_literal "1000") (, ",") (number_literal "7") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Unknown calling convention */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

type_1 function_1(type_2 *data,type_3 now)

{
  int var_2;
  type_4 var_6;
  type_5 var_8;
  int var_5;
  type_4 var_3;
  int var_10;
  
  var_1();
  var_2 = *(int *)((int)&(data->progress).current_speed + 4);
  var_3 = (data->set).low_speed_limit;
  if ((-1 < var_2) && ((data->set).low_speed_time != 0)) {
    var_6 = (type_4)((type_4)(data->progress).current_speed < var_3);
    var_5 = var_2 - ((int)var_3 >> 0x1f);
    if ((var_4(var_2,(int)var_3 >> 0x1f) != var_4(var_5,var_6)) == (int)(var_5 - var_6) < 0) {
      (data->state).keeps_speed.tv_sec = 0;
    }
    else if ((data->state).keeps_speed.tv_sec == 0) {
      (data->state).keeps_speed.tv_sec = now.tv_sec;
      (data->state).keeps_speed.tv_usec = now.tv_usec;
    }
    else {
      var_8 = var_7(now,(data->state).keeps_speed);
      var_2 = (data->set).low_speed_time;
      var_5 = var_2 * 1000;
      if (var_5 - var_8 == 0 || var_5 < var_8) {
        var_9(data,(char *)(var_10 + 0x508d1),(data->set).low_speed_limit,var_2);
        return CURLE_OPERATION_TIMEDOUT;
      }
      var_3 = (data->set).low_speed_limit;
    }
  }
  if (var_3 == 0) {
    return CURLE_OK;
  }
  var_11(data,1000,EXPIRE_SPEEDCHECK);
  return CURLE_OK;
}


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

undefined4 MASKED(int param_1,undefined4 param_2,undefined4 param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int unaff_EDI;
  
  FUN_0002eb2c();
  iVar2 = *(int *)(param_1 + 0xb68);
  uVar4 = *(uint *)(param_1 + 0x658);
  if ((-1 < iVar2) && (*(int *)(param_1 + 0x65c) != 0)) {
    uVar1 = (uint)(*(uint *)(param_1 + 0xb64) < uVar4);
    iVar3 = iVar2 - ((int)uVar4 >> 0x1f);
    if ((SBORROW4(iVar2,(int)uVar4 >> 0x1f) != SBORROW4(iVar3,uVar1)) == (int)(iVar3 - uVar1) < 0) {
      *(undefined4 *)(param_1 + 0xc54) = 0;
    }
    else if (*(int *)(param_1 + 0xc54) == 0) {
      *(undefined4 *)(param_1 + 0xc54) = param_2;
      *(undefined4 *)(param_1 + 0xc58) = param_3;
    }
    else {
      iVar2 = FUN_0001ac30(param_2,param_3,*(undefined4 *)(param_1 + 0xc54),
                           *(undefined4 *)(param_1 + 0xc58));
      iVar3 = *(int *)(param_1 + 0x65c) * 1000;
      if (iVar3 - iVar2 == 0 || iVar3 < iVar2) {
        FUN_00027d40(param_1,unaff_EDI + 0x508d1,*(undefined4 *)(param_1 + 0x658),
                     *(int *)(param_1 + 0x65c));
        return 0x1c;
      }
      uVar4 = *(uint *)(param_1 + 0x658);
    }
  }
  if (uVar4 == 0) {
    return 0;
  }
  FUN_00046bc0(param_1,1000,7);
  return 0;
}

