/* typedef a 32 bit type */
typedef unsigned int UINT4;

/* Data structure for MD5 (Message Digest) computation */
typedef struct {
  UINT4 i[2];                   /* number of _bits_ handled mod 2^64 */
  UINT4 buf[4];                                    /* scratch buffer */
  unsigned char in[64];                              /* input buffer */
  unsigned char digest[16];     /* actual digest after MD5Final call */
} MD5_CTX;

/* forward declaration */
static void Transform (UINT4 * buf, UINT4 * in);

static unsigned char PADDING[64] = {
  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

/* F, G and H are basic MD5 functions: selection, majority, parity */
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z))) 

/* ROTATE_LEFT rotates x left n bits */
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */
/* Rotation is separate from addition to prevent recomputation */
#define FF(a, b, c, d, x, s, ac) \
  {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }
#define GG(a, b, c, d, x, s, ac) \
  {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }
#define HH(a, b, c, d, x, s, ac) \
  {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }
#define II(a, b, c, d, x, s, ac) \
  {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }

void MD5Init (MD5_CTX * mdContext)
{
  mdContext->i[0] = mdContext->i[1] = (UINT4)0;

  /* Load magic initialization constants.
   */
  mdContext->buf[0] = (UINT4)0x67452301;
  mdContext->buf[1] = (UINT4)0xefcdab89;
  mdContext->buf[2] = (UINT4)0x98badcfe;
  mdContext->buf[3] = (UINT4)0x10325476;
}

void MD5Update (MD5_CTX * mdContext, unsigned char * inBuf, unsigned int inLen)
{
  UINT4 in[16];
  int mdi;
  unsigned int i, ii;

  /* compute number of bytes mod 64 */
  mdi = (int)((mdContext->i[0] >> 3) & 0x3F);

  /* update number of bits */
  if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0])
    mdContext->i[1]++;
  mdContext->i[0] += ((UINT4)inLen << 3);
  mdContext->i[1] += ((UINT4)inLen >> 29);

  while (inLen--) {
    /* add new character to buffer, increment mdi */
    mdContext->in[mdi++] = *inBuf++;

    /* transform if necessary */
    if (mdi == 0x40) {
      for (i = 0, ii = 0; i < 16; i++, ii += 4)
        in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
                (((UINT4)mdContext->in[ii+2]) << 16) |
                (((UINT4)mdContext->in[ii+1]) << 8) |
                ((UINT4)mdContext->in[ii]);
      Transform (mdContext->buf, in);
      mdi = 0;
    }
  }
}

void MD5Final (MD5_CTX * mdContext)
{
  UINT4 in[16];
  int mdi;
  unsigned int i, ii;
  unsigned int padLen;

  /* save number of bits */
  in[14] = mdContext->i[0];
  in[15] = mdContext->i[1];

  /* compute number of bytes mod 64 */
  mdi = (int)((mdContext->i[0] >> 3) & 0x3F);

  /* pad out to 56 mod 64 */
  padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);
  MD5Update (mdContext, PADDING, padLen);

  /* append length in bits and transform */
  for (i = 0, ii = 0; i < 14; i++, ii += 4)
    in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
            (((UINT4)mdContext->in[ii+2]) << 16) |
            (((UINT4)mdContext->in[ii+1]) << 8) |
            ((UINT4)mdContext->in[ii]);
  Transform (mdContext->buf, in);

  /* store buffer in digest */
  for (i = 0, ii = 0; i < 4; i++, ii += 4) {
    mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);
    mdContext->digest[ii+1] =
      (unsigned char)((mdContext->buf[i] >> 8) & 0xFF);
    mdContext->digest[ii+2] =
      (unsigned char)((mdContext->buf[i] >> 16) & 0xFF);
    mdContext->digest[ii+3] =
      (unsigned char)((mdContext->buf[i] >> 24) & 0xFF);
  }
}

/* Basic MD5 step. Transform buf based on in.
 */
static void Transform (UINT4 * buf, UINT4 * in)
{
  UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];

  /* Round 1 */
#define S11 7
#define S12 12
#define S13 17
#define S14 22
  FF ( a, b, c, d, in[ 0], S11, 3614090360); /* 1 */
  FF ( d, a, b, c, in[ 1], S12, 3905402710); /* 2 */
  FF ( c, d, a, b, in[ 2], S13,  606105819); /* 3 */
  FF ( b, c, d, a, in[ 3], S14, 3250441966); /* 4 */
  FF ( a, b, c, d, in[ 4], S11, 4118548399); /* 5 */
  FF ( d, a, b, c, in[ 5], S12, 1200080426); /* 6 */
  FF ( c, d, a, b, in[ 6], S13, 2821735955); /* 7 */
  FF ( b, c, d, a, in[ 7], S14, 4249261313); /* 8 */
  FF ( a, b, c, d, in[ 8], S11, 1770035416); /* 9 */
  FF ( d, a, b, c, in[ 9], S12, 2336552879); /* 10 */
  FF ( c, d, a, b, in[10], S13, 4294925233); /* 11 */
  FF ( b, c, d, a, in[11], S14, 2304563134); /* 12 */
  FF ( a, b, c, d, in[12], S11, 1804603682); /* 13 */
  FF ( d, a, b, c, in[13], S12, 4254626195); /* 14 */
  FF ( c, d, a, b, in[14], S13, 2792965006); /* 15 */
  FF ( b, c, d, a, in[15], S14, 1236535329); /* 16 */

  /* Round 2 */
#define S21 5
#define S22 9
#define S23 14
#define S24 20
  GG ( a, b, c, d, in[ 1], S21, 4129170786); /* 17 */
  GG ( d, a, b, c, in[ 6], S22, 3225465664); /* 18 */
  GG ( c, d, a, b, in[11], S23,  643717713); /* 19 */
  GG ( b, c, d, a, in[ 0], S24, 3921069994); /* 20 */
  GG ( a, b, c, d, in[ 5], S21, 3593408605); /* 21 */
  GG ( d, a, b, c, in[10], S22,   38016083); /* 22 */
  GG ( c, d, a, b, in[15], S23, 3634488961); /* 23 */
  GG ( b, c, d, a, in[ 4], S24, 3889429448); /* 24 */
  GG ( a, b, c, d, in[ 9], S21,  568446438); /* 25 */
  GG ( d, a, b, c, in[14], S22, 3275163606); /* 26 */
  GG ( c, d, a, b, in[ 3], S23, 4107603335); /* 27 */
  GG ( b, c, d, a, in[ 8], S24, 1163531501); /* 28 */
  GG ( a, b, c, d, in[13], S21, 2850285829); /* 29 */
  GG ( d, a, b, c, in[ 2], S22, 4243563512); /* 30 */
  GG ( c, d, a, b, in[ 7], S23, 1735328473); /* 31 */
  GG ( b, c, d, a, in[12], S24, 2368359562); /* 32 */

  /* Round 3 */
#define S31 4
#define S32 11
#define S33 16
#define S34 23
  HH ( a, b, c, d, in[ 5], S31, 4294588738); /* 33 */
  HH ( d, a, b, c, in[ 8], S32, 2272392833); /* 34 */
  HH ( c, d, a, b, in[11], S33, 1839030562); /* 35 */
  HH ( b, c, d, a, in[14], S34, 4259657740); /* 36 */
  HH ( a, b, c, d, in[ 1], S31, 2763975236); /* 37 */
  HH ( d, a, b, c, in[ 4], S32, 1272893353); /* 38 */
  HH ( c, d, a, b, in[ 7], S33, 4139469664); /* 39 */
  HH ( b, c, d, a, in[10], S34, 3200236656); /* 40 */
  HH ( a, b, c, d, in[13], S31,  681279174); /* 41 */
  HH ( d, a, b, c, in[ 0], S32, 3936430074); /* 42 */
  HH ( c, d, a, b, in[ 3], S33, 3572445317); /* 43 */
  HH ( b, c, d, a, in[ 6], S34,   76029189); /* 44 */
  HH ( a, b, c, d, in[ 9], S31, 3654602809); /* 45 */
  HH ( d, a, b, c, in[12], S32, 3873151461); /* 46 */
  HH ( c, d, a, b, in[15], S33,  530742520); /* 47 */
  HH ( b, c, d, a, in[ 2], S34, 3299628645); /* 48 */

  /* Round 4 */
#define S41 6
#define S42 10
#define S43 15
#define S44 21
  II ( a, b, c, d, in[ 0], S41, 4096336452); /* 49 */
  II ( d, a, b, c, in[ 7], S42, 1126891415); /* 50 */
  II ( c, d, a, b, in[14], S43, 2878612391); /* 51 */
  II ( b, c, d, a, in[ 5], S44, 4237533241); /* 52 */
  II ( a, b, c, d, in[12], S41, 1700485571); /* 53 */
  II ( d, a, b, c, in[ 3], S42, 2399980690); /* 54 */
  II ( c, d, a, b, in[10], S43, 4293915773); /* 55 */
  II ( b, c, d, a, in[ 1], S44, 2240044497); /* 56 */
  II ( a, b, c, d, in[ 8], S41, 1873313359); /* 57 */
  II ( d, a, b, c, in[15], S42, 4264355552); /* 58 */
  II ( c, d, a, b, in[ 6], S43, 2734768916); /* 59 */
  II ( b, c, d, a, in[13], S44, 1309151649); /* 60 */
  II ( a, b, c, d, in[ 4], S41, 4149444226); /* 61 */
  II ( d, a, b, c, in[11], S42, 3174756917); /* 62 */
  II ( c, d, a, b, in[ 2], S43,  718787259); /* 63 */
  II ( b, c, d, a, in[ 9], S44, 3951481745); /* 64 */

  buf[0] += a;
  buf[1] += b;
  buf[2] += c;
  buf[3] += d;
}

/*
 **********************************************************************
 ** End of md5.c                                                     **
 ******************************* (cut) ********************************
 */

/*
 **********************************************************************
 ** md5driver.c -- sample routines to test                           **
 ** RSA Data Security, Inc. MD5 message digest algorithm.            **
 ** Created: 2/16/90 RLR                                             **
 ** Updated: 1/91 SRD                                                **
 **********************************************************************
 */

/*
 **********************************************************************
 ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **
 **                                                                  **
 ** RSA Data Security, Inc. makes no representations concerning      **
 ** either the merchantability of this software or the suitability   **
 ** of this software for any particular purpose.  It is provided "as **
 ** is" without express or implied warranty of any kind.             **
 **                                                                  **
 ** These notices must be retained in any copies of any part of this **
 ** documentation and/or software.                                   **
 **********************************************************************
 */

#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <string.h>
/* Prints message digest buffer in mdContext as 32 hexadecimal digits.
   Order is from low-order byte to high-order byte of digest.
   Each byte is printed with high-order hexadecimal digit first.
 */
static void MDPrint (MD5_CTX * mdContext,char * hash)
{
  int i;

  for (i = 0; i < 16; i++){
    //printf ("%02x", mdContext->digest[i]);
  if (i == 0)
    sprintf(hash,"%02x", mdContext->digest[i]);
  else
    sprintf(hash + strlen(hash),"%02x", mdContext->digest[i]);
  }
}

static void MDString (char * inString,char * hash)
{
  MD5_CTX mdContext;
  unsigned int len = strlen (inString);
  unsigned char * uInString = reinterpret_cast<unsigned char *>( inString );
  MD5Init (&mdContext);
  MD5Update (&mdContext, uInString, len);
  MD5Final (&mdContext);
  MDPrint (&mdContext,hash);
  //printf (" \"%s\"\n\n", uInString);
}
	.file	"tmpxft_002f2cd0_00000000-6_md5LibCPU.cudafe1.cpp"
	.text
#APP

#NO_APP
	.type	_ZL9TransformPjS_, @function
_ZL9TransformPjS_:
.LFB2011:
	.cfi_startproc
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	movq	%rdi, %r8
	movq	%rsi, %rax
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	movl	(%rsi), %r14d
	movl	(%rdi), %ebx
	movl	8(%rdi), %edi
	xorl	12(%r8), %edi
	andl	4(%r8), %edi
	leal	-680876936(%r14,%rbx), %edx
	xorl	12(%r8), %edi
	movl	4(%rsi), %ebx
	addl	%edx, %edi
	movl	12(%r8), %esi
	movl	4(%r8), %edx
	roll	$7, %edi
	xorl	8(%r8), %edx
	addl	4(%r8), %edi
	movl	%ebx, -36(%rsp)
	leal	-389564586(%rbx,%rsi), %ecx
	andl	%edi, %edx
	xorl	8(%r8), %edx
	movl	8(%rax), %ebx
	addl	%ecx, %edx
	movl	8(%r8), %esi
	movl	4(%r8), %ecx
	roll	$12, %edx
	movl	%ebx, -32(%rsp)
	addl	%edi, %edx
	leal	606105819(%rbx,%rsi), %esi
	xorl	%edi, %ecx
	movl	12(%rax), %ebx
	andl	%edx, %ecx
	xorl	4(%r8), %ecx
	movl	%ebx, -28(%rsp)
	addl	%esi, %ecx
	movl	4(%r8), %esi
	rorl	$15, %ecx
	movl	20(%rax), %ebp
	movl	28(%rax), %r13d
	leal	-1044525330(%rbx,%rsi), %r9d
	movl	%edi, %esi
	addl	%edx, %ecx
	movl	16(%rax), %ebx
	xorl	%edx, %esi
	movl	36(%rax), %r15d
	movl	40(%rax), %r11d
	andl	%ecx, %esi
	movl	%ebx, -24(%rsp)
	movl	56(%rax), %r12d
	xorl	%edi, %esi
	addl	%r9d, %esi
	leal	-176418897(%rbx,%rdi), %r9d
	movl	%edx, %edi
	movl	24(%rax), %ebx
	rorl	$10, %esi
	xorl	%ecx, %edi
	addl	%ecx, %esi
	movl	%ebx, -20(%rsp)
	andl	%esi, %edi
	xorl	%edx, %edi
	addl	%r9d, %edi
	leal	1200080426(%rbp,%rdx), %r9d
	movl	%ecx, %edx
	roll	$7, %edi
	xorl	%esi, %edx
	addl	%esi, %edi
	andl	%edi, %edx
	xorl	%ecx, %edx
	addl	%r9d, %edx
	leal	-1473231341(%rbx,%rcx), %r9d
	movl	%esi, %ecx
	movl	32(%rax), %ebx
	roll	$12, %edx
	xorl	%edi, %ecx
	addl	%edi, %edx
	movl	%ebx, -16(%rsp)
	andl	%edx, %ecx
	xorl	%esi, %ecx
	addl	%r9d, %ecx
	leal	-45705983(%r13,%rsi), %r9d
	movl	%edi, %esi
	rorl	$15, %ecx
	xorl	%edx, %esi
	addl	%edx, %ecx
	andl	%ecx, %esi
	xorl	%edi, %esi
	addl	%r9d, %esi
	leal	1770035416(%rbx,%rdi), %r9d
	movl	%edx, %edi
	movl	44(%rax), %ebx
	rorl	$10, %esi
	xorl	%ecx, %edi
	addl	%ecx, %esi
	movl	%ebx, -12(%rsp)
	andl	%esi, %edi
	xorl	%edx, %edi
	addl	%r9d, %edi
	leal	-1958414417(%r15,%rdx), %r9d
	movl	%ecx, %edx
	roll	$7, %edi
	xorl	%esi, %edx
	addl	%esi, %edi
	andl	%edi, %edx
	xorl	%ecx, %edx
	addl	%r9d, %edx
	leal	-42063(%r11,%rcx), %r9d
	movl	%esi, %ecx
	roll	$12, %edx
	xorl	%edi, %ecx
	addl	%edi, %edx
	andl	%edx, %ecx
	xorl	%esi, %ecx
	addl	%r9d, %ecx
	leal	-1990404162(%rbx,%rsi), %r9d
	movl	%edi, %esi
	movl	48(%rax), %ebx
	rorl	$15, %ecx
	xorl	%edx, %esi
	addl	%edx, %ecx
	andl	%ecx, %esi
	xorl	%edi, %esi
	addl	%r9d, %esi
	leal	1804603682(%rbx,%rdi), %r9d
	movl	%edx, %edi
	rorl	$10, %esi
	xorl	%ecx, %edi
	addl	%ecx, %esi
	andl	%esi, %edi
	xorl	%edx, %edi
	addl	%r9d, %edi
	movl	52(%rax), %r9d
	roll	$7, %edi
	leal	-40341101(%r9,%rdx), %r10d
	movl	%ecx, %edx
	addl	%esi, %edi
	xorl	%esi, %edx
	andl	%edi, %edx
	xorl	%ecx, %edx
	addl	%r10d, %edx
	leal	-1502002290(%r12,%rcx), %r10d
	movl	%esi, %ecx
	roll	$12, %edx
	xorl	%edi, %ecx
	addl	%edi, %edx
	andl	%edx, %ecx
	xorl	%esi, %ecx
	addl	%r10d, %ecx
	movl	60(%rax), %r10d
	rorl	$15, %ecx
	leal	1236535329(%r10,%rsi), %eax
	movl	%edi, %esi
	addl	%edx, %ecx
	xorl	%edx, %esi
	andl	%ecx, %esi
	xorl	%edi, %esi
	addl	%eax, %esi
	movl	-36(%rsp), %eax
	rorl	$10, %esi
	addl	%ecx, %esi
	leal	-165796510(%rax,%rdi), %edi
	movl	%ecx, %eax
	xorl	%esi, %eax
	andl	%edx, %eax
	xorl	%ecx, %eax
	addl	%edi, %eax
	movl	-20(%rsp), %edi
	roll	$5, %eax
	addl	%esi, %eax
	leal	-1069501632(%rdi,%rdx), %edi
	movl	%esi, %edx
	xorl	%eax, %edx
	andl	%ecx, %edx
	xorl	%esi, %edx
	addl	%edi, %edx
	movl	-12(%rsp), %edi
	roll	$9, %edx
	addl	%eax, %edx
	leal	643717713(%rdi,%rcx), %edi
	movl	%eax, %ecx
	xorl	%edx, %ecx
	andl	%esi, %ecx
	xorl	%eax, %ecx
	addl	%edi, %ecx
	leal	-373897302(%r14,%rsi), %edi
	movl	%edx, %esi
	roll	$14, %ecx
	addl	%edx, %ecx
	xorl	%ecx, %esi
	andl	%eax, %esi
	xorl	%edx, %esi
	addl	%edi, %esi
	leal	-701558691(%rbp,%rax), %edi
	movl	%ecx, %eax
	rorl	$12, %esi
	addl	%ecx, %esi
	xorl	%esi, %eax
	andl	%edx, %eax
	xorl	%ecx, %eax
	addl	%edi, %eax
	leal	38016083(%r11,%rdx), %edi
	movl	%esi, %edx
	roll	$5, %eax
	addl	%esi, %eax
	xorl	%eax, %edx
	andl	%ecx, %edx
	xorl	%esi, %edx
	addl	%edi, %edx
	leal	-660478335(%r10,%rcx), %edi
	movl	%eax, %ecx
	roll	$9, %edx
	addl	%eax, %edx
	xorl	%edx, %ecx
	andl	%esi, %ecx
	xorl	%eax, %ecx
	addl	%edi, %ecx
	movl	-24(%rsp), %edi
	roll	$14, %ecx
	addl	%edx, %ecx
	leal	-405537848(%rdi,%rsi), %edi
	movl	%edx, %esi
	xorl	%ecx, %esi
	andl	%eax, %esi
	xorl	%edx, %esi
	addl	%edi, %esi
	leal	568446438(%r15,%rax), %edi
	movl	%ecx, %eax
	rorl	$12, %esi
	addl	%ecx, %esi
	xorl	%esi, %eax
	andl	%edx, %eax
	xorl	%ecx, %eax
	addl	%edi, %eax
	leal	-1019803690(%r12,%rdx), %edi
	movl	%esi, %edx
	roll	$5, %eax
	addl	%esi, %eax
	xorl	%eax, %edx
	andl	%ecx, %edx
	xorl	%esi, %edx
	addl	%edi, %edx
	movl	-28(%rsp), %edi
	roll	$9, %edx
	addl	%eax, %edx
	leal	-187363961(%rdi,%rcx), %edi
	movl	%eax, %ecx
	xorl	%edx, %ecx
	andl	%esi, %ecx
	xorl	%eax, %ecx
	addl	%edi, %ecx
	movl	-16(%rsp), %edi
	roll	$14, %ecx
	addl	%edx, %ecx
	leal	1163531501(%rdi,%rsi), %esi
	movl	%edx, %edi
	xorl	%ecx, %edi
	andl	%eax, %edi
	xorl	%edx, %edi
	addl	%esi, %edi
	leal	-1444681467(%r9,%rax), %esi
	movl	%ecx, %eax
	rorl	$12, %edi
	addl	%ecx, %edi
	xorl	%edi, %eax
	andl	%edx, %eax
	xorl	%ecx, %eax
	addl	%esi, %eax
	movl	-32(%rsp), %esi
	roll	$5, %eax
	addl	%edi, %eax
	leal	-51403784(%rsi,%rdx), %esi
	movl	%edi, %edx
	xorl	%eax, %edx
	andl	%ecx, %edx
	leal	1735328473(%r13,%rcx), %ecx
	xorl	%edi, %edx
	addl	%esi, %edx
	movl	%eax, %esi
	roll	$9, %edx
	addl	%eax, %edx
	xorl	%edx, %esi
	andl	%edi, %esi
	leal	-1926607734(%rbx,%rdi), %edi
	xorl	%eax, %esi
	movl	%edi, -4(%rsp)
	movl	%eax, %edi
	leal	-378558(%rbp,%rax), %eax
	addl	%ecx, %esi
	movl	%edx, %ecx
	roll	$14, %esi
	addl	%edx, %esi
	xorl	%esi, %ecx
	movl	%ecx, -8(%rsp)
	andl	%ecx, %edi
	movl	-4(%rsp), %ecx
	xorl	%edx, %edi
	addl	%ecx, %edi
	movl	-8(%rsp), %ecx
	rorl	$12, %edi
	addl	%esi, %edi
	xorl	%edi, %ecx
	addl	%eax, %ecx
	movl	-16(%rsp), %eax
	roll	$4, %ecx
	leal	-2022574463(%rax,%rdx), %eax
	movl	%esi, %edx
	addl	%edi, %ecx
	xorl	%edi, %edx
	xorl	%ecx, %edx
	addl	%eax, %edx
	movl	-12(%rsp), %eax
	roll	$11, %edx
	leal	1839030562(%rax,%rsi), %eax
	movl	%edi, %esi
	addl	%ecx, %edx
	xorl	%ecx, %esi
	leal	-35309556(%r12,%rdi), %edi
	xorl	%edx, %esi
	addl	%eax, %esi
	movl	%ecx, %eax
	roll	$16, %esi
	xorl	%edx, %eax
	addl	%edx, %esi
	xorl	%esi, %eax
	addl	%edi, %eax
	movl	-36(%rsp), %edi
	rorl	$9, %eax
	leal	-1530992060(%rdi,%rcx), %edi
	movl	%edx, %ecx
	addl	%esi, %eax
	xorl	%esi, %ecx
	xorl	%eax, %ecx
	addl	%edi, %ecx
	movl	-24(%rsp), %edi
	roll	$4, %ecx
	leal	1272893353(%rdi,%rdx), %edx
	movl	%esi, %edi
	addl	%eax, %ecx
	xorl	%eax, %edi
	leal	-155497632(%r13,%rsi), %esi
	xorl	%ecx, %edi
	addl	%edx, %edi
	movl	%eax, %edx
	leal	-1094730640(%r11,%rax), %eax
	roll	$11, %edi
	xorl	%ecx, %edx
	addl	%ecx, %edi
	xorl	%edi, %edx
	addl	%esi, %edx
	movl	%ecx, %esi
	roll	$16, %edx
	xorl	%edi, %esi
	addl	%edi, %edx
	xorl	%edx, %esi
	addl	%eax, %esi
	leal	681279174(%r9,%rcx), %eax
	movl	%edi, %ecx
	rorl	$9, %esi
	xorl	%edx, %ecx
	leal	-358537222(%r14,%rdi), %edi
	addl	%edx, %esi
	xorl	%esi, %ecx
	addl	%eax, %ecx
	movl	%edx, %eax
	roll	$4, %ecx
	xorl	%esi, %eax
	addl	%esi, %ecx
	xorl	%ecx, %eax
	addl	%edi, %eax
	movl	-28(%rsp), %edi
	roll	$11, %eax
	leal	-722521979(%rdi,%rdx), %edx
	movl	%esi, %edi
	addl	%ecx, %eax
	xorl	%ecx, %edi
	xorl	%eax, %edi
	addl	%edx, %edi
	movl	-20(%rsp), %edx
	roll	$16, %edi
	leal	76029189(%rdx,%rsi), %edx
	movl	%ecx, %esi
	addl	%eax, %edi
	xorl	%eax, %esi
	leal	-640364487(%r15,%rcx), %ecx
	xorl	%edi, %esi
	addl	%edx, %esi
	movl	%eax, %edx
	leal	-421815835(%rbx,%rax), %eax
	rorl	$9, %esi
	xorl	%edi, %edx
	addl	%edi, %esi
	xorl	%esi, %edx
	addl	%ecx, %edx
	movl	%edi, %ecx
	roll	$4, %edx
	addl	%esi, %edx
	xorl	%esi, %ecx
	xorl	%edx, %ecx
	addl	%eax, %ecx
	leal	530742520(%r10,%rdi), %eax
	movl	%esi, %edi
	roll	$11, %ecx
	xorl	%edx, %edi
	addl	%edx, %ecx
	xorl	%ecx, %edi
	addl	%eax, %edi
	movl	-32(%rsp), %eax
	roll	$16, %edi
	leal	-995338651(%rax,%rsi), %esi
	movl	%edx, %eax
	addl	%ecx, %edi
	xorl	%ecx, %eax
	xorl	%edi, %eax
	addl	%esi, %eax
	leal	-198630844(%r14,%rdx), %esi
	movl	%ecx, %edx
	rorl	$9, %eax
	notl	%edx
	addl	%edi, %eax
	orl	%eax, %edx
	xorl	%edi, %edx
	addl	%esi, %edx
	leal	1126891415(%r13,%rcx), %esi
	movl	%edi, %ecx
	roll	$6, %edx
	notl	%ecx
	leal	-1416354905(%r12,%rdi), %edi
	addl	%eax, %edx
	orl	%edx, %ecx
	xorl	%eax, %ecx
	addl	%esi, %ecx
	movl	%eax, %esi
	roll	$10, %ecx
	notl	%esi
	addl	%edx, %ecx
	orl	%ecx, %esi
	xorl	%edx, %esi
	addl	%edi, %esi
	leal	-57434055(%rbp,%rax), %edi
	movl	%edx, %eax
	roll	$15, %esi
	notl	%eax
	addl	%ecx, %esi
	orl	%esi, %eax
	xorl	%ecx, %eax
	addl	%edi, %eax
	leal	1700485571(%rbx,%rdx), %edi
	movl	%ecx, %edx
	movl	-28(%rsp), %ebx
	rorl	$11, %eax
	notl	%edx
	addl	%esi, %eax
	orl	%eax, %edx
	xorl	%esi, %edx
	addl	%edi, %edx
	leal	-1894986606(%rbx,%rcx), %edi
	movl	%esi, %ecx
	movl	-36(%rsp), %ebx
	roll	$6, %edx
	notl	%ecx
	addl	%eax, %edx
	orl	%edx, %ecx
	xorl	%eax, %ecx
	addl	%edi, %ecx
	leal	-1051523(%r11,%rsi), %edi
	movl	%eax, %esi
	roll	$10, %ecx
	notl	%esi
	addl	%edx, %ecx
	orl	%ecx, %esi
	xorl	%edx, %esi
	addl	%edi, %esi
	leal	-2054922799(%rbx,%rax), %edi
	movl	%edx, %eax
	movl	-16(%rsp), %ebx
	roll	$15, %esi
	notl	%eax
	addl	%ecx, %esi
	orl	%esi, %eax
	xorl	%ecx, %eax
	addl	%edi, %eax
	leal	1873313359(%rbx,%rdx), %edi
	movl	%ecx, %edx
	movl	-20(%rsp), %ebx
	rorl	$11, %eax
	notl	%edx
	addl	%esi, %eax
	orl	%eax, %edx
	xorl	%esi, %edx
	addl	%edi, %edx
	leal	-30611744(%r10,%rcx), %edi
	movl	%esi, %ecx
	roll	$6, %edx
	notl	%ecx
	addl	%eax, %edx
	orl	%edx, %ecx
	xorl	%eax, %ecx
	addl	%edi, %ecx
	leal	-1560198380(%rbx,%rsi), %edi
	movl	%eax, %esi
	movl	-12(%rsp), %ebx
	roll	$10, %ecx
	notl	%esi
	leal	1309151649(%r9,%rax), %eax
	addl	%edx, %ecx
	orl	%ecx, %esi
	xorl	%edx, %esi
	addl	%edi, %esi
	movl	%edx, %edi
	roll	$15, %esi
	notl	%edi
	addl	%ecx, %esi
	orl	%esi, %edi
	xorl	%ecx, %edi
	addl	%eax, %edi
	movl	-24(%rsp), %eax
	rorl	$11, %edi
	leal	-145523070(%rax,%rdx), %edx
	movl	%ecx, %eax
	addl	%esi, %edi
	notl	%eax
	leal	-1120210379(%rbx,%rcx), %ecx
	movl	-32(%rsp), %ebx
	orl	%edi, %eax
	xorl	%esi, %eax
	addl	%edx, %eax
	movl	%esi, %edx
	leal	718787259(%rbx,%rsi), %esi
	popq	%rbx
	.cfi_def_cfa_offset 48
	roll	$6, %eax
	notl	%edx
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	addl	%edi, %eax
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	orl	%eax, %edx
	xorl	%edi, %edx
	addl	%ecx, %edx
	movl	%edi, %ecx
	leal	-343485551(%r15,%rdi), %edi
	popq	%r15
	.cfi_def_cfa_offset 8
	roll	$10, %edx
	notl	%ecx
	addl	%eax, %edx
	orl	%edx, %ecx
	xorl	%eax, %ecx
	addl	%esi, %ecx
	movl	%eax, %esi
	addl	(%r8), %eax
	roll	$15, %ecx
	notl	%esi
	movl	%eax, (%r8)
	addl	%edx, %ecx
	orl	%ecx, %esi
	xorl	%edx, %esi
	addl	%edi, %esi
	movl	%esi, %eax
	movl	4(%r8), %esi
	rorl	$11, %eax
	addl	%ecx, %esi
	addl	%esi, %eax
	movl	%eax, 4(%r8)
	movl	8(%r8), %eax
	addl	%ecx, %eax
	movl	%eax, 8(%r8)
	movl	12(%r8), %eax
	addl	%edx, %eax
	movl	%eax, 12(%r8)
	ret
	.cfi_endproc
.LFE2011:
	.size	_ZL9TransformPjS_, .-_ZL9TransformPjS_
	.type	_ZL26__cudaUnregisterBinaryUtilv, @function
_ZL26__cudaUnregisterBinaryUtilv:
.LFB2035:
	.cfi_startproc
	endbr64
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	jmp	__cudaUnregisterFatBinary@PLT
	.cfi_endproc
.LFE2035:
	.size	_ZL26__cudaUnregisterBinaryUtilv, .-_ZL26__cudaUnregisterBinaryUtilv
	.globl	_Z7MD5InitP7MD5_CTX
	.type	_Z7MD5InitP7MD5_CTX, @function
_Z7MD5InitP7MD5_CTX:
.LFB2008:
	.cfi_startproc
	endbr64
	xorl	%eax, %eax
	movq	%rax, (%rdi)
	movabsq	$-1167088121787636991, %rax
	movq	%rax, 8(%rdi)
	movabsq	$1167088121787636990, %rax
	movq	%rax, 16(%rdi)
	ret
	.cfi_endproc
.LFE2008:
	.size	_Z7MD5InitP7MD5_CTX, .-_Z7MD5InitP7MD5_CTX
	.globl	_Z9MD5UpdateP7MD5_CTXPhj
	.type	_Z9MD5UpdateP7MD5_CTXPhj, @function
_Z9MD5UpdateP7MD5_CTXPhj:
.LFB2009:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movq	%rsi, %r12
	leal	0(,%rdx,8), %esi
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movq	%rdi, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 128
	movl	(%rdi), %ecx
	movq	%fs:40, %rax
	movq	%rax, 72(%rsp)
	xorl	%eax, %eax
	movl	%ecx, %eax
	shrl	$3, %eax
	andl	$63, %eax
	addl	%esi, %ecx
	jnc	.L8
	incl	4(%rdi)
.L8:
	movl	%ecx, (%rbx)
	movl	%edx, %ecx
	movl	%edx, %edx
	leaq	8(%rsp), %r13
	shrl	$29, %ecx
	addl	%ecx, 4(%rbx)
	leaq	(%r12,%rdx), %rbp
.L9:
	cmpq	%rbp, %r12
	je	.L18
	movb	(%r12), %sil
	movslq	%eax, %rcx
	incq	%r12
	leal	1(%rax), %edx
	movb	%sil, 24(%rbx,%rcx)
	cmpl	$63, %eax
	jne	.L10
	xorl	%edx, %edx
.L11:
	movzbl	27(%rbx,%rdx), %eax
	movzbl	26(%rbx,%rdx), %ecx
	sall	$24, %eax
	sall	$16, %ecx
	orl	%ecx, %eax
	movzbl	24(%rbx,%rdx), %ecx
	orl	%ecx, %eax
	movzbl	25(%rbx,%rdx), %ecx
	addq	$4, %rdx
	sall	$8, %ecx
	orl	%ecx, %eax
	movl	%eax, -4(%rdx,%r13)
	cmpq	$64, %rdx
	jne	.L11
	leaq	8(%rbx), %rdi
	movq	%r13, %rsi
	call	_ZL9TransformPjS_
	xorl	%edx, %edx
.L10:
	movl	%edx, %eax
	jmp	.L9
.L18:
	movq	72(%rsp), %rax
	subq	%fs:40, %rax
	je	.L13
	call	__stack_chk_fail@PLT
.L13:
	addq	$88, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2009:
	.size	_Z9MD5UpdateP7MD5_CTXPhj, .-_Z9MD5UpdateP7MD5_CTXPhj
	.globl	_Z8MD5FinalP7MD5_CTX
	.type	_Z8MD5FinalP7MD5_CTX, @function
_Z8MD5FinalP7MD5_CTX:
.LFB2010:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movl	$56, %edx
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 112
	movq	%fs:40, %rax
	movq	%rax, 72(%rsp)
	movq	(%rdi), %rax
	movq	%rax, 64(%rsp)
	movl	(%rdi), %eax
	shrl	$3, %eax
	andl	$63, %eax
	cmpl	$55, %eax
	jbe	.L28
	movl	$120, %edx
.L28:
	subl	%eax, %edx
	leaq	_ZL7PADDING(%rip), %rsi
	movq	%rbx, %rdi
	call	_Z9MD5UpdateP7MD5_CTXPhj
	xorl	%edx, %edx
.L22:
	movzbl	27(%rbx,%rdx), %eax
	movzbl	26(%rbx,%rdx), %ecx
	leaq	8(%rsp), %rsi
	sall	$16, %ecx
	sall	$24, %eax
	orl	%ecx, %eax
	movzbl	24(%rbx,%rdx), %ecx
	orl	%ecx, %eax
	movzbl	25(%rbx,%rdx), %ecx
	sall	$8, %ecx
	orl	%ecx, %eax
	movl	%eax, 8(%rsp,%rdx)
	addq	$4, %rdx
	cmpq	$56, %rdx
	jne	.L22
	leaq	8(%rbx), %rbp
	addq	$24, %rbx
	movq	%rbp, %rdi
	call	_ZL9TransformPjS_
	movq	%rbp, %rax
.L23:
	movl	(%rax), %edx
	addq	$4, %rax
	movl	%edx, %ecx
	movb	%dl, 76(%rax)
	movb	%dh, 77(%rax)
	shrl	$16, %ecx
	shrl	$24, %edx
	movb	%cl, 78(%rax)
	movb	%dl, 79(%rax)
	cmpq	%rax, %rbx
	jne	.L23
	movq	72(%rsp), %rax
	subq	%fs:40, %rax
	je	.L24
	call	__stack_chk_fail@PLT
.L24:
	addq	$88, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2010:
	.size	_Z8MD5FinalP7MD5_CTX, .-_Z8MD5FinalP7MD5_CTX
	.section	.text.startup,"ax",@progbits
	.type	_ZL24__sti____cudaRegisterAllv, @function
_ZL24__sti____cudaRegisterAllv:
.LFB2058:
	.cfi_startproc
	endbr64
	pushq	%rax
	.cfi_def_cfa_offset 16
	leaq	_ZL15__fatDeviceText(%rip), %rdi
	call	__cudaRegisterFatBinary@PLT
	movq	%rax, %rdi
	movq	%rax, _ZL20__cudaFatCubinHandle(%rip)
	call	__cudaRegisterFatBinaryEnd@PLT
	leaq	_ZL26__cudaUnregisterBinaryUtilv(%rip), %rdi
	popq	%rdx
	.cfi_def_cfa_offset 8
	jmp	atexit@PLT
	.cfi_endproc
.LFE2058:
	.size	_ZL24__sti____cudaRegisterAllv, .-_ZL24__sti____cudaRegisterAllv
	.section	.init_array,"aw"
	.align 8
	.quad	_ZL24__sti____cudaRegisterAllv
	.section	.nvFatBinSegment,"aw"
	.align 8
	.type	_ZL15__fatDeviceText, @object
	.size	_ZL15__fatDeviceText, 24
_ZL15__fatDeviceText:
	.long	1180844977
	.long	1
	.quad	fatbinData
	.quad	0
	.local	_ZL20__cudaFatCubinHandle
	.comm	_ZL20__cudaFatCubinHandle,8,8
	.data
	.align 32
	.type	_ZL7PADDING, @object
	.size	_ZL7PADDING, 64
_ZL7PADDING:
	.string	"\200"
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.string	""
	.ident	"GCC: (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

/* typedef a 32 bit type */
typedef unsigned int UINT4;

/* Data structure for MD5 (Message Digest) computation */
typedef struct {
  UINT4 i[2];                   /* number of _bits_ handled mod 2^64 */
  UINT4 buf[4];                                    /* scratch buffer */
  unsigned char in[64];                              /* input buffer */
  unsigned char digest[16];     /* actual digest after MD5Final call */
} MD5_CTX;

/* forward declaration */
static void Transform (UINT4 * buf, UINT4 * in);

static unsigned char PADDING[64] = {
  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

/* F, G and H are basic MD5 functions: selection, majority, parity */
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z))) 

/* ROTATE_LEFT rotates x left n bits */
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */
/* Rotation is separate from addition to prevent recomputation */
#define FF(a, b, c, d, x, s, ac) \
  {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }
#define GG(a, b, c, d, x, s, ac) \
  {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }
#define HH(a, b, c, d, x, s, ac) \
  {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }
#define II(a, b, c, d, x, s, ac) \
  {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
   (a) = ROTATE_LEFT ((a), (s)); \
   (a) += (b); \
  }

void MD5Init (MD5_CTX * mdContext)
{
  mdContext->i[0] = mdContext->i[1] = (UINT4)0;

  /* Load magic initialization constants.
   */
  mdContext->buf[0] = (UINT4)0x67452301;
  mdContext->buf[1] = (UINT4)0xefcdab89;
  mdContext->buf[2] = (UINT4)0x98badcfe;
  mdContext->buf[3] = (UINT4)0x10325476;
}

void MD5Update (MD5_CTX * mdContext, unsigned char * inBuf, unsigned int inLen)
{
  UINT4 in[16];
  int mdi;
  unsigned int i, ii;

  /* compute number of bytes mod 64 */
  mdi = (int)((mdContext->i[0] >> 3) & 0x3F);

  /* update number of bits */
  if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0])
    mdContext->i[1]++;
  mdContext->i[0] += ((UINT4)inLen << 3);
  mdContext->i[1] += ((UINT4)inLen >> 29);

  while (inLen--) {
    /* add new character to buffer, increment mdi */
    mdContext->in[mdi++] = *inBuf++;

    /* transform if necessary */
    if (mdi == 0x40) {
      for (i = 0, ii = 0; i < 16; i++, ii += 4)
        in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
                (((UINT4)mdContext->in[ii+2]) << 16) |
                (((UINT4)mdContext->in[ii+1]) << 8) |
                ((UINT4)mdContext->in[ii]);
      Transform (mdContext->buf, in);
      mdi = 0;
    }
  }
}

void MD5Final (MD5_CTX * mdContext)
{
  UINT4 in[16];
  int mdi;
  unsigned int i, ii;
  unsigned int padLen;

  /* save number of bits */
  in[14] = mdContext->i[0];
  in[15] = mdContext->i[1];

  /* compute number of bytes mod 64 */
  mdi = (int)((mdContext->i[0] >> 3) & 0x3F);

  /* pad out to 56 mod 64 */
  padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);
  MD5Update (mdContext, PADDING, padLen);

  /* append length in bits and transform */
  for (i = 0, ii = 0; i < 14; i++, ii += 4)
    in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
            (((UINT4)mdContext->in[ii+2]) << 16) |
            (((UINT4)mdContext->in[ii+1]) << 8) |
            ((UINT4)mdContext->in[ii]);
  Transform (mdContext->buf, in);

  /* store buffer in digest */
  for (i = 0, ii = 0; i < 4; i++, ii += 4) {
    mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);
    mdContext->digest[ii+1] =
      (unsigned char)((mdContext->buf[i] >> 8) & 0xFF);
    mdContext->digest[ii+2] =
      (unsigned char)((mdContext->buf[i] >> 16) & 0xFF);
    mdContext->digest[ii+3] =
      (unsigned char)((mdContext->buf[i] >> 24) & 0xFF);
  }
}

/* Basic MD5 step. Transform buf based on in.
 */
static void Transform (UINT4 * buf, UINT4 * in)
{
  UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];

  /* Round 1 */
#define S11 7
#define S12 12
#define S13 17
#define S14 22
  FF ( a, b, c, d, in[ 0], S11, 3614090360); /* 1 */
  FF ( d, a, b, c, in[ 1], S12, 3905402710); /* 2 */
  FF ( c, d, a, b, in[ 2], S13,  606105819); /* 3 */
  FF ( b, c, d, a, in[ 3], S14, 3250441966); /* 4 */
  FF ( a, b, c, d, in[ 4], S11, 4118548399); /* 5 */
  FF ( d, a, b, c, in[ 5], S12, 1200080426); /* 6 */
  FF ( c, d, a, b, in[ 6], S13, 2821735955); /* 7 */
  FF ( b, c, d, a, in[ 7], S14, 4249261313); /* 8 */
  FF ( a, b, c, d, in[ 8], S11, 1770035416); /* 9 */
  FF ( d, a, b, c, in[ 9], S12, 2336552879); /* 10 */
  FF ( c, d, a, b, in[10], S13, 4294925233); /* 11 */
  FF ( b, c, d, a, in[11], S14, 2304563134); /* 12 */
  FF ( a, b, c, d, in[12], S11, 1804603682); /* 13 */
  FF ( d, a, b, c, in[13], S12, 4254626195); /* 14 */
  FF ( c, d, a, b, in[14], S13, 2792965006); /* 15 */
  FF ( b, c, d, a, in[15], S14, 1236535329); /* 16 */

  /* Round 2 */
#define S21 5
#define S22 9
#define S23 14
#define S24 20
  GG ( a, b, c, d, in[ 1], S21, 4129170786); /* 17 */
  GG ( d, a, b, c, in[ 6], S22, 3225465664); /* 18 */
  GG ( c, d, a, b, in[11], S23,  643717713); /* 19 */
  GG ( b, c, d, a, in[ 0], S24, 3921069994); /* 20 */
  GG ( a, b, c, d, in[ 5], S21, 3593408605); /* 21 */
  GG ( d, a, b, c, in[10], S22,   38016083); /* 22 */
  GG ( c, d, a, b, in[15], S23, 3634488961); /* 23 */
  GG ( b, c, d, a, in[ 4], S24, 3889429448); /* 24 */
  GG ( a, b, c, d, in[ 9], S21,  568446438); /* 25 */
  GG ( d, a, b, c, in[14], S22, 3275163606); /* 26 */
  GG ( c, d, a, b, in[ 3], S23, 4107603335); /* 27 */
  GG ( b, c, d, a, in[ 8], S24, 1163531501); /* 28 */
  GG ( a, b, c, d, in[13], S21, 2850285829); /* 29 */
  GG ( d, a, b, c, in[ 2], S22, 4243563512); /* 30 */
  GG ( c, d, a, b, in[ 7], S23, 1735328473); /* 31 */
  GG ( b, c, d, a, in[12], S24, 2368359562); /* 32 */

  /* Round 3 */
#define S31 4
#define S32 11
#define S33 16
#define S34 23
  HH ( a, b, c, d, in[ 5], S31, 4294588738); /* 33 */
  HH ( d, a, b, c, in[ 8], S32, 2272392833); /* 34 */
  HH ( c, d, a, b, in[11], S33, 1839030562); /* 35 */
  HH ( b, c, d, a, in[14], S34, 4259657740); /* 36 */
  HH ( a, b, c, d, in[ 1], S31, 2763975236); /* 37 */
  HH ( d, a, b, c, in[ 4], S32, 1272893353); /* 38 */
  HH ( c, d, a, b, in[ 7], S33, 4139469664); /* 39 */
  HH ( b, c, d, a, in[10], S34, 3200236656); /* 40 */
  HH ( a, b, c, d, in[13], S31,  681279174); /* 41 */
  HH ( d, a, b, c, in[ 0], S32, 3936430074); /* 42 */
  HH ( c, d, a, b, in[ 3], S33, 3572445317); /* 43 */
  HH ( b, c, d, a, in[ 6], S34,   76029189); /* 44 */
  HH ( a, b, c, d, in[ 9], S31, 3654602809); /* 45 */
  HH ( d, a, b, c, in[12], S32, 3873151461); /* 46 */
  HH ( c, d, a, b, in[15], S33,  530742520); /* 47 */
  HH ( b, c, d, a, in[ 2], S34, 3299628645); /* 48 */

  /* Round 4 */
#define S41 6
#define S42 10
#define S43 15
#define S44 21
  II ( a, b, c, d, in[ 0], S41, 4096336452); /* 49 */
  II ( d, a, b, c, in[ 7], S42, 1126891415); /* 50 */
  II ( c, d, a, b, in[14], S43, 2878612391); /* 51 */
  II ( b, c, d, a, in[ 5], S44, 4237533241); /* 52 */
  II ( a, b, c, d, in[12], S41, 1700485571); /* 53 */
  II ( d, a, b, c, in[ 3], S42, 2399980690); /* 54 */
  II ( c, d, a, b, in[10], S43, 4293915773); /* 55 */
  II ( b, c, d, a, in[ 1], S44, 2240044497); /* 56 */
  II ( a, b, c, d, in[ 8], S41, 1873313359); /* 57 */
  II ( d, a, b, c, in[15], S42, 4264355552); /* 58 */
  II ( c, d, a, b, in[ 6], S43, 2734768916); /* 59 */
  II ( b, c, d, a, in[13], S44, 1309151649); /* 60 */
  II ( a, b, c, d, in[ 4], S41, 4149444226); /* 61 */
  II ( d, a, b, c, in[11], S42, 3174756917); /* 62 */
  II ( c, d, a, b, in[ 2], S43,  718787259); /* 63 */
  II ( b, c, d, a, in[ 9], S44, 3951481745); /* 64 */

  buf[0] += a;
  buf[1] += b;
  buf[2] += c;
  buf[3] += d;
}

/*
 **********************************************************************
 ** End of md5.c                                                     **
 ******************************* (cut) ********************************
 */

/*
 **********************************************************************
 ** md5driver.c -- sample routines to test                           **
 ** RSA Data Security, Inc. MD5 message digest algorithm.            **
 ** Created: 2/16/90 RLR                                             **
 ** Updated: 1/91 SRD                                                **
 **********************************************************************
 */

/*
 **********************************************************************
 ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **
 **                                                                  **
 ** RSA Data Security, Inc. makes no representations concerning      **
 ** either the merchantability of this software or the suitability   **
 ** of this software for any particular purpose.  It is provided "as **
 ** is" without express or implied warranty of any kind.             **
 **                                                                  **
 ** These notices must be retained in any copies of any part of this **
 ** documentation and/or software.                                   **
 **********************************************************************
 */


#include <hip/hip_runtime.h>
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <string.h>
/* Prints message digest buffer in mdContext as 32 hexadecimal digits.
   Order is from low-order byte to high-order byte of digest.
   Each byte is printed with high-order hexadecimal digit first.
 */
static void MDPrint (MD5_CTX * mdContext,char * hash)
{
  int i;

  for (i = 0; i < 16; i++){
    //printf ("%02x", mdContext->digest[i]);
  if (i == 0)
    sprintf(hash,"%02x", mdContext->digest[i]);
  else
    sprintf(hash + strlen(hash),"%02x", mdContext->digest[i]);
  }
}

static void MDString (char * inString,char * hash)
{
  MD5_CTX mdContext;
  unsigned int len = strlen (inString);
  unsigned char * uInString = reinterpret_cast<unsigned char *>( inString );
  MD5Init (&mdContext);
  MD5Update (&mdContext, uInString, len);
  MD5Final (&mdContext);
  MDPrint (&mdContext,hash);
  //printf (" \"%s\"\n\n", uInString);
}
	.text
	.file	"md5LibCPU.hip"
	.section	.rodata.cst16,"aM",@progbits,16
	.p2align	4, 0x0                          # -- Begin function _Z7MD5InitP7MD5_CTX
.LCPI0_0:
	.long	0                               # 0x0
	.long	0                               # 0x0
	.long	1732584193                      # 0x67452301
	.long	4023233417                      # 0xefcdab89
	.text
	.globl	_Z7MD5InitP7MD5_CTX
	.type	_Z7MD5InitP7MD5_CTX,@function
_Z7MD5InitP7MD5_CTX:                    # @_Z7MD5InitP7MD5_CTX
	.cfi_startproc
# %bb.0:
	movaps	.LCPI0_0(%rip), %xmm0           # xmm0 = [0,0,1732584193,4023233417]
	movups	%xmm0, (%rdi)
	movabsq	$1167088121787636990, %rax      # imm = 0x1032547698BADCFE
	movq	%rax, 16(%rdi)
	retq
.Lfunc_end0:
	.size	_Z7MD5InitP7MD5_CTX, .Lfunc_end0-_Z7MD5InitP7MD5_CTX
	.cfi_endproc
                                        # -- End function
	.globl	_Z9MD5UpdateP7MD5_CTXPhj        # -- Begin function _Z9MD5UpdateP7MD5_CTXPhj
	.type	_Z9MD5UpdateP7MD5_CTXPhj,@function
_Z9MD5UpdateP7MD5_CTXPhj:               # @_Z9MD5UpdateP7MD5_CTXPhj
	.cfi_startproc
# %bb.0:                                # %._crit_edge41
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r13
	.cfi_def_cfa_offset 32
	pushq	%r12
	.cfi_def_cfa_offset 40
	pushq	%rbx
	.cfi_def_cfa_offset 48
	subq	$64, %rsp
	.cfi_def_cfa_offset 112
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	movl	%edx, %ebx
	movl	(%rdi), %eax
	leal	(,%rbx,8), %ecx
	shrl	$29, %edx
	addl	%eax, %ecx
	movl	%ecx, (%rdi)
	adcl	%edx, 4(%rdi)
	testl	%ebx, %ebx
	je	.LBB1_7
# %bb.1:                                # %.lr.ph
	movq	%rdi, %r14
	movq	%rsi, %r15
	shrl	$3, %eax
	andl	$63, %eax
	leaq	8(%rdi), %r12
	movq	%rsp, %r13
.LBB1_2:                                # =>This Loop Header: Depth=1
                                        #     Child Loop BB1_4 Depth 2
	movb	(%r15), %cl
	movl	%eax, %edx
	incl	%eax
	movb	%cl, 24(%r14,%rdx)
	cmpl	$64, %eax
	jne	.LBB1_6
# %bb.3:                                # %.preheader.preheader
                                        #   in Loop: Header=BB1_2 Depth=1
	xorl	%eax, %eax
.LBB1_4:                                # %.preheader
                                        #   Parent Loop BB1_2 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	movl	24(%r14,%rax,4), %ecx
	movl	%ecx, (%rsp,%rax,4)
	incq	%rax
	cmpq	$16, %rax
	jne	.LBB1_4
# %bb.5:                                #   in Loop: Header=BB1_2 Depth=1
	movq	%r12, %rdi
	movq	%r13, %rsi
	callq	_ZL9TransformPjS_
	xorl	%eax, %eax
.LBB1_6:                                #   in Loop: Header=BB1_2 Depth=1
	decl	%ebx
	incq	%r15
	testl	%ebx, %ebx
	jne	.LBB1_2
.LBB1_7:                                # %._crit_edge
	addq	$64, %rsp
	.cfi_def_cfa_offset 48
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end1:
	.size	_Z9MD5UpdateP7MD5_CTXPhj, .Lfunc_end1-_Z9MD5UpdateP7MD5_CTXPhj
	.cfi_endproc
                                        # -- End function
	.type	_ZL9TransformPjS_,@function     # -- Begin function _ZL9TransformPjS_
_ZL9TransformPjS_:                      # @_ZL9TransformPjS_
	.cfi_startproc
# %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	pushq	%r15
	.cfi_def_cfa_offset 24
	pushq	%r14
	.cfi_def_cfa_offset 32
	pushq	%r13
	.cfi_def_cfa_offset 40
	pushq	%r12
	.cfi_def_cfa_offset 48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movq	%rsi, %rbp
	movq	%rdi, -32(%rsp)                 # 8-byte Spill
	movl	(%rdi), %r9d
	movq	%r9, -8(%rsp)                   # 8-byte Spill
	movl	4(%rdi), %r10d
	movl	8(%rdi), %edx
	movl	12(%rdi), %ecx
	movl	%edx, %eax
	xorl	%ecx, %eax
	andl	%r10d, %eax
	xorl	%ecx, %eax
	movq	%rcx, %rsi
	movq	%rcx, -16(%rsp)                 # 8-byte Spill
	movl	(%rbp), %ecx
	movq	%rcx, -56(%rsp)                 # 8-byte Spill
	movl	4(%rbp), %r8d
	movq	%r8, -96(%rsp)                  # 8-byte Spill
	addl	%r9d, %ecx
	addl	%ecx, %eax
	addl	$-680876936, %eax               # imm = 0xD76AA478
	roll	$7, %eax
	movq	%r10, %rdi
	addl	%edi, %eax
	movl	%edi, %ecx
	movq	%r10, %r9
	xorl	%edx, %ecx
	andl	%eax, %ecx
	xorl	%edx, %ecx
	movq	%rdx, %rdi
	movq	%rdx, -24(%rsp)                 # 8-byte Spill
	leal	(%rsi,%r8), %edx
	addl	%edx, %ecx
	addl	$-389564586, %ecx               # imm = 0xE8C7B756
	roll	$12, %ecx
	addl	%eax, %ecx
	movl	%eax, %edx
	xorl	%r9d, %edx
	andl	%ecx, %edx
	xorl	%r9d, %edx
	movq	%r10, -40(%rsp)                 # 8-byte Spill
	movl	8(%rbp), %r13d
	leal	(%rdi,%r13), %esi
	addl	%esi, %edx
	addl	$606105819, %edx                # imm = 0x242070DB
	roll	$17, %edx
	addl	%ecx, %edx
	movl	%ecx, %esi
	xorl	%eax, %esi
	andl	%edx, %esi
	xorl	%eax, %esi
	movl	12(%rbp), %edi
	movq	%rdi, -48(%rsp)                 # 8-byte Spill
	addl	%r10d, %edi
	addl	%edi, %esi
	addl	$-1044525330, %esi              # imm = 0xC1BDCEEE
	roll	$22, %esi
	addl	%edx, %esi
	movl	%edx, %edi
	xorl	%ecx, %edi
	andl	%esi, %edi
	xorl	%ecx, %edi
	movl	16(%rbp), %r8d
	movl	%r8d, -104(%rsp)                # 4-byte Spill
	addl	%r8d, %eax
	addl	%edi, %eax
	addl	$-176418897, %eax               # imm = 0xF57C0FAF
	roll	$7, %eax
	addl	%esi, %eax
	movl	%esi, %edi
	xorl	%edx, %edi
	andl	%eax, %edi
	xorl	%edx, %edi
	movl	20(%rbp), %r8d
	movl	%r8d, -112(%rsp)                # 4-byte Spill
	addl	%r8d, %ecx
	addl	%edi, %ecx
	addl	$1200080426, %ecx               # imm = 0x4787C62A
	roll	$12, %ecx
	addl	%eax, %ecx
	movl	%eax, %edi
	xorl	%esi, %edi
	andl	%ecx, %edi
	xorl	%esi, %edi
	movl	24(%rbp), %r14d
	addl	%r14d, %edx
	movl	%r14d, -60(%rsp)                # 4-byte Spill
	addl	%edi, %edx
	addl	$-1473231341, %edx              # imm = 0xA8304613
	roll	$17, %edx
	addl	%ecx, %edx
	movl	%ecx, %edi
	xorl	%eax, %edi
	andl	%edx, %edi
	xorl	%eax, %edi
	movl	28(%rbp), %r8d
	movl	%r8d, -64(%rsp)                 # 4-byte Spill
	addl	%r8d, %esi
	addl	%edi, %esi
	addl	$-45705983, %esi                # imm = 0xFD469501
	roll	$22, %esi
	addl	%edx, %esi
	movl	%edx, %edi
	xorl	%ecx, %edi
	andl	%esi, %edi
	xorl	%ecx, %edi
	movl	32(%rbp), %r8d
	movl	%r8d, -108(%rsp)                # 4-byte Spill
	addl	%r8d, %eax
	addl	%edi, %eax
	addl	$1770035416, %eax               # imm = 0x698098D8
	roll	$7, %eax
	addl	%esi, %eax
	movl	%esi, %edi
	xorl	%edx, %edi
	andl	%eax, %edi
	xorl	%edx, %edi
	movl	36(%rbp), %r8d
	movl	%r8d, -116(%rsp)                # 4-byte Spill
	addl	%r8d, %ecx
	leal	(%rdi,%rcx), %r10d
	addl	$-1958414417, %r10d             # imm = 0x8B44F7AF
	roll	$12, %r10d
	addl	%eax, %r10d
	movl	%eax, %ecx
	xorl	%esi, %ecx
	andl	%r10d, %ecx
	xorl	%esi, %ecx
	movl	40(%rbp), %edi
	addl	%edi, %edx
	movl	%edi, %r15d
	movl	%edi, -76(%rsp)                 # 4-byte Spill
	addl	%ecx, %edx
	addl	$-42063, %edx                   # imm = 0xFFFF5BB1
	roll	$17, %edx
	addl	%r10d, %edx
	movl	%r10d, %ecx
	xorl	%eax, %ecx
	andl	%edx, %ecx
	xorl	%eax, %ecx
	movl	44(%rbp), %ebx
	addl	%ebx, %esi
	movl	%ebx, -100(%rsp)                # 4-byte Spill
	leal	(%rcx,%rsi), %r11d
	addl	$-1990404162, %r11d             # imm = 0x895CD7BE
	roll	$22, %r11d
	addl	%edx, %r11d
	movl	%edx, %ecx
	xorl	%r10d, %ecx
	andl	%r11d, %ecx
	xorl	%r10d, %ecx
	movl	48(%rbp), %esi
	movl	%esi, -72(%rsp)                 # 4-byte Spill
	addl	%esi, %eax
	leal	(%rcx,%rax), %r9d
	addl	$1804603682, %r9d               # imm = 0x6B901122
	roll	$7, %r9d
	addl	%r11d, %r9d
	movl	%r11d, %eax
	xorl	%edx, %eax
	andl	%r9d, %eax
	xorl	%edx, %eax
	movl	52(%rbp), %ecx
	movl	%ecx, -80(%rsp)                 # 4-byte Spill
	addl	%ecx, %r10d
	addl	%r10d, %eax
	addl	$-40341101, %eax                # imm = 0xFD987193
	roll	$12, %eax
	addl	%r9d, %eax
	movl	%eax, %edi
	andl	%r9d, %edi
	movl	%eax, %r8d
	notl	%r8d
	movl	%r11d, %esi
	andl	%r8d, %esi
	orl	%edi, %esi
	movl	56(%rbp), %r12d
	addl	%r12d, %edx
	addl	%esi, %edx
	addl	$-1502002290, %edx              # imm = 0xA679438E
	roll	$17, %edx
	addl	%eax, %edx
	movl	%edx, %esi
	andl	%eax, %esi
	movl	%edx, %edi
	notl	%edi
	movl	%r9d, %ecx
	andl	%edi, %ecx
	orl	%esi, %ecx
	movl	60(%rbp), %esi
	addl	%esi, %r11d
	movl	%esi, %r10d
	movl	%esi, -68(%rsp)                 # 4-byte Spill
	leal	(%r11,%rcx), %esi
	addl	$1236535329, %esi               # imm = 0x49B40821
	roll	$22, %esi
	addl	%edx, %esi
	movl	%esi, %ecx
	andl	%eax, %ecx
	andl	%edx, %r8d
	orl	%ecx, %r8d
	addl	-96(%rsp), %r9d                 # 4-byte Folded Reload
	leal	(%r9,%r8), %ecx
	addl	$-165796510, %ecx               # imm = 0xF61E2562
	roll	$5, %ecx
	addl	%esi, %ecx
	movl	%ecx, %r8d
	andl	%edx, %r8d
	andl	%esi, %edi
	orl	%r8d, %edi
	addl	%r14d, %eax
	addl	%edi, %eax
	addl	$-1069501632, %eax              # imm = 0xC040B340
	roll	$9, %eax
	addl	%ecx, %eax
	movl	%eax, %edi
	xorl	%ecx, %edi
	andl	%esi, %edi
	xorl	%ecx, %edi
	addl	%ebx, %edx
	addl	%edi, %edx
	addl	$643717713, %edx                # imm = 0x265E5A51
	roll	$14, %edx
	addl	%eax, %edx
	movl	%edx, %edi
	xorl	%eax, %edi
	andl	%ecx, %edi
	xorl	%eax, %edi
	addl	-56(%rsp), %esi                 # 4-byte Folded Reload
	addl	%edi, %esi
	addl	$-373897302, %esi               # imm = 0xE9B6C7AA
	roll	$20, %esi
	addl	%edx, %esi
	movl	%esi, %edi
	xorl	%edx, %edi
	andl	%eax, %edi
	xorl	%edx, %edi
	movl	-112(%rsp), %r14d               # 4-byte Reload
	addl	%r14d, %ecx
	addl	%edi, %ecx
	addl	$-701558691, %ecx               # imm = 0xD62F105D
	roll	$5, %ecx
	addl	%esi, %ecx
	movl	%ecx, %edi
	xorl	%esi, %edi
	andl	%edx, %edi
	xorl	%esi, %edi
	addl	%r15d, %eax
	addl	%edi, %eax
	addl	$38016083, %eax                 # imm = 0x2441453
	roll	$9, %eax
	addl	%ecx, %eax
	movl	%eax, %edi
	xorl	%ecx, %edi
	andl	%esi, %edi
	xorl	%ecx, %edi
	addl	%r10d, %edx
	addl	%edi, %edx
	addl	$-660478335, %edx               # imm = 0xD8A1E681
	roll	$14, %edx
	addl	%eax, %edx
	movl	%edx, %edi
	xorl	%eax, %edi
	andl	%ecx, %edi
	xorl	%eax, %edi
	movl	-104(%rsp), %r11d               # 4-byte Reload
	addl	%r11d, %esi
	addl	%edi, %esi
	addl	$-405537848, %esi               # imm = 0xE7D3FBC8
	roll	$20, %esi
	addl	%edx, %esi
	movl	%esi, %edi
	xorl	%edx, %edi
	andl	%eax, %edi
	xorl	%edx, %edi
	addl	-116(%rsp), %ecx                # 4-byte Folded Reload
	addl	%edi, %ecx
	addl	$568446438, %ecx                # imm = 0x21E1CDE6
	roll	$5, %ecx
	addl	%esi, %ecx
	movl	%ecx, %edi
	xorl	%esi, %edi
	andl	%edx, %edi
	xorl	%esi, %edi
	movl	%r12d, -84(%rsp)                # 4-byte Spill
	addl	%r12d, %eax
	addl	%edi, %eax
	addl	$-1019803690, %eax              # imm = 0xC33707D6
	roll	$9, %eax
	addl	%ecx, %eax
	movl	%eax, %edi
	xorl	%ecx, %edi
	andl	%esi, %edi
	xorl	%ecx, %edi
	movq	-48(%rsp), %rbx                 # 8-byte Reload
	addl	%ebx, %edx
	addl	%edi, %edx
	addl	$-187363961, %edx               # imm = 0xF4D50D87
	roll	$14, %edx
	addl	%eax, %edx
	movl	%edx, %edi
	xorl	%eax, %edi
	andl	%ecx, %edi
	xorl	%eax, %edi
	movl	-108(%rsp), %r9d                # 4-byte Reload
	addl	%r9d, %esi
	addl	%edi, %esi
	addl	$1163531501, %esi               # imm = 0x455A14ED
	roll	$20, %esi
	addl	%edx, %esi
	movl	%esi, %edi
	xorl	%edx, %edi
	andl	%eax, %edi
	xorl	%edx, %edi
	movl	-80(%rsp), %r15d                # 4-byte Reload
	addl	%r15d, %ecx
	addl	%edi, %ecx
	addl	$-1444681467, %ecx              # imm = 0xA9E3E905
	roll	$5, %ecx
	addl	%esi, %ecx
	movl	%ecx, %edi
	xorl	%esi, %edi
	andl	%edx, %edi
	xorl	%esi, %edi
	addl	%r13d, %eax
	addl	%edi, %eax
	addl	$-51403784, %eax                # imm = 0xFCEFA3F8
	roll	$9, %eax
	addl	%ecx, %eax
	movl	%eax, %edi
	xorl	%ecx, %edi
	andl	%esi, %edi
	xorl	%ecx, %edi
	movl	-64(%rsp), %r10d                # 4-byte Reload
	addl	%r10d, %edx
	addl	%edi, %edx
	addl	$1735328473, %edx               # imm = 0x676F02D9
	roll	$14, %edx
	addl	%eax, %edx
	movl	%edx, %edi
	xorl	%eax, %edi
	andl	%ecx, %edi
	xorl	%eax, %edi
	movl	-72(%rsp), %ebp                 # 4-byte Reload
	addl	%ebp, %esi
	addl	%edi, %esi
	addl	$-1926607734, %esi              # imm = 0x8D2A4C8A
	roll	$20, %esi
	addl	%edx, %esi
	movl	%esi, %edi
	xorl	%edx, %edi
	movl	%edi, %r8d
	xorl	%eax, %r8d
	addl	%r14d, %ecx
	addl	%ecx, %r8d
	addl	$-378558, %r8d                  # imm = 0xFFFA3942
	roll	$4, %r8d
	addl	%esi, %r8d
	xorl	%r8d, %edi
	addl	%r9d, %eax
	addl	%edi, %eax
	addl	$-2022574463, %eax              # imm = 0x8771F681
	roll	$11, %eax
	addl	%r8d, %eax
	movl	%r8d, %ecx
	xorl	%esi, %ecx
	xorl	%eax, %ecx
	addl	-100(%rsp), %edx                # 4-byte Folded Reload
	addl	%edx, %ecx
	addl	$1839030562, %ecx               # imm = 0x6D9D6122
	roll	$16, %ecx
	addl	%eax, %ecx
	movl	%eax, %edx
	xorl	%r8d, %edx
	xorl	%ecx, %edx
	addl	%r12d, %esi
	addl	%esi, %edx
	addl	$-35309556, %edx                # imm = 0xFDE5380C
	roll	$23, %edx
	addl	%ecx, %edx
	movl	%ecx, %esi
	xorl	%eax, %esi
	xorl	%edx, %esi
	addl	-96(%rsp), %r8d                 # 4-byte Folded Reload
	addl	%r8d, %esi
	addl	$-1530992060, %esi              # imm = 0xA4BEEA44
	roll	$4, %esi
	addl	%edx, %esi
	movl	%edx, %edi
	xorl	%ecx, %edi
	xorl	%esi, %edi
	addl	%r11d, %eax
	addl	%edi, %eax
	addl	$1272893353, %eax               # imm = 0x4BDECFA9
	roll	$11, %eax
	addl	%esi, %eax
	movl	%esi, %edi
	xorl	%edx, %edi
	xorl	%eax, %edi
	addl	%r10d, %ecx
	movl	%r10d, %r9d
	addl	%edi, %ecx
	addl	$-155497632, %ecx               # imm = 0xF6BB4B60
	roll	$16, %ecx
	addl	%eax, %ecx
	movl	%eax, %edi
	xorl	%esi, %edi
	xorl	%ecx, %edi
	movl	-76(%rsp), %r11d                # 4-byte Reload
	addl	%r11d, %edx
	addl	%edi, %edx
	addl	$-1094730640, %edx              # imm = 0xBEBFBC70
	roll	$23, %edx
	addl	%ecx, %edx
	movl	%ecx, %edi
	xorl	%eax, %edi
	xorl	%edx, %edi
	addl	%r15d, %esi
	addl	%edi, %esi
	addl	$681279174, %esi                # imm = 0x289B7EC6
	roll	$4, %esi
	addl	%edx, %esi
	movl	%edx, %edi
	xorl	%ecx, %edi
	xorl	%esi, %edi
	movq	-56(%rsp), %r8                  # 8-byte Reload
	addl	%r8d, %eax
	addl	%edi, %eax
	addl	$-358537222, %eax               # imm = 0xEAA127FA
	roll	$11, %eax
	addl	%esi, %eax
	movl	%esi, %edi
	xorl	%edx, %edi
	xorl	%eax, %edi
	addl	%ebx, %ecx
	movq	%rbx, %r14
	addl	%edi, %ecx
	addl	$-722521979, %ecx               # imm = 0xD4EF3085
	roll	$16, %ecx
	addl	%eax, %ecx
	movl	%eax, %edi
	xorl	%esi, %edi
	xorl	%ecx, %edi
	movl	-60(%rsp), %r10d                # 4-byte Reload
	addl	%r10d, %edx
	addl	%edi, %edx
	addl	$76029189, %edx                 # imm = 0x4881D05
	roll	$23, %edx
	addl	%ecx, %edx
	movl	%ecx, %edi
	xorl	%eax, %edi
	xorl	%edx, %edi
	addl	-116(%rsp), %esi                # 4-byte Folded Reload
	addl	%edi, %esi
	addl	$-640364487, %esi               # imm = 0xD9D4D039
	roll	$4, %esi
	addl	%edx, %esi
	movl	%edx, %edi
	xorl	%ecx, %edi
	xorl	%esi, %edi
	addl	%ebp, %eax
	addl	%edi, %eax
	addl	$-421815835, %eax               # imm = 0xE6DB99E5
	roll	$11, %eax
	addl	%esi, %eax
	movl	%esi, %edi
	xorl	%edx, %edi
	xorl	%eax, %edi
	movl	-68(%rsp), %r12d                # 4-byte Reload
	addl	%r12d, %ecx
	addl	%edi, %ecx
	addl	$530742520, %ecx                # imm = 0x1FA27CF8
	roll	$16, %ecx
	addl	%eax, %ecx
	movl	%eax, %edi
	xorl	%esi, %edi
	xorl	%ecx, %edi
	addl	%r13d, %edx
	addl	%edi, %edx
	addl	$-995338651, %edx               # imm = 0xC4AC5665
	addl	%r8d, %esi
	roll	$23, %edx
	addl	%ecx, %edx
	movl	%eax, %edi
	notl	%edi
	orl	%edx, %edi
	xorl	%ecx, %edi
	leal	(%rdi,%rsi), %ebx
	addl	$-198630844, %ebx               # imm = 0xF4292244
	addl	%r9d, %eax
	roll	$6, %ebx
	addl	%edx, %ebx
	movl	%ecx, %esi
	notl	%esi
	orl	%ebx, %esi
	xorl	%edx, %esi
	leal	(%rsi,%rax), %r9d
	addl	$1126891415, %r9d               # imm = 0x432AFF97
	addl	-84(%rsp), %ecx                 # 4-byte Folded Reload
	roll	$10, %r9d
	addl	%ebx, %r9d
	movl	%edx, %eax
	notl	%eax
	orl	%r9d, %eax
	xorl	%ebx, %eax
	addl	%eax, %ecx
	addl	$-1416354905, %ecx              # imm = 0xAB9423A7
	roll	$15, %ecx
	addl	-112(%rsp), %edx                # 4-byte Folded Reload
	addl	%r9d, %ecx
	movl	%ebx, %eax
	notl	%eax
	orl	%ecx, %eax
	xorl	%r9d, %eax
	addl	%edx, %eax
	addl	$-57434055, %eax                # imm = 0xFC93A039
	addl	%ebp, %ebx
	roll	$21, %eax
	addl	%ecx, %eax
	movl	%r9d, %edx
	notl	%edx
	orl	%eax, %edx
	xorl	%ecx, %edx
	leal	(%rdx,%rbx), %r8d
	addl	$1700485571, %r8d               # imm = 0x655B59C3
	addl	%r14d, %r9d
	roll	$6, %r8d
	addl	%eax, %r8d
	movl	%ecx, %edx
	notl	%edx
	orl	%r8d, %edx
	xorl	%eax, %edx
	addl	%edx, %r9d
	addl	$-1894986606, %r9d              # imm = 0x8F0CCC92
	addl	%r11d, %ecx
	roll	$10, %r9d
	addl	%r8d, %r9d
	movl	%eax, %edx
	notl	%edx
	orl	%r9d, %edx
	xorl	%r8d, %edx
	addl	%edx, %ecx
	addl	$-1051523, %ecx                 # imm = 0xFFEFF47D
	roll	$15, %ecx
	addl	-96(%rsp), %eax                 # 4-byte Folded Reload
	addl	%r9d, %ecx
	movl	%r8d, %edx
	notl	%edx
	orl	%ecx, %edx
	xorl	%r9d, %edx
	addl	%edx, %eax
	addl	$-2054922799, %eax              # imm = 0x85845DD1
	addl	-108(%rsp), %r8d                # 4-byte Folded Reload
	roll	$21, %eax
	addl	%ecx, %eax
	movl	%r9d, %edx
	notl	%edx
	orl	%eax, %edx
	xorl	%ecx, %edx
	addl	%edx, %r8d
	addl	$1873313359, %r8d               # imm = 0x6FA87E4F
	addl	%r12d, %r9d
	roll	$6, %r8d
	addl	%eax, %r8d
	movl	%ecx, %edx
	notl	%edx
	orl	%r8d, %edx
	xorl	%eax, %edx
	addl	%r9d, %edx
	addl	$-30611744, %edx                # imm = 0xFE2CE6E0
	roll	$10, %edx
	addl	%r8d, %edx
	addl	%r10d, %ecx
	movl	%eax, %esi
	notl	%esi
	orl	%edx, %esi
	xorl	%r8d, %esi
	addl	%esi, %ecx
	addl	$-1560198380, %ecx              # imm = 0xA3014314
	roll	$15, %ecx
	addl	%edx, %ecx
	addl	%r15d, %eax
	movl	%r8d, %esi
	notl	%esi
	orl	%ecx, %esi
	xorl	%edx, %esi
	addl	%esi, %eax
	addl	$1309151649, %eax               # imm = 0x4E0811A1
	roll	$21, %eax
	addl	%ecx, %eax
	addl	-104(%rsp), %r8d                # 4-byte Folded Reload
	movl	%edx, %esi
	notl	%esi
	orl	%eax, %esi
	xorl	%ecx, %esi
	addl	%r8d, %esi
	addl	$-145523070, %esi               # imm = 0xF7537E82
	roll	$6, %esi
	addl	%eax, %esi
	addl	-100(%rsp), %edx                # 4-byte Folded Reload
	movl	%ecx, %edi
	notl	%edi
	orl	%esi, %edi
	xorl	%eax, %edi
	addl	%edi, %edx
	addl	$-1120210379, %edx              # imm = 0xBD3AF235
	roll	$10, %edx
	addl	%esi, %edx
	addl	%r13d, %ecx
	movl	%eax, %edi
	notl	%edi
	orl	%edx, %edi
	xorl	%esi, %edi
	addl	%edi, %ecx
	addl	$718787259, %ecx                # imm = 0x2AD7D2BB
	roll	$15, %ecx
	addl	%edx, %ecx
	addl	-116(%rsp), %eax                # 4-byte Folded Reload
	movl	%esi, %edi
	notl	%edi
	orl	%ecx, %edi
	xorl	%edx, %edi
	addl	%edi, %eax
	addl	$-343485551, %eax               # imm = 0xEB86D391
	addl	-8(%rsp), %esi                  # 4-byte Folded Reload
	roll	$21, %eax
	movq	-32(%rsp), %rdi                 # 8-byte Reload
	movl	%esi, (%rdi)
	movq	-40(%rsp), %rsi                 # 8-byte Reload
	addl	%ecx, %esi
	addl	%eax, %esi
	movl	%esi, 4(%rdi)
	addl	-24(%rsp), %ecx                 # 4-byte Folded Reload
	movl	%ecx, 8(%rdi)
	addl	-16(%rsp), %edx                 # 4-byte Folded Reload
	movl	%edx, 12(%rdi)
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%r12
	.cfi_def_cfa_offset 40
	popq	%r13
	.cfi_def_cfa_offset 32
	popq	%r14
	.cfi_def_cfa_offset 24
	popq	%r15
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end2:
	.size	_ZL9TransformPjS_, .Lfunc_end2-_ZL9TransformPjS_
	.cfi_endproc
                                        # -- End function
	.globl	_Z8MD5FinalP7MD5_CTX            # -- Begin function _Z8MD5FinalP7MD5_CTX
	.type	_Z8MD5FinalP7MD5_CTX,@function
_Z8MD5FinalP7MD5_CTX:                   # @_Z8MD5FinalP7MD5_CTX
	.cfi_startproc
# %bb.0:
	pushq	%rbx
	.cfi_def_cfa_offset 16
	subq	$64, %rsp
	.cfi_def_cfa_offset 80
	.cfi_offset %rbx, -16
	movq	%rdi, %rbx
	movl	(%rdi), %eax
	movl	%eax, 56(%rsp)
	movl	4(%rdi), %ecx
	movl	%ecx, 60(%rsp)
	shrl	$3, %eax
	andl	$63, %eax
	xorl	%edx, %edx
	cmpl	$56, %eax
	setae	%dl
	shll	$6, %edx
	orl	$56, %edx
	subl	%eax, %edx
	movl	$_ZL7PADDING, %esi
	callq	_Z9MD5UpdateP7MD5_CTXPhj
	xorl	%eax, %eax
.LBB3_1:                                # =>This Inner Loop Header: Depth=1
	movl	24(%rbx,%rax,4), %ecx
	movl	%ecx, (%rsp,%rax,4)
	incq	%rax
	cmpq	$14, %rax
	jne	.LBB3_1
# %bb.2:
	leaq	8(%rbx), %rdi
	movq	%rsp, %rsi
	callq	_ZL9TransformPjS_
	xorl	%eax, %eax
.LBB3_3:                                # =>This Inner Loop Header: Depth=1
	movl	8(%rbx,%rax,4), %ecx
	movl	%ecx, 88(%rbx,%rax,4)
	incq	%rax
	cmpq	$4, %rax
	jne	.LBB3_3
# %bb.4:
	addq	$64, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end3:
	.size	_Z8MD5FinalP7MD5_CTX, .Lfunc_end3-_Z8MD5FinalP7MD5_CTX
	.cfi_endproc
                                        # -- End function
	.type	_ZL7PADDING,@object             # @_ZL7PADDING
	.data
	.p2align	4, 0x0
_ZL7PADDING:
	.byte	128                             # 0x80
	.zero	63
	.size	_ZL7PADDING, 64

	.type	__hip_cuid_,@object             # @__hip_cuid_
	.bss
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               # 0x0
	.size	__hip_cuid_, 1

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym _ZL7PADDING
	.addrsig_sym __hip_cuid_

	.text
	.p2alignl 7, 3214868480
	.fill 96, 4, 3214868480
	.type	__hip_cuid_,@object             ; @__hip_cuid_
	.section	.bss,"aw",@nobits
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               ; 0x0
	.size	__hip_cuid_, 1

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym __hip_cuid_
	.amdgcn_target "amdgcn-amd-amdhsa--gfx1100"
	.amdgpu_metadata
---
amdhsa.kernels:  []
amdhsa.target:   amdgcn-amd-amdhsa--gfx1100
amdhsa.version:
  - 1
  - 2
...

	.end_amdgpu_metadata
