/* This file has been generated by the Hex-Rays decompiler.
   Copyright (c) 2007-2017 Hex-Rays <info@hex-rays.com>

   Detected compiler: GNU C++
*/

#include <defs.h>


//-------------------------------------------------------------------------
// Function declarations

// void __userpurge str_replace(char a1@<al>, _BYTE *a2@<rcx>, unsigned int a3@<ebp>, __int64 a4, __int64 a5, __int64 a6, __int64 a7, __int64 a8, __int64 a9, __int64 a10, __int64 a11, __int64 a12, __int64 a13, __int64 a14, __int64 a15, __int64 a16, __int64 a17, __int64 a18, __int64 a19, __int64 a20, __int64 a21, __int64 a22, __int64 a23, __int64 a24, __int64 a25, __int64 a26, __int64 a27, __int64 a28, __int64 a29, __int64 a30, __int64 a31, __int64 a32, __int64 a33, __int64 a34, __int64 a35, __int64 a36, __int64 a37, __int64 a38, __int64 a39, __int64 a40, __int64 a41, __int64 a42, __int64 a43, __int64 a44, __int64 a45, __int64 a46, __int64 a47, __int64 a48, __int64 a49, __int64 a50, __int64 a51, __int64 a52, __int64 a53, __int64 a54, __int64 a55, __int64 a56, __int64 a57, __int64 a58, __int64 a59, __int64 a60, __int64 a61, __int64 a62, __int64 a63);
void __fastcall init_proc(__int64 a1);
// int *__usercall sub_3F2B@<rax>(unsigned int a1@<ecx>, unsigned __int64 a2@<rbp>, _DWORD *a3@<rdi>);
__int64 __fastcall sub_3F69(_QWORD, _QWORD, _QWORD, _QWORD); // weak

//-------------------------------------------------------------------------
// Data declarations

_UNKNOWN loc_4111; // weak


//----- (00000000000026EC) ----------------------------------------------------
void __userpurge str_replace(char a1@<al>, _BYTE *a2@<rcx>, unsigned int a3@<ebp>, __int64 a4, __int64 a5, __int64 a6, __int64 a7, __int64 a8, __int64 a9, __int64 a10, __int64 a11, __int64 a12, __int64 a13, __int64 a14, __int64 a15, __int64 a16, __int64 a17, __int64 a18, __int64 a19, __int64 a20, __int64 a21, __int64 a22, __int64 a23, __int64 a24, __int64 a25, __int64 a26, __int64 a27, __int64 a28, __int64 a29, __int64 a30, __int64 a31, __int64 a32, __int64 a33, __int64 a34, __int64 a35, __int64 a36, __int64 a37, __int64 a38, __int64 a39, __int64 a40, __int64 a41, __int64 a42, __int64 a43, __int64 a44, __int64 a45, __int64 a46, __int64 a47, __int64 a48, __int64 a49, __int64 a50, __int64 a51, __int64 a52, __int64 a53, __int64 a54, __int64 a55, __int64 a56, __int64 a57, __int64 a58, __int64 a59, __int64 a60, __int64 a61, __int64 a62, __int64 a63)
{
  *a2 += a1;
  *(_DWORD *)a3 >>= 56;
  JUMPOUT(0xFFFFFFFFFFFFFFFBLL);
}
// 26EC: too many input arguments, some ignored

//----- (0000000000002B1B) ----------------------------------------------------
#error "2B21: positive sp value has been found (funcsize=0)"

//----- (0000000000003EF0) ----------------------------------------------------
void __fastcall init_proc(__int64 a1)
{
  __int64 v1; // rdx
  char v2; // dl

  ((void (*)(void))loc_4111)();
  sub_3F69(v1, a1, v1, 0LL);
  v2 = *(_BYTE *)(a1 + 4);
}
// 3F69: using guessed type __int64 __fastcall sub_3F69(_QWORD, _QWORD, _QWORD, _QWORD);

//----- (0000000000003F2B) ----------------------------------------------------
int *__usercall sub_3F2B@<rax>(unsigned int a1@<ecx>, unsigned __int64 a2@<rbp>, _DWORD *a3@<rdi>)
{
  int *result; // rax
  char v4; // dl
  unsigned int v5; // ecx
  int v6; // edx
  bool v7; // cf
  bool v8; // zf

  result = (_DWORD *)((char *)a3 + a2);
  v4 = *((_BYTE *)a3 + a2);
  if ( a1 <= 5 )
    goto LABEL_9;
  if ( a2 > 0xFFFFFFFFFFFFFFFCLL )
    goto LABEL_9;
  v5 = a1 - 4;
  do
  {
    v6 = *result;
    ++result;
    v7 = v5 < 4;
    v5 -= 4;
    *a3 = v6;
    ++a3;
  }
  while ( !v7 );
  v8 = v5 == -4;
  a1 = v5 + 4;
  v4 = *(_BYTE *)result;
  if ( !v8 )
  {
LABEL_9:
    do
    {
      result = (int *)((char *)result + 1);
      *(_BYTE *)a3 = v4;
      --a1;
      v4 = *(_BYTE *)result;
      a3 = (_DWORD *)((char *)a3 + 1);
    }
    while ( a1 );
  }
  return result;
}

//----- (0000000000003F69) ----------------------------------------------------
#error "3F6C: positive sp value has been found (funcsize=2)"

//----- (0000000000004100) ----------------------------------------------------
#error "4101: positive sp value has been found (funcsize=1)"

//----- (000000000000423A) ----------------------------------------------------
#error "423E: positive sp value has been found (funcsize=3)"

//----- (0000000000004275) ----------------------------------------------------
#error "4276: positive sp value has been found (funcsize=1)"

#error "There were 5 decompilation failure(s) on 8 function(s)"
