Bug 28146 - -O2 produces invalid code on s390-linux-gnu: gcc-4.1.2 20060608
Summary: -O2 produces invalid code on s390-linux-gnu: gcc-4.1.2 20060608
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 4.1.1
: P3 normal
Target Milestone: 4.2.0
Assignee: Not yet assigned to anyone
URL:
Keywords:
: 28789 (view as bug list)
Depends on:
Blocks:
 
Reported: 2006-06-23 18:43 UTC by jim
Modified: 2006-12-07 12:39 UTC (History)
4 users (show)

See Also:
Host: s390-ibm-linux-gnu
Target: s390-ibm-linux-gnu
Build: s390-ibm-linux-gnu
Known to work:
Known to fail:
Last reconfirmed:


Attachments
preprocessed input (11.93 KB, application/octet-stream)
2006-06-23 19:58 UTC, Jim Meyering
Details
Here's the output of running gcc -I.. -I. -g -O2 ~/j.c -v (806 bytes, text/plain)
2006-06-23 20:26 UTC, Jim Meyering
Details

Note You need to log in before you can comment on or make changes to this bug.
Description jim 2006-06-23 18:43:51 UTC

This started because coreutils' new sha2 programs failed their tests on s390.
======================
gcc -v output:

Using built-in specs.
Target: s390-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,java,fortran,objc,obj-c++,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.1-1.4.2.0/jre --enable-mpfr --enable-checking=release s390-linux-gnu
Thread model: posix
gcc version 4.1.2 20060608 (prerelease) (Debian 4.1.1-3)

======================

Environment:
System: Linux raptor 2.6.12-1-s390x #1 SMP Tue Sep 27 09:43:57 UTC 2005 s390x GNU/Linux
Architecture: s390x
host: s390-ibm-linux-gnu
build: s390-ibm-linux-gnu
target: s390-ibm-linux-gnu
configured with: ../src/configure -v --enable-languages=c,c++,java,fortran,objc,obj-c++,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.1-1.4.2.0/jre --enable-mpfr --enable-checking=release s390-linux-gnu

How-To-Repeat:

# Correct output when compiled with -O
$ gcc -I.. -I. -g -O ~/j.c && ./a.out
38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b

# Invalid output when compiled with -O2
$ gcc -I.. -I. -g -O2 ~/j.c && ./a.out
517189ab07d222a14e0dcfcf6208ebffac951f89e8cbb81636706f714aacb757a8c8fb9e4474ab7b2e809f7a82fe9130

Here's j.i:

typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
__extension__
typedef long long int int64_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
__extension__
typedef unsigned long long int uint64_t;
typedef signed char int_least8_t;
typedef short int int_least16_t;
typedef int int_least32_t;
__extension__
typedef long long int int_least64_t;
typedef unsigned char uint_least8_t;
typedef unsigned short int uint_least16_t;
typedef unsigned int uint_least32_t;
__extension__
typedef unsigned long long int uint_least64_t;
typedef signed char int_fast8_t;
typedef int int_fast16_t;
typedef int int_fast32_t;
__extension__
typedef long long int int_fast64_t;
typedef unsigned char uint_fast8_t;
typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t;
__extension__
typedef unsigned long long int uint_fast64_t;
typedef int intptr_t;
typedef unsigned int uintptr_t;
__extension__
typedef long long int intmax_t;
__extension__
typedef unsigned long long int uintmax_t;
typedef long unsigned int size_t;
extern void *memcpy (void *__restrict __dest,
       __const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memmove (void *__dest, __const void *__src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
        int __c, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern void *rawmemchr (__const void *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern void *memrchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
        size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcoll (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strxfrm (char *__restrict __dest,
         __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
typedef struct __locale_struct
{
  struct locale_data *__locales[13];
  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;
  const char *__names[13];
} *__locale_t;
extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
    __locale_t __l) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));
extern char *strdup (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
extern char *strndup (__const char *__string, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
extern char *strchr (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strrchr (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strchrnul (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern size_t strcspn (__const char *__s, __const char *__reject)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strspn (__const char *__s, __const char *__accept)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strpbrk (__const char *__s, __const char *__accept)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strstr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern char *__strtok_r (char *__restrict __s,
    __const char *__restrict __delim,
    char **__restrict __save_ptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
         char **__restrict __save_ptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
extern char *strcasestr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memmem (__const void *__haystack, size_t __haystacklen,
       __const void *__needle, size_t __needlelen)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
extern void *__mempcpy (void *__restrict __dest,
   __const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *mempcpy (void *__restrict __dest,
        __const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strlen (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern size_t strnlen (__const char *__string, size_t __maxlen)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strerror (int __errnum) __attribute__ ((__nothrow__));
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void bcopy (__const void *__src, void *__dest, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *index (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *rindex (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
extern int ffsl (long int __l) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
__extension__ extern int ffsll (long long int __ll)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__));
extern int rpl_strcasecmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcasecmp_l (__const char *__s1, __const char *__s2,
    __locale_t __loc)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
extern int strncasecmp_l (__const char *__s1, __const char *__s2,
     size_t __n, __locale_t __loc)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
extern char *strsep (char **__restrict __stringp,
       __const char *__restrict __delim)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strverscmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strsignal (int __sig) __attribute__ ((__nothrow__));
extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *__stpncpy (char *__restrict __dest,
   __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strfry (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void *memfrob (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern char *basename (__const char *__filename) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;
__extension__ typedef long long int __quad_t;
__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef __u_quad_t __dev_t;
__extension__ typedef unsigned int __uid_t;
__extension__ typedef unsigned int __gid_t;
__extension__ typedef unsigned long int __ino_t;
__extension__ typedef __u_quad_t __ino64_t;
__extension__ typedef unsigned int __mode_t;
__extension__ typedef unsigned int __nlink_t;
__extension__ typedef long int __off_t;
__extension__ typedef __quad_t __off64_t;
__extension__ typedef int __pid_t;
__extension__ typedef struct { int __val[2]; } __fsid_t;
__extension__ typedef long int __clock_t;
__extension__ typedef unsigned long int __rlim_t;
__extension__ typedef __u_quad_t __rlim64_t;
__extension__ typedef unsigned int __id_t;
__extension__ typedef long int __time_t;
__extension__ typedef unsigned int __useconds_t;
__extension__ typedef long int __suseconds_t;
__extension__ typedef int __daddr_t;
__extension__ typedef long int __swblk_t;
__extension__ typedef int __key_t;
__extension__ typedef int __clockid_t;
__extension__ typedef int __timer_t;
__extension__ typedef long int __blksize_t;
__extension__ typedef long int __blkcnt_t;
__extension__ typedef __quad_t __blkcnt64_t;
__extension__ typedef unsigned long int __fsblkcnt_t;
__extension__ typedef __u_quad_t __fsblkcnt64_t;
__extension__ typedef unsigned long int __fsfilcnt_t;
__extension__ typedef __u_quad_t __fsfilcnt64_t;
__extension__ typedef long int __ssize_t;
typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;
__extension__ typedef int __intptr_t;
__extension__ typedef unsigned int __socklen_t;
extern void *__rawmemchr (const void *__s, int __c);
extern __inline size_t __strcspn_c1 (__const char *__s, int __reject);
extern __inline size_t
__strcspn_c1 (__const char *__s, int __reject)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject)
    ++__result;
  return __result;
}
extern __inline size_t __strcspn_c2 (__const char *__s, int __reject1,
         int __reject2);
extern __inline size_t
__strcspn_c2 (__const char *__s, int __reject1, int __reject2)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
  && __s[__result] != __reject2)
    ++__result;
  return __result;
}
extern __inline size_t __strcspn_c3 (__const char *__s, int __reject1,
         int __reject2, int __reject3);
extern __inline size_t
__strcspn_c3 (__const char *__s, int __reject1, int __reject2,
       int __reject3)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
  && __s[__result] != __reject2 && __s[__result] != __reject3)
    ++__result;
  return __result;
}
extern __inline size_t __strspn_c1 (__const char *__s, int __accept);
extern __inline size_t
__strspn_c1 (__const char *__s, int __accept)
{
  register size_t __result = 0;
  while (__s[__result] == __accept)
    ++__result;
  return __result;
}
extern __inline size_t __strspn_c2 (__const char *__s, int __accept1,
        int __accept2);
extern __inline size_t
__strspn_c2 (__const char *__s, int __accept1, int __accept2)
{
  register size_t __result = 0;
  while (__s[__result] == __accept1 || __s[__result] == __accept2)
    ++__result;
  return __result;
}
extern __inline size_t __strspn_c3 (__const char *__s, int __accept1,
        int __accept2, int __accept3);
extern __inline size_t
__strspn_c3 (__const char *__s, int __accept1, int __accept2, int __accept3)
{
  register size_t __result = 0;
  while (__s[__result] == __accept1 || __s[__result] == __accept2
  || __s[__result] == __accept3)
    ++__result;
  return __result;
}
extern __inline char *__strpbrk_c2 (__const char *__s, int __accept1,
         int __accept2);
extern __inline char *
__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
{
  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}
extern __inline char *__strpbrk_c3 (__const char *__s, int __accept1,
         int __accept2, int __accept3);
extern __inline char *
__strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
       int __accept3)
{
  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
  && *__s != __accept3)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}
extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
extern __inline char *
__strtok_r_1c (char *__s, char __sep, char **__nextp)
{
  char *__result;
  if (__s == ((void *)0))
    __s = *__nextp;
  while (*__s == __sep)
    ++__s;
  __result = ((void *)0);
  if (*__s != '\0')
    {
      __result = __s++;
      while (*__s != '\0')
 if (*__s++ == __sep)
   {
     __s[-1] = '\0';
     break;
   }
      *__nextp = __s;
    }
  return __result;
}
extern char *__strsep_g (char **__stringp, __const char *__delim);
extern __inline char *__strsep_1c (char **__s, char __reject);
extern __inline char *
__strsep_1c (char **__s, char __reject)
{
  register char *__retval = *__s;
  if (__retval != ((void *)0) && (*__s = (__extension__ (__builtin_constant_p (__reject) && !__builtin_constant_p (__retval) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : __builtin_strchr (__retval, __reject)))) != ((void *)0))
    *(*__s)++ = '\0';
  return __retval;
}
extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
extern __inline char *
__strsep_2c (char **__s, char __reject1, char __reject2)
{
  register char *__retval = *__s;
  if (__retval != ((void *)0))
    {
      register char *__cp = __retval;
      while (1)
 {
   if (*__cp == '\0')
     {
       __cp = ((void *)0);
   break;
     }
   if (*__cp == __reject1 || *__cp == __reject2)
     {
       *__cp++ = '\0';
       break;
     }
   ++__cp;
 }
      *__s = __cp;
    }
  return __retval;
}
extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
       char __reject3);
extern __inline char *
__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
{
  register char *__retval = *__s;
  if (__retval != ((void *)0))
    {
      register char *__cp = __retval;
      while (1)
 {
   if (*__cp == '\0')
     {
       __cp = ((void *)0);
   break;
     }
   if (*__cp == __reject1 || *__cp == __reject2 || *__cp == __reject3)
     {
       *__cp++ = '\0';
       break;
     }
   ++__cp;
 }
      *__s = __cp;
    }
  return __retval;
}
extern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
extern char *__strdup (__const char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
extern char *__strndup (__const char *__string, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
typedef struct _IO_FILE FILE;
typedef struct _IO_FILE __FILE;
typedef int wchar_t;
typedef unsigned int wint_t;
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,
  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,
  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};
enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};
struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;
typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
       __const unsigned char **, __const unsigned char *,
       unsigned char **, size_t *, int, int);
typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);
typedef int (*__gconv_trans_fct) (struct __gconv_step *,
      struct __gconv_step_data *, void *,
      __const unsigned char *,
      __const unsigned char **,
      __const unsigned char *, unsigned char **,
      size_t *);
typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
       __const unsigned char *,
       unsigned char *, unsigned char *);
typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
     size_t *);
typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);
struct __gconv_trans_data
{
  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};
struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;
  int __counter;
  char *__from_name;
  char *__to_name;
  __gconv_fct __fct;
  __gconv_btowc_fct __btowc_fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;
  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;
  int __stateful;
  void *__data;
};
struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;
  int __flags;
  int __invocation_counter;
  int __internal_use;
  __mbstate_t *__statep;
  __mbstate_t __state;
  struct __gconv_trans_data *__trans;
};
typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
typedef __builtin_va_list __gnuc_va_list;
struct _IO_jump_t; struct _IO_FILE;
typedef void _IO_lock_t;
struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;
  int _pos;
};
enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
struct _IO_FILE {
  int _flags;
  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;
  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;
  struct _IO_marker *_markers;
  struct _IO_FILE *_chain;
  int _fileno;
  int _flags2;
  __off_t _old_offset;
  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];
  _IO_lock_t *_lock;
  __off64_t _offset;
  void *__pad1;
  void *__pad2;
  int _mode;
  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];
};
typedef struct _IO_FILE _IO_FILE;
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
     size_t __n);
typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
typedef int __io_close_fn (void *__cookie);
typedef __io_read_fn cookie_read_function_t;
typedef __io_write_fn cookie_write_function_t;
typedef __io_seek_fn cookie_seek_function_t;
typedef __io_close_fn cookie_close_function_t;
typedef struct
{
  __io_read_fn *read;
  __io_write_fn *write;
  __io_seek_fn *seek;
  __io_close_fn *close;
} _IO_cookie_io_functions_t;
typedef _IO_cookie_io_functions_t cookie_io_functions_t;
struct _IO_cookie_file;
extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
        void *__cookie, _IO_cookie_io_functions_t __fns);
extern int __underflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern int __uflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern int __overflow (_IO_FILE *, int) __attribute__ ((__nothrow__));
extern wint_t __wunderflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern wint_t __wuflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern wint_t __woverflow (_IO_FILE *, wint_t) __attribute__ ((__nothrow__));
extern int _IO_getc (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_putc (int __c, _IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_peekc_locked (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
   __gnuc_va_list, int *__restrict) __attribute__ ((__nothrow__));
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
    __gnuc_va_list) __attribute__ ((__nothrow__));
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) __attribute__ ((__nothrow__));
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) __attribute__ ((__nothrow__));
extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) __attribute__ ((__nothrow__));
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) __attribute__ ((__nothrow__));
extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));
typedef __gnuc_va_list va_list;
typedef _G_fpos64_t fpos_t;
typedef _G_fpos64_t fpos64_t;
extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;
extern int remove (__const char *__filename) __attribute__ ((__nothrow__));
extern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));
extern FILE *tmpfile (void) __asm__ ("" "tmpfile64");
extern FILE *tmpfile64 (void);
extern char *tmpnam (char *__s) __attribute__ ((__nothrow__));
extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__));
extern char *tempnam (__const char *__dir, __const char *__pfx)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
extern int fclose (FILE *__stream);
extern int fflush (FILE *__stream);
extern int fflush_unlocked (FILE *__stream);
extern int fcloseall (void);
extern FILE *fopen (__const char *__restrict __filename, __const char *__restrict __modes) __asm__ ("" "fopen64");
extern FILE *freopen (__const char *__restrict __filename, __const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64");
extern FILE *fopen64 (__const char *__restrict __filename,
        __const char *__restrict __modes);
extern FILE *freopen64 (__const char *__restrict __filename,
   __const char *__restrict __modes,
   FILE *__restrict __stream);
extern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__));
extern FILE *fopencookie (void *__restrict __magic_cookie,
     __const char *__restrict __modes,
     _IO_cookie_io_functions_t __io_funcs) __attribute__ ((__nothrow__));
extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) __attribute__ ((__nothrow__));
extern FILE *open_memstream (char **__restrict __bufloc,
        size_t *__restrict __sizeloc) __attribute__ ((__nothrow__));
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));
extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) __attribute__ ((__nothrow__));
extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) __attribute__ ((__nothrow__));
extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));
extern int fprintf (FILE *__restrict __stream,
      __const char *__restrict __format, ...);
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
      __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg);
extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg) __attribute__ ((__nothrow__));
extern int snprintf (char *__restrict __s, size_t __maxlen,
       __const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
        __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));
extern int __asprintf (char **__restrict __ptr,
         __const char *__restrict __fmt, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
extern int asprintf (char **__restrict __ptr,
       __const char *__restrict __fmt, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
extern int vdprintf (int __fd, __const char *__restrict __fmt,
       __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));
extern int fscanf (FILE *__restrict __stream,
     __const char *__restrict __format, ...);
extern int scanf (__const char *__restrict __format, ...);
extern int sscanf (__const char *__restrict __s,
     __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0)));
extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0)));
extern int vsscanf (__const char *__restrict __s,
      __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);
extern int getchar (void);
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
extern int fgetc_unlocked (FILE *__stream);
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);
extern int putchar (int __c);
extern int fputc_unlocked (int __c, FILE *__stream);
extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);
extern int getw (FILE *__stream);
extern int putw (int __w, FILE *__stream);
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream);
extern char *gets (char *__s);
extern char *fgets_unlocked (char *__restrict __s, int __n,
        FILE *__restrict __stream);
extern __ssize_t __getdelim (char **__restrict __lineptr,
          size_t *__restrict __n, int __delimiter,
          FILE *__restrict __stream);
extern __ssize_t getdelim (char **__restrict __lineptr,
        size_t *__restrict __n, int __delimiter,
        FILE *__restrict __stream);
extern __ssize_t getline (char **__restrict __lineptr,
       size_t *__restrict __n,
       FILE *__restrict __stream);
extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
extern int puts (__const char *__s);
extern int ungetc (int __c, FILE *__stream);
extern size_t fread (void *__restrict __ptr, size_t __size,
       size_t __n, FILE *__restrict __stream);
extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s);
extern int fputs_unlocked (__const char *__restrict __s,
      FILE *__restrict __stream);
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream);
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream);
extern int fseek (FILE *__stream, long int __off, int __whence);
extern long int ftell (FILE *__stream);
extern void rewind (FILE *__stream);
extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64");
extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64");
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64");
extern int fsetpos (FILE *__stream, __const fpos_t *__pos) __asm__ ("" "fsetpos64");
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
extern __off64_t ftello64 (FILE *__stream);
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));
extern int feof (FILE *__stream) __attribute__ ((__nothrow__));
extern int ferror (FILE *__stream) __attribute__ ((__nothrow__));
extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern void perror (__const char *__s);
extern int sys_nerr;
extern __const char *__const sys_errlist[];
extern int _sys_nerr;
extern __const char *__const _sys_errlist[];
extern int fileno (FILE *__stream) __attribute__ ((__nothrow__));
extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern FILE *popen (__const char *__command, __const char *__modes);
extern int pclose (FILE *__stream);
extern char *ctermid (char *__s) __attribute__ ((__nothrow__));
extern char *cuserid (char *__s);
struct obstack;
extern int obstack_printf (struct obstack *__restrict __obstack,
      __const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
extern int obstack_vprintf (struct obstack *__restrict __obstack,
       __const char *__restrict __format,
       __gnuc_va_list __args)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));
extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));
extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__));
extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}
extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}
extern __inline int
getc_unlocked (FILE *__fp)
{
  return (__builtin_expect ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end, 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}
extern __inline int
getchar_unlocked (void)
{
  return (__builtin_expect ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end, 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}
extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}
extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect ((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end, 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}
extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect ((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end, 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}
extern __inline int
putchar_unlocked (int __c)
{
  return (__builtin_expect ((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end, 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}
extern __inline __ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
{
  return __getdelim (__lineptr, __n, '\n', __stream);
}
extern __inline int
__attribute__ ((__nothrow__)) feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}
extern __inline int
__attribute__ ((__nothrow__)) ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
struct sha512_ctx
{
  uint64_t state[8];
  uint64_t total[2];
  uint64_t buflen;
  uint64_t buffer[32];
};
extern void sha512_init_ctx (struct sha512_ctx *ctx);
extern void sha384_init_ctx (struct sha512_ctx *ctx);
extern void sha512_process_block (const void *buffer, size_t len,
      struct sha512_ctx *ctx);
extern void sha512_process_bytes (const void *buffer, size_t len,
      struct sha512_ctx *ctx);
extern void *sha512_finish_ctx (struct sha512_ctx *ctx, void *resbuf);
extern void *sha384_finish_ctx (struct sha512_ctx *ctx, void *resbuf);
extern void *sha512_read_ctx (const struct sha512_ctx *ctx, void *resbuf);
extern void *sha384_read_ctx (const struct sha512_ctx *ctx, void *resbuf);
extern int sha512_stream (FILE *stream, void *resblock);
extern int sha384_stream (FILE *stream, void *resblock);
extern void *sha512_buffer (const char *buffer, size_t len, void *resblock);
extern void *sha384_buffer (const char *buffer, size_t len, void *resblock);
typedef int ptrdiff_t;
static const unsigned char fillbuf[128] = { 0x80, 0 };
void
sha512_init_ctx (struct sha512_ctx *ctx)
{
  ctx->state[0] = 0x6a09e667f3bcc908ULL;
  ctx->state[1] = 0xbb67ae8584caa73bULL;
  ctx->state[2] = 0x3c6ef372fe94f82bULL;
  ctx->state[3] = 0xa54ff53a5f1d36f1ULL;
  ctx->state[4] = 0x510e527fade682d1ULL;
  ctx->state[5] = 0x9b05688c2b3e6c1fULL;
  ctx->state[6] = 0x1f83d9abfb41bd6bULL;
  ctx->state[7] = 0x5be0cd19137e2179ULL;
  ctx->total[0] = ctx->total[1] = 0;
  ctx->buflen = 0;
}
void
sha384_init_ctx (struct sha512_ctx *ctx)
{
  ctx->state[0] = 0xcbbb9d5dc1059ed8ULL;
  ctx->state[1] = 0x629a292a367cd507ULL;
  ctx->state[2] = 0x9159015a3070dd17ULL;
  ctx->state[3] = 0x152fecd8f70e5939ULL;
  ctx->state[4] = 0x67332667ffc00b31ULL;
  ctx->state[5] = 0x8eb44a8768581511ULL;
  ctx->state[6] = 0xdb0c2e0d64f98fa7ULL;
  ctx->state[7] = 0x47b5481dbefa4fa4ULL;
  ctx->total[0] = ctx->total[1] = 0;
  ctx->buflen = 0;
}
void *
sha512_read_ctx (const struct sha512_ctx *ctx, void *resbuf)
{
  int i;
  for (i = 0; i < 8; i++)
    ((uint64_t *) resbuf)[i] = (ctx->state[i]);
  return resbuf;
}
void *
sha384_read_ctx (const struct sha512_ctx *ctx, void *resbuf)
{
  int i;
  for (i = 0; i < 6; i++)
    ((uint64_t *) resbuf)[i] = (ctx->state[i]);
  return resbuf;
}
static void
sha512_conclude_ctx (struct sha512_ctx *ctx)
{
  uint64_t bytes = ctx->buflen;
  size_t size = (bytes < 112) ? 128 / 8 : 128 * 2 / 8;
  ctx->total[0] += bytes;
  if (ctx->total[0] < bytes)
    ++ctx->total[1];
  ctx->buffer[size - 2] = ((ctx->total[1] << 3) | (ctx->total[0] >> 61));
  ctx->buffer[size - 1] = (ctx->total[0] << 3);
  memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 8 - bytes);
  sha512_process_block (ctx->buffer, size * 8, ctx);
}
void *
sha512_finish_ctx (struct sha512_ctx *ctx, void *resbuf)
{
  sha512_conclude_ctx (ctx);
  return sha512_read_ctx (ctx, resbuf);
}
void *
sha384_finish_ctx (struct sha512_ctx *ctx, void *resbuf)
{
  sha512_conclude_ctx (ctx);
  return sha384_read_ctx (ctx, resbuf);
}
int
sha512_stream (FILE *stream, void *resblock)
{
  struct sha512_ctx ctx;
  char buffer[4096 + 72];
  size_t sum;
  sha512_init_ctx (&ctx);
  while (1)
    {
      size_t n;
      sum = 0;
      while (1)
 {
   n = (__extension__ ((__builtin_constant_p (1) && __builtin_constant_p (4096 - sum) && (size_t) (1) * (size_t) (4096 - sum) <= 8 && (size_t) (1) != 0) ? ({ char *__ptr = (char *) (buffer + sum); FILE *__stream = (stream); size_t __cnt; for (__cnt = (size_t) (1) * (size_t) (4096 - sum); __cnt > 0; --__cnt) { int __c = (__builtin_expect ((__stream)->_IO_read_ptr >= (__stream)->_IO_read_end, 0) ? __uflow (__stream) : *(unsigned char *) (__stream)->_IO_read_ptr++); if (__c == (-1)) break; *__ptr++ = __c; } ((size_t) (1) * (size_t) (4096 - sum) - __cnt) / (size_t) (1); }) : (((__builtin_constant_p (1) && (size_t) (1) == 0) || (__builtin_constant_p (4096 - sum) && (size_t) (4096 - sum) == 0)) ? ((void) (buffer + sum), (void) (stream), (void) (1), (void) (4096 - sum), (size_t) 0) : fread_unlocked (buffer + sum, 1, 4096 - sum, stream))));
   sum += n;
   if (sum == 4096)
     break;
   if (n == 0)
     {
       if (ferror_unlocked (stream))
  return 1;
       goto process_partial_block;
     }
   if (feof_unlocked (stream))
     goto process_partial_block;
 }
      sha512_process_block (buffer, 4096, &ctx);
    }
 process_partial_block:;
  if (sum > 0)
    sha512_process_bytes (buffer, sum, &ctx);
  sha512_finish_ctx (&ctx, resblock);
  return 0;
}
int
sha384_stream (FILE *stream, void *resblock)
{
  struct sha512_ctx ctx;
  char buffer[4096 + 72];
  size_t sum;
  sha384_init_ctx (&ctx);
  while (1)
    {
      size_t n;
      sum = 0;
      while (1)
 {
   n = (__extension__ ((__builtin_constant_p (1) && __builtin_constant_p (4096 - sum) && (size_t) (1) * (size_t) (4096 - sum) <= 8 && (size_t) (1) != 0) ? ({ char *__ptr = (char *) (buffer + sum); FILE *__stream = (stream); size_t __cnt; for (__cnt = (size_t) (1) * (size_t) (4096 - sum); __cnt > 0; --__cnt) { int __c = (__builtin_expect ((__stream)->_IO_read_ptr >= (__stream)->_IO_read_end, 0) ? __uflow (__stream) : *(unsigned char *) (__stream)->_IO_read_ptr++); if (__c == (-1)) break; *__ptr++ = __c; } ((size_t) (1) * (size_t) (4096 - sum) - __cnt) / (size_t) (1); }) : (((__builtin_constant_p (1) && (size_t) (1) == 0) || (__builtin_constant_p (4096 - sum) && (size_t) (4096 - sum) == 0)) ? ((void) (buffer + sum), (void) (stream), (void) (1), (void) (4096 - sum), (size_t) 0) : fread_unlocked (buffer + sum, 1, 4096 - sum, stream))));
   sum += n;
   if (sum == 4096)
     break;
   if (n == 0)
     {
       if (ferror_unlocked (stream))
  return 1;
       goto process_partial_block;
     }
   if (feof_unlocked (stream))
     goto process_partial_block;
 }
      sha512_process_block (buffer, 4096, &ctx);
    }
 process_partial_block:;
  if (sum > 0)
    sha512_process_bytes (buffer, sum, &ctx);
  sha384_finish_ctx (&ctx, resblock);
  return 0;
}
void *
sha512_buffer (const char *buffer, size_t len, void *resblock)
{
  struct sha512_ctx ctx;
  sha512_init_ctx (&ctx);
  sha512_process_bytes (buffer, len, &ctx);
  return sha512_finish_ctx (&ctx, resblock);
}
void *
sha384_buffer (const char *buffer, size_t len, void *resblock)
{
  struct sha512_ctx ctx;
  sha384_init_ctx (&ctx);
  sha512_process_bytes (buffer, len, &ctx);
  return sha384_finish_ctx (&ctx, resblock);
}
void
sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx)
{
  if (ctx->buflen != 0)
    {
      size_t left_over = ctx->buflen;
      size_t add = 256 - left_over > len ? len : 256 - left_over;
      memcpy (&((char *) ctx->buffer)[left_over], buffer, add);
      ctx->buflen += add;
      if (ctx->buflen > 128)
 {
   sha512_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
   ctx->buflen &= 127;
   memcpy (ctx->buffer,
    &((char *) ctx->buffer)[(left_over + add) & ~127],
    ctx->buflen);
 }
      buffer = (const char *) buffer + add;
      len -= add;
    }
  if (len >= 128)
    {
 {
   sha512_process_block (buffer, len & ~127, ctx);
   buffer = (const char *) buffer + (len & ~127);
   len &= 127;
 }
    }
  if (len > 0)
    {
      size_t left_over = ctx->buflen;
      memcpy (&((char *) ctx->buffer)[left_over], buffer, len);
      left_over += len;
      if (left_over >= 128)
 {
   sha512_process_block (ctx->buffer, 128, ctx);
   left_over -= 128;
   memcpy (ctx->buffer, &ctx->buffer[16], left_over);
 }
      ctx->buflen = left_over;
    }
}
static const uint64_t sha512_round_constants[80] = {
 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL,
};
void
sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx)
{
  const uint64_t *words = buffer;
  size_t nwords = len / sizeof (uint64_t);
  const uint64_t *endp = words + nwords;
  uint64_t x[16];
  uint64_t a = ctx->state[0];
  uint64_t b = ctx->state[1];
  uint64_t c = ctx->state[2];
  uint64_t d = ctx->state[3];
  uint64_t e = ctx->state[4];
  uint64_t f = ctx->state[5];
  uint64_t g = ctx->state[6];
  uint64_t h = ctx->state[7];
  ctx->total[0] += len;
  if (ctx->total[0] < len)
    ++ctx->total[1];
  while (words < endp)
    {
      uint64_t tm;
      uint64_t t0, t1;
      int t;
      for (t = 0; t < 16; t++)
 {
   x[t] = (*words);
   words++;
 }
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[0] + x[ 0]; d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[1] + x[ 1]; c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[2] + x[ 2]; b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[3] + x[ 3]; a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[4] + x[ 4]; h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[5] + x[ 5]; g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[6] + x[ 6]; f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[7] + x[ 7]; e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[8] + x[ 8]; d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[9] + x[ 9]; c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[10] + x[10]; b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[11] + x[11]; a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[12] + x[12]; h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[13] + x[13]; g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[14] + x[14]; f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[15] + x[15]; e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[16] + ( tm = (( ((x[(16 -2)&0x0f]) << (45)) | ((x[(16 -2)&0x0f]) >> (64-(45))) )^( ((x[(16 -2)&0x0f]) << (3)) | ((x[(16 -2)&0x0f]) >> (64-(3))) )^(x[(16 -2)&0x0f]>>6)) + x[(16 -7)&0x0f] + (( ((x[(16 -15)&0x0f]) << (63)) | ((x[(16 -15)&0x0f]) >> (64-(63))) )^( ((x[(16 -15)&0x0f]) << (56)) | ((x[(16 -15)&0x0f]) >> (64-(56))) )^(x[(16 -15)&0x0f]>>7)) + x[16&0x0f] , x[16&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[17] + ( tm = (( ((x[(17 -2)&0x0f]) << (45)) | ((x[(17 -2)&0x0f]) >> (64-(45))) )^( ((x[(17 -2)&0x0f]) << (3)) | ((x[(17 -2)&0x0f]) >> (64-(3))) )^(x[(17 -2)&0x0f]>>6)) + x[(17 -7)&0x0f] + (( ((x[(17 -15)&0x0f]) << (63)) | ((x[(17 -15)&0x0f]) >> (64-(63))) )^( ((x[(17 -15)&0x0f]) << (56)) | ((x[(17 -15)&0x0f]) >> (64-(56))) )^(x[(17 -15)&0x0f]>>7)) + x[17&0x0f] , x[17&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[18] + ( tm = (( ((x[(18 -2)&0x0f]) << (45)) | ((x[(18 -2)&0x0f]) >> (64-(45))) )^( ((x[(18 -2)&0x0f]) << (3)) | ((x[(18 -2)&0x0f]) >> (64-(3))) )^(x[(18 -2)&0x0f]>>6)) + x[(18 -7)&0x0f] + (( ((x[(18 -15)&0x0f]) << (63)) | ((x[(18 -15)&0x0f]) >> (64-(63))) )^( ((x[(18 -15)&0x0f]) << (56)) | ((x[(18 -15)&0x0f]) >> (64-(56))) )^(x[(18 -15)&0x0f]>>7)) + x[18&0x0f] , x[18&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[19] + ( tm = (( ((x[(19 -2)&0x0f]) << (45)) | ((x[(19 -2)&0x0f]) >> (64-(45))) )^( ((x[(19 -2)&0x0f]) << (3)) | ((x[(19 -2)&0x0f]) >> (64-(3))) )^(x[(19 -2)&0x0f]>>6)) + x[(19 -7)&0x0f] + (( ((x[(19 -15)&0x0f]) << (63)) | ((x[(19 -15)&0x0f]) >> (64-(63))) )^( ((x[(19 -15)&0x0f]) << (56)) | ((x[(19 -15)&0x0f]) >> (64-(56))) )^(x[(19 -15)&0x0f]>>7)) + x[19&0x0f] , x[19&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[20] + ( tm = (( ((x[(20 -2)&0x0f]) << (45)) | ((x[(20 -2)&0x0f]) >> (64-(45))) )^( ((x[(20 -2)&0x0f]) << (3)) | ((x[(20 -2)&0x0f]) >> (64-(3))) )^(x[(20 -2)&0x0f]>>6)) + x[(20 -7)&0x0f] + (( ((x[(20 -15)&0x0f]) << (63)) | ((x[(20 -15)&0x0f]) >> (64-(63))) )^( ((x[(20 -15)&0x0f]) << (56)) | ((x[(20 -15)&0x0f]) >> (64-(56))) )^(x[(20 -15)&0x0f]>>7)) + x[20&0x0f] , x[20&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[21] + ( tm = (( ((x[(21 -2)&0x0f]) << (45)) | ((x[(21 -2)&0x0f]) >> (64-(45))) )^( ((x[(21 -2)&0x0f]) << (3)) | ((x[(21 -2)&0x0f]) >> (64-(3))) )^(x[(21 -2)&0x0f]>>6)) + x[(21 -7)&0x0f] + (( ((x[(21 -15)&0x0f]) << (63)) | ((x[(21 -15)&0x0f]) >> (64-(63))) )^( ((x[(21 -15)&0x0f]) << (56)) | ((x[(21 -15)&0x0f]) >> (64-(56))) )^(x[(21 -15)&0x0f]>>7)) + x[21&0x0f] , x[21&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[22] + ( tm = (( ((x[(22 -2)&0x0f]) << (45)) | ((x[(22 -2)&0x0f]) >> (64-(45))) )^( ((x[(22 -2)&0x0f]) << (3)) | ((x[(22 -2)&0x0f]) >> (64-(3))) )^(x[(22 -2)&0x0f]>>6)) + x[(22 -7)&0x0f] + (( ((x[(22 -15)&0x0f]) << (63)) | ((x[(22 -15)&0x0f]) >> (64-(63))) )^( ((x[(22 -15)&0x0f]) << (56)) | ((x[(22 -15)&0x0f]) >> (64-(56))) )^(x[(22 -15)&0x0f]>>7)) + x[22&0x0f] , x[22&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[23] + ( tm = (( ((x[(23 -2)&0x0f]) << (45)) | ((x[(23 -2)&0x0f]) >> (64-(45))) )^( ((x[(23 -2)&0x0f]) << (3)) | ((x[(23 -2)&0x0f]) >> (64-(3))) )^(x[(23 -2)&0x0f]>>6)) + x[(23 -7)&0x0f] + (( ((x[(23 -15)&0x0f]) << (63)) | ((x[(23 -15)&0x0f]) >> (64-(63))) )^( ((x[(23 -15)&0x0f]) << (56)) | ((x[(23 -15)&0x0f]) >> (64-(56))) )^(x[(23 -15)&0x0f]>>7)) + x[23&0x0f] , x[23&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[24] + ( tm = (( ((x[(24 -2)&0x0f]) << (45)) | ((x[(24 -2)&0x0f]) >> (64-(45))) )^( ((x[(24 -2)&0x0f]) << (3)) | ((x[(24 -2)&0x0f]) >> (64-(3))) )^(x[(24 -2)&0x0f]>>6)) + x[(24 -7)&0x0f] + (( ((x[(24 -15)&0x0f]) << (63)) | ((x[(24 -15)&0x0f]) >> (64-(63))) )^( ((x[(24 -15)&0x0f]) << (56)) | ((x[(24 -15)&0x0f]) >> (64-(56))) )^(x[(24 -15)&0x0f]>>7)) + x[24&0x0f] , x[24&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[25] + ( tm = (( ((x[(25 -2)&0x0f]) << (45)) | ((x[(25 -2)&0x0f]) >> (64-(45))) )^( ((x[(25 -2)&0x0f]) << (3)) | ((x[(25 -2)&0x0f]) >> (64-(3))) )^(x[(25 -2)&0x0f]>>6)) + x[(25 -7)&0x0f] + (( ((x[(25 -15)&0x0f]) << (63)) | ((x[(25 -15)&0x0f]) >> (64-(63))) )^( ((x[(25 -15)&0x0f]) << (56)) | ((x[(25 -15)&0x0f]) >> (64-(56))) )^(x[(25 -15)&0x0f]>>7)) + x[25&0x0f] , x[25&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[26] + ( tm = (( ((x[(26 -2)&0x0f]) << (45)) | ((x[(26 -2)&0x0f]) >> (64-(45))) )^( ((x[(26 -2)&0x0f]) << (3)) | ((x[(26 -2)&0x0f]) >> (64-(3))) )^(x[(26 -2)&0x0f]>>6)) + x[(26 -7)&0x0f] + (( ((x[(26 -15)&0x0f]) << (63)) | ((x[(26 -15)&0x0f]) >> (64-(63))) )^( ((x[(26 -15)&0x0f]) << (56)) | ((x[(26 -15)&0x0f]) >> (64-(56))) )^(x[(26 -15)&0x0f]>>7)) + x[26&0x0f] , x[26&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[27] + ( tm = (( ((x[(27 -2)&0x0f]) << (45)) | ((x[(27 -2)&0x0f]) >> (64-(45))) )^( ((x[(27 -2)&0x0f]) << (3)) | ((x[(27 -2)&0x0f]) >> (64-(3))) )^(x[(27 -2)&0x0f]>>6)) + x[(27 -7)&0x0f] + (( ((x[(27 -15)&0x0f]) << (63)) | ((x[(27 -15)&0x0f]) >> (64-(63))) )^( ((x[(27 -15)&0x0f]) << (56)) | ((x[(27 -15)&0x0f]) >> (64-(56))) )^(x[(27 -15)&0x0f]>>7)) + x[27&0x0f] , x[27&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[28] + ( tm = (( ((x[(28 -2)&0x0f]) << (45)) | ((x[(28 -2)&0x0f]) >> (64-(45))) )^( ((x[(28 -2)&0x0f]) << (3)) | ((x[(28 -2)&0x0f]) >> (64-(3))) )^(x[(28 -2)&0x0f]>>6)) + x[(28 -7)&0x0f] + (( ((x[(28 -15)&0x0f]) << (63)) | ((x[(28 -15)&0x0f]) >> (64-(63))) )^( ((x[(28 -15)&0x0f]) << (56)) | ((x[(28 -15)&0x0f]) >> (64-(56))) )^(x[(28 -15)&0x0f]>>7)) + x[28&0x0f] , x[28&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[29] + ( tm = (( ((x[(29 -2)&0x0f]) << (45)) | ((x[(29 -2)&0x0f]) >> (64-(45))) )^( ((x[(29 -2)&0x0f]) << (3)) | ((x[(29 -2)&0x0f]) >> (64-(3))) )^(x[(29 -2)&0x0f]>>6)) + x[(29 -7)&0x0f] + (( ((x[(29 -15)&0x0f]) << (63)) | ((x[(29 -15)&0x0f]) >> (64-(63))) )^( ((x[(29 -15)&0x0f]) << (56)) | ((x[(29 -15)&0x0f]) >> (64-(56))) )^(x[(29 -15)&0x0f]>>7)) + x[29&0x0f] , x[29&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[30] + ( tm = (( ((x[(30 -2)&0x0f]) << (45)) | ((x[(30 -2)&0x0f]) >> (64-(45))) )^( ((x[(30 -2)&0x0f]) << (3)) | ((x[(30 -2)&0x0f]) >> (64-(3))) )^(x[(30 -2)&0x0f]>>6)) + x[(30 -7)&0x0f] + (( ((x[(30 -15)&0x0f]) << (63)) | ((x[(30 -15)&0x0f]) >> (64-(63))) )^( ((x[(30 -15)&0x0f]) << (56)) | ((x[(30 -15)&0x0f]) >> (64-(56))) )^(x[(30 -15)&0x0f]>>7)) + x[30&0x0f] , x[30&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[31] + ( tm = (( ((x[(31 -2)&0x0f]) << (45)) | ((x[(31 -2)&0x0f]) >> (64-(45))) )^( ((x[(31 -2)&0x0f]) << (3)) | ((x[(31 -2)&0x0f]) >> (64-(3))) )^(x[(31 -2)&0x0f]>>6)) + x[(31 -7)&0x0f] + (( ((x[(31 -15)&0x0f]) << (63)) | ((x[(31 -15)&0x0f]) >> (64-(63))) )^( ((x[(31 -15)&0x0f]) << (56)) | ((x[(31 -15)&0x0f]) >> (64-(56))) )^(x[(31 -15)&0x0f]>>7)) + x[31&0x0f] , x[31&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[32] + ( tm = (( ((x[(32 -2)&0x0f]) << (45)) | ((x[(32 -2)&0x0f]) >> (64-(45))) )^( ((x[(32 -2)&0x0f]) << (3)) | ((x[(32 -2)&0x0f]) >> (64-(3))) )^(x[(32 -2)&0x0f]>>6)) + x[(32 -7)&0x0f] + (( ((x[(32 -15)&0x0f]) << (63)) | ((x[(32 -15)&0x0f]) >> (64-(63))) )^( ((x[(32 -15)&0x0f]) << (56)) | ((x[(32 -15)&0x0f]) >> (64-(56))) )^(x[(32 -15)&0x0f]>>7)) + x[32&0x0f] , x[32&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[33] + ( tm = (( ((x[(33 -2)&0x0f]) << (45)) | ((x[(33 -2)&0x0f]) >> (64-(45))) )^( ((x[(33 -2)&0x0f]) << (3)) | ((x[(33 -2)&0x0f]) >> (64-(3))) )^(x[(33 -2)&0x0f]>>6)) + x[(33 -7)&0x0f] + (( ((x[(33 -15)&0x0f]) << (63)) | ((x[(33 -15)&0x0f]) >> (64-(63))) )^( ((x[(33 -15)&0x0f]) << (56)) | ((x[(33 -15)&0x0f]) >> (64-(56))) )^(x[(33 -15)&0x0f]>>7)) + x[33&0x0f] , x[33&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[34] + ( tm = (( ((x[(34 -2)&0x0f]) << (45)) | ((x[(34 -2)&0x0f]) >> (64-(45))) )^( ((x[(34 -2)&0x0f]) << (3)) | ((x[(34 -2)&0x0f]) >> (64-(3))) )^(x[(34 -2)&0x0f]>>6)) + x[(34 -7)&0x0f] + (( ((x[(34 -15)&0x0f]) << (63)) | ((x[(34 -15)&0x0f]) >> (64-(63))) )^( ((x[(34 -15)&0x0f]) << (56)) | ((x[(34 -15)&0x0f]) >> (64-(56))) )^(x[(34 -15)&0x0f]>>7)) + x[34&0x0f] , x[34&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[35] + ( tm = (( ((x[(35 -2)&0x0f]) << (45)) | ((x[(35 -2)&0x0f]) >> (64-(45))) )^( ((x[(35 -2)&0x0f]) << (3)) | ((x[(35 -2)&0x0f]) >> (64-(3))) )^(x[(35 -2)&0x0f]>>6)) + x[(35 -7)&0x0f] + (( ((x[(35 -15)&0x0f]) << (63)) | ((x[(35 -15)&0x0f]) >> (64-(63))) )^( ((x[(35 -15)&0x0f]) << (56)) | ((x[(35 -15)&0x0f]) >> (64-(56))) )^(x[(35 -15)&0x0f]>>7)) + x[35&0x0f] , x[35&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[36] + ( tm = (( ((x[(36 -2)&0x0f]) << (45)) | ((x[(36 -2)&0x0f]) >> (64-(45))) )^( ((x[(36 -2)&0x0f]) << (3)) | ((x[(36 -2)&0x0f]) >> (64-(3))) )^(x[(36 -2)&0x0f]>>6)) + x[(36 -7)&0x0f] + (( ((x[(36 -15)&0x0f]) << (63)) | ((x[(36 -15)&0x0f]) >> (64-(63))) )^( ((x[(36 -15)&0x0f]) << (56)) | ((x[(36 -15)&0x0f]) >> (64-(56))) )^(x[(36 -15)&0x0f]>>7)) + x[36&0x0f] , x[36&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[37] + ( tm = (( ((x[(37 -2)&0x0f]) << (45)) | ((x[(37 -2)&0x0f]) >> (64-(45))) )^( ((x[(37 -2)&0x0f]) << (3)) | ((x[(37 -2)&0x0f]) >> (64-(3))) )^(x[(37 -2)&0x0f]>>6)) + x[(37 -7)&0x0f] + (( ((x[(37 -15)&0x0f]) << (63)) | ((x[(37 -15)&0x0f]) >> (64-(63))) )^( ((x[(37 -15)&0x0f]) << (56)) | ((x[(37 -15)&0x0f]) >> (64-(56))) )^(x[(37 -15)&0x0f]>>7)) + x[37&0x0f] , x[37&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[38] + ( tm = (( ((x[(38 -2)&0x0f]) << (45)) | ((x[(38 -2)&0x0f]) >> (64-(45))) )^( ((x[(38 -2)&0x0f]) << (3)) | ((x[(38 -2)&0x0f]) >> (64-(3))) )^(x[(38 -2)&0x0f]>>6)) + x[(38 -7)&0x0f] + (( ((x[(38 -15)&0x0f]) << (63)) | ((x[(38 -15)&0x0f]) >> (64-(63))) )^( ((x[(38 -15)&0x0f]) << (56)) | ((x[(38 -15)&0x0f]) >> (64-(56))) )^(x[(38 -15)&0x0f]>>7)) + x[38&0x0f] , x[38&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[39] + ( tm = (( ((x[(39 -2)&0x0f]) << (45)) | ((x[(39 -2)&0x0f]) >> (64-(45))) )^( ((x[(39 -2)&0x0f]) << (3)) | ((x[(39 -2)&0x0f]) >> (64-(3))) )^(x[(39 -2)&0x0f]>>6)) + x[(39 -7)&0x0f] + (( ((x[(39 -15)&0x0f]) << (63)) | ((x[(39 -15)&0x0f]) >> (64-(63))) )^( ((x[(39 -15)&0x0f]) << (56)) | ((x[(39 -15)&0x0f]) >> (64-(56))) )^(x[(39 -15)&0x0f]>>7)) + x[39&0x0f] , x[39&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[40] + ( tm = (( ((x[(40 -2)&0x0f]) << (45)) | ((x[(40 -2)&0x0f]) >> (64-(45))) )^( ((x[(40 -2)&0x0f]) << (3)) | ((x[(40 -2)&0x0f]) >> (64-(3))) )^(x[(40 -2)&0x0f]>>6)) + x[(40 -7)&0x0f] + (( ((x[(40 -15)&0x0f]) << (63)) | ((x[(40 -15)&0x0f]) >> (64-(63))) )^( ((x[(40 -15)&0x0f]) << (56)) | ((x[(40 -15)&0x0f]) >> (64-(56))) )^(x[(40 -15)&0x0f]>>7)) + x[40&0x0f] , x[40&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[41] + ( tm = (( ((x[(41 -2)&0x0f]) << (45)) | ((x[(41 -2)&0x0f]) >> (64-(45))) )^( ((x[(41 -2)&0x0f]) << (3)) | ((x[(41 -2)&0x0f]) >> (64-(3))) )^(x[(41 -2)&0x0f]>>6)) + x[(41 -7)&0x0f] + (( ((x[(41 -15)&0x0f]) << (63)) | ((x[(41 -15)&0x0f]) >> (64-(63))) )^( ((x[(41 -15)&0x0f]) << (56)) | ((x[(41 -15)&0x0f]) >> (64-(56))) )^(x[(41 -15)&0x0f]>>7)) + x[41&0x0f] , x[41&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[42] + ( tm = (( ((x[(42 -2)&0x0f]) << (45)) | ((x[(42 -2)&0x0f]) >> (64-(45))) )^( ((x[(42 -2)&0x0f]) << (3)) | ((x[(42 -2)&0x0f]) >> (64-(3))) )^(x[(42 -2)&0x0f]>>6)) + x[(42 -7)&0x0f] + (( ((x[(42 -15)&0x0f]) << (63)) | ((x[(42 -15)&0x0f]) >> (64-(63))) )^( ((x[(42 -15)&0x0f]) << (56)) | ((x[(42 -15)&0x0f]) >> (64-(56))) )^(x[(42 -15)&0x0f]>>7)) + x[42&0x0f] , x[42&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[43] + ( tm = (( ((x[(43 -2)&0x0f]) << (45)) | ((x[(43 -2)&0x0f]) >> (64-(45))) )^( ((x[(43 -2)&0x0f]) << (3)) | ((x[(43 -2)&0x0f]) >> (64-(3))) )^(x[(43 -2)&0x0f]>>6)) + x[(43 -7)&0x0f] + (( ((x[(43 -15)&0x0f]) << (63)) | ((x[(43 -15)&0x0f]) >> (64-(63))) )^( ((x[(43 -15)&0x0f]) << (56)) | ((x[(43 -15)&0x0f]) >> (64-(56))) )^(x[(43 -15)&0x0f]>>7)) + x[43&0x0f] , x[43&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[44] + ( tm = (( ((x[(44 -2)&0x0f]) << (45)) | ((x[(44 -2)&0x0f]) >> (64-(45))) )^( ((x[(44 -2)&0x0f]) << (3)) | ((x[(44 -2)&0x0f]) >> (64-(3))) )^(x[(44 -2)&0x0f]>>6)) + x[(44 -7)&0x0f] + (( ((x[(44 -15)&0x0f]) << (63)) | ((x[(44 -15)&0x0f]) >> (64-(63))) )^( ((x[(44 -15)&0x0f]) << (56)) | ((x[(44 -15)&0x0f]) >> (64-(56))) )^(x[(44 -15)&0x0f]>>7)) + x[44&0x0f] , x[44&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[45] + ( tm = (( ((x[(45 -2)&0x0f]) << (45)) | ((x[(45 -2)&0x0f]) >> (64-(45))) )^( ((x[(45 -2)&0x0f]) << (3)) | ((x[(45 -2)&0x0f]) >> (64-(3))) )^(x[(45 -2)&0x0f]>>6)) + x[(45 -7)&0x0f] + (( ((x[(45 -15)&0x0f]) << (63)) | ((x[(45 -15)&0x0f]) >> (64-(63))) )^( ((x[(45 -15)&0x0f]) << (56)) | ((x[(45 -15)&0x0f]) >> (64-(56))) )^(x[(45 -15)&0x0f]>>7)) + x[45&0x0f] , x[45&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[46] + ( tm = (( ((x[(46 -2)&0x0f]) << (45)) | ((x[(46 -2)&0x0f]) >> (64-(45))) )^( ((x[(46 -2)&0x0f]) << (3)) | ((x[(46 -2)&0x0f]) >> (64-(3))) )^(x[(46 -2)&0x0f]>>6)) + x[(46 -7)&0x0f] + (( ((x[(46 -15)&0x0f]) << (63)) | ((x[(46 -15)&0x0f]) >> (64-(63))) )^( ((x[(46 -15)&0x0f]) << (56)) | ((x[(46 -15)&0x0f]) >> (64-(56))) )^(x[(46 -15)&0x0f]>>7)) + x[46&0x0f] , x[46&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[47] + ( tm = (( ((x[(47 -2)&0x0f]) << (45)) | ((x[(47 -2)&0x0f]) >> (64-(45))) )^( ((x[(47 -2)&0x0f]) << (3)) | ((x[(47 -2)&0x0f]) >> (64-(3))) )^(x[(47 -2)&0x0f]>>6)) + x[(47 -7)&0x0f] + (( ((x[(47 -15)&0x0f]) << (63)) | ((x[(47 -15)&0x0f]) >> (64-(63))) )^( ((x[(47 -15)&0x0f]) << (56)) | ((x[(47 -15)&0x0f]) >> (64-(56))) )^(x[(47 -15)&0x0f]>>7)) + x[47&0x0f] , x[47&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[48] + ( tm = (( ((x[(48 -2)&0x0f]) << (45)) | ((x[(48 -2)&0x0f]) >> (64-(45))) )^( ((x[(48 -2)&0x0f]) << (3)) | ((x[(48 -2)&0x0f]) >> (64-(3))) )^(x[(48 -2)&0x0f]>>6)) + x[(48 -7)&0x0f] + (( ((x[(48 -15)&0x0f]) << (63)) | ((x[(48 -15)&0x0f]) >> (64-(63))) )^( ((x[(48 -15)&0x0f]) << (56)) | ((x[(48 -15)&0x0f]) >> (64-(56))) )^(x[(48 -15)&0x0f]>>7)) + x[48&0x0f] , x[48&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[49] + ( tm = (( ((x[(49 -2)&0x0f]) << (45)) | ((x[(49 -2)&0x0f]) >> (64-(45))) )^( ((x[(49 -2)&0x0f]) << (3)) | ((x[(49 -2)&0x0f]) >> (64-(3))) )^(x[(49 -2)&0x0f]>>6)) + x[(49 -7)&0x0f] + (( ((x[(49 -15)&0x0f]) << (63)) | ((x[(49 -15)&0x0f]) >> (64-(63))) )^( ((x[(49 -15)&0x0f]) << (56)) | ((x[(49 -15)&0x0f]) >> (64-(56))) )^(x[(49 -15)&0x0f]>>7)) + x[49&0x0f] , x[49&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[50] + ( tm = (( ((x[(50 -2)&0x0f]) << (45)) | ((x[(50 -2)&0x0f]) >> (64-(45))) )^( ((x[(50 -2)&0x0f]) << (3)) | ((x[(50 -2)&0x0f]) >> (64-(3))) )^(x[(50 -2)&0x0f]>>6)) + x[(50 -7)&0x0f] + (( ((x[(50 -15)&0x0f]) << (63)) | ((x[(50 -15)&0x0f]) >> (64-(63))) )^( ((x[(50 -15)&0x0f]) << (56)) | ((x[(50 -15)&0x0f]) >> (64-(56))) )^(x[(50 -15)&0x0f]>>7)) + x[50&0x0f] , x[50&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[51] + ( tm = (( ((x[(51 -2)&0x0f]) << (45)) | ((x[(51 -2)&0x0f]) >> (64-(45))) )^( ((x[(51 -2)&0x0f]) << (3)) | ((x[(51 -2)&0x0f]) >> (64-(3))) )^(x[(51 -2)&0x0f]>>6)) + x[(51 -7)&0x0f] + (( ((x[(51 -15)&0x0f]) << (63)) | ((x[(51 -15)&0x0f]) >> (64-(63))) )^( ((x[(51 -15)&0x0f]) << (56)) | ((x[(51 -15)&0x0f]) >> (64-(56))) )^(x[(51 -15)&0x0f]>>7)) + x[51&0x0f] , x[51&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[52] + ( tm = (( ((x[(52 -2)&0x0f]) << (45)) | ((x[(52 -2)&0x0f]) >> (64-(45))) )^( ((x[(52 -2)&0x0f]) << (3)) | ((x[(52 -2)&0x0f]) >> (64-(3))) )^(x[(52 -2)&0x0f]>>6)) + x[(52 -7)&0x0f] + (( ((x[(52 -15)&0x0f]) << (63)) | ((x[(52 -15)&0x0f]) >> (64-(63))) )^( ((x[(52 -15)&0x0f]) << (56)) | ((x[(52 -15)&0x0f]) >> (64-(56))) )^(x[(52 -15)&0x0f]>>7)) + x[52&0x0f] , x[52&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[53] + ( tm = (( ((x[(53 -2)&0x0f]) << (45)) | ((x[(53 -2)&0x0f]) >> (64-(45))) )^( ((x[(53 -2)&0x0f]) << (3)) | ((x[(53 -2)&0x0f]) >> (64-(3))) )^(x[(53 -2)&0x0f]>>6)) + x[(53 -7)&0x0f] + (( ((x[(53 -15)&0x0f]) << (63)) | ((x[(53 -15)&0x0f]) >> (64-(63))) )^( ((x[(53 -15)&0x0f]) << (56)) | ((x[(53 -15)&0x0f]) >> (64-(56))) )^(x[(53 -15)&0x0f]>>7)) + x[53&0x0f] , x[53&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[54] + ( tm = (( ((x[(54 -2)&0x0f]) << (45)) | ((x[(54 -2)&0x0f]) >> (64-(45))) )^( ((x[(54 -2)&0x0f]) << (3)) | ((x[(54 -2)&0x0f]) >> (64-(3))) )^(x[(54 -2)&0x0f]>>6)) + x[(54 -7)&0x0f] + (( ((x[(54 -15)&0x0f]) << (63)) | ((x[(54 -15)&0x0f]) >> (64-(63))) )^( ((x[(54 -15)&0x0f]) << (56)) | ((x[(54 -15)&0x0f]) >> (64-(56))) )^(x[(54 -15)&0x0f]>>7)) + x[54&0x0f] , x[54&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[55] + ( tm = (( ((x[(55 -2)&0x0f]) << (45)) | ((x[(55 -2)&0x0f]) >> (64-(45))) )^( ((x[(55 -2)&0x0f]) << (3)) | ((x[(55 -2)&0x0f]) >> (64-(3))) )^(x[(55 -2)&0x0f]>>6)) + x[(55 -7)&0x0f] + (( ((x[(55 -15)&0x0f]) << (63)) | ((x[(55 -15)&0x0f]) >> (64-(63))) )^( ((x[(55 -15)&0x0f]) << (56)) | ((x[(55 -15)&0x0f]) >> (64-(56))) )^(x[(55 -15)&0x0f]>>7)) + x[55&0x0f] , x[55&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[56] + ( tm = (( ((x[(56 -2)&0x0f]) << (45)) | ((x[(56 -2)&0x0f]) >> (64-(45))) )^( ((x[(56 -2)&0x0f]) << (3)) | ((x[(56 -2)&0x0f]) >> (64-(3))) )^(x[(56 -2)&0x0f]>>6)) + x[(56 -7)&0x0f] + (( ((x[(56 -15)&0x0f]) << (63)) | ((x[(56 -15)&0x0f]) >> (64-(63))) )^( ((x[(56 -15)&0x0f]) << (56)) | ((x[(56 -15)&0x0f]) >> (64-(56))) )^(x[(56 -15)&0x0f]>>7)) + x[56&0x0f] , x[56&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[57] + ( tm = (( ((x[(57 -2)&0x0f]) << (45)) | ((x[(57 -2)&0x0f]) >> (64-(45))) )^( ((x[(57 -2)&0x0f]) << (3)) | ((x[(57 -2)&0x0f]) >> (64-(3))) )^(x[(57 -2)&0x0f]>>6)) + x[(57 -7)&0x0f] + (( ((x[(57 -15)&0x0f]) << (63)) | ((x[(57 -15)&0x0f]) >> (64-(63))) )^( ((x[(57 -15)&0x0f]) << (56)) | ((x[(57 -15)&0x0f]) >> (64-(56))) )^(x[(57 -15)&0x0f]>>7)) + x[57&0x0f] , x[57&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[58] + ( tm = (( ((x[(58 -2)&0x0f]) << (45)) | ((x[(58 -2)&0x0f]) >> (64-(45))) )^( ((x[(58 -2)&0x0f]) << (3)) | ((x[(58 -2)&0x0f]) >> (64-(3))) )^(x[(58 -2)&0x0f]>>6)) + x[(58 -7)&0x0f] + (( ((x[(58 -15)&0x0f]) << (63)) | ((x[(58 -15)&0x0f]) >> (64-(63))) )^( ((x[(58 -15)&0x0f]) << (56)) | ((x[(58 -15)&0x0f]) >> (64-(56))) )^(x[(58 -15)&0x0f]>>7)) + x[58&0x0f] , x[58&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[59] + ( tm = (( ((x[(59 -2)&0x0f]) << (45)) | ((x[(59 -2)&0x0f]) >> (64-(45))) )^( ((x[(59 -2)&0x0f]) << (3)) | ((x[(59 -2)&0x0f]) >> (64-(3))) )^(x[(59 -2)&0x0f]>>6)) + x[(59 -7)&0x0f] + (( ((x[(59 -15)&0x0f]) << (63)) | ((x[(59 -15)&0x0f]) >> (64-(63))) )^( ((x[(59 -15)&0x0f]) << (56)) | ((x[(59 -15)&0x0f]) >> (64-(56))) )^(x[(59 -15)&0x0f]>>7)) + x[59&0x0f] , x[59&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[60] + ( tm = (( ((x[(60 -2)&0x0f]) << (45)) | ((x[(60 -2)&0x0f]) >> (64-(45))) )^( ((x[(60 -2)&0x0f]) << (3)) | ((x[(60 -2)&0x0f]) >> (64-(3))) )^(x[(60 -2)&0x0f]>>6)) + x[(60 -7)&0x0f] + (( ((x[(60 -15)&0x0f]) << (63)) | ((x[(60 -15)&0x0f]) >> (64-(63))) )^( ((x[(60 -15)&0x0f]) << (56)) | ((x[(60 -15)&0x0f]) >> (64-(56))) )^(x[(60 -15)&0x0f]>>7)) + x[60&0x0f] , x[60&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[61] + ( tm = (( ((x[(61 -2)&0x0f]) << (45)) | ((x[(61 -2)&0x0f]) >> (64-(45))) )^( ((x[(61 -2)&0x0f]) << (3)) | ((x[(61 -2)&0x0f]) >> (64-(3))) )^(x[(61 -2)&0x0f]>>6)) + x[(61 -7)&0x0f] + (( ((x[(61 -15)&0x0f]) << (63)) | ((x[(61 -15)&0x0f]) >> (64-(63))) )^( ((x[(61 -15)&0x0f]) << (56)) | ((x[(61 -15)&0x0f]) >> (64-(56))) )^(x[(61 -15)&0x0f]>>7)) + x[61&0x0f] , x[61&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[62] + ( tm = (( ((x[(62 -2)&0x0f]) << (45)) | ((x[(62 -2)&0x0f]) >> (64-(45))) )^( ((x[(62 -2)&0x0f]) << (3)) | ((x[(62 -2)&0x0f]) >> (64-(3))) )^(x[(62 -2)&0x0f]>>6)) + x[(62 -7)&0x0f] + (( ((x[(62 -15)&0x0f]) << (63)) | ((x[(62 -15)&0x0f]) >> (64-(63))) )^( ((x[(62 -15)&0x0f]) << (56)) | ((x[(62 -15)&0x0f]) >> (64-(56))) )^(x[(62 -15)&0x0f]>>7)) + x[62&0x0f] , x[62&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[63] + ( tm = (( ((x[(63 -2)&0x0f]) << (45)) | ((x[(63 -2)&0x0f]) >> (64-(45))) )^( ((x[(63 -2)&0x0f]) << (3)) | ((x[(63 -2)&0x0f]) >> (64-(3))) )^(x[(63 -2)&0x0f]>>6)) + x[(63 -7)&0x0f] + (( ((x[(63 -15)&0x0f]) << (63)) | ((x[(63 -15)&0x0f]) >> (64-(63))) )^( ((x[(63 -15)&0x0f]) << (56)) | ((x[(63 -15)&0x0f]) >> (64-(56))) )^(x[(63 -15)&0x0f]>>7)) + x[63&0x0f] , x[63&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[64] + ( tm = (( ((x[(64 -2)&0x0f]) << (45)) | ((x[(64 -2)&0x0f]) >> (64-(45))) )^( ((x[(64 -2)&0x0f]) << (3)) | ((x[(64 -2)&0x0f]) >> (64-(3))) )^(x[(64 -2)&0x0f]>>6)) + x[(64 -7)&0x0f] + (( ((x[(64 -15)&0x0f]) << (63)) | ((x[(64 -15)&0x0f]) >> (64-(63))) )^( ((x[(64 -15)&0x0f]) << (56)) | ((x[(64 -15)&0x0f]) >> (64-(56))) )^(x[(64 -15)&0x0f]>>7)) + x[64&0x0f] , x[64&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[65] + ( tm = (( ((x[(65 -2)&0x0f]) << (45)) | ((x[(65 -2)&0x0f]) >> (64-(45))) )^( ((x[(65 -2)&0x0f]) << (3)) | ((x[(65 -2)&0x0f]) >> (64-(3))) )^(x[(65 -2)&0x0f]>>6)) + x[(65 -7)&0x0f] + (( ((x[(65 -15)&0x0f]) << (63)) | ((x[(65 -15)&0x0f]) >> (64-(63))) )^( ((x[(65 -15)&0x0f]) << (56)) | ((x[(65 -15)&0x0f]) >> (64-(56))) )^(x[(65 -15)&0x0f]>>7)) + x[65&0x0f] , x[65&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[66] + ( tm = (( ((x[(66 -2)&0x0f]) << (45)) | ((x[(66 -2)&0x0f]) >> (64-(45))) )^( ((x[(66 -2)&0x0f]) << (3)) | ((x[(66 -2)&0x0f]) >> (64-(3))) )^(x[(66 -2)&0x0f]>>6)) + x[(66 -7)&0x0f] + (( ((x[(66 -15)&0x0f]) << (63)) | ((x[(66 -15)&0x0f]) >> (64-(63))) )^( ((x[(66 -15)&0x0f]) << (56)) | ((x[(66 -15)&0x0f]) >> (64-(56))) )^(x[(66 -15)&0x0f]>>7)) + x[66&0x0f] , x[66&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[67] + ( tm = (( ((x[(67 -2)&0x0f]) << (45)) | ((x[(67 -2)&0x0f]) >> (64-(45))) )^( ((x[(67 -2)&0x0f]) << (3)) | ((x[(67 -2)&0x0f]) >> (64-(3))) )^(x[(67 -2)&0x0f]>>6)) + x[(67 -7)&0x0f] + (( ((x[(67 -15)&0x0f]) << (63)) | ((x[(67 -15)&0x0f]) >> (64-(63))) )^( ((x[(67 -15)&0x0f]) << (56)) | ((x[(67 -15)&0x0f]) >> (64-(56))) )^(x[(67 -15)&0x0f]>>7)) + x[67&0x0f] , x[67&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[68] + ( tm = (( ((x[(68 -2)&0x0f]) << (45)) | ((x[(68 -2)&0x0f]) >> (64-(45))) )^( ((x[(68 -2)&0x0f]) << (3)) | ((x[(68 -2)&0x0f]) >> (64-(3))) )^(x[(68 -2)&0x0f]>>6)) + x[(68 -7)&0x0f] + (( ((x[(68 -15)&0x0f]) << (63)) | ((x[(68 -15)&0x0f]) >> (64-(63))) )^( ((x[(68 -15)&0x0f]) << (56)) | ((x[(68 -15)&0x0f]) >> (64-(56))) )^(x[(68 -15)&0x0f]>>7)) + x[68&0x0f] , x[68&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[69] + ( tm = (( ((x[(69 -2)&0x0f]) << (45)) | ((x[(69 -2)&0x0f]) >> (64-(45))) )^( ((x[(69 -2)&0x0f]) << (3)) | ((x[(69 -2)&0x0f]) >> (64-(3))) )^(x[(69 -2)&0x0f]>>6)) + x[(69 -7)&0x0f] + (( ((x[(69 -15)&0x0f]) << (63)) | ((x[(69 -15)&0x0f]) >> (64-(63))) )^( ((x[(69 -15)&0x0f]) << (56)) | ((x[(69 -15)&0x0f]) >> (64-(56))) )^(x[(69 -15)&0x0f]>>7)) + x[69&0x0f] , x[69&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[70] + ( tm = (( ((x[(70 -2)&0x0f]) << (45)) | ((x[(70 -2)&0x0f]) >> (64-(45))) )^( ((x[(70 -2)&0x0f]) << (3)) | ((x[(70 -2)&0x0f]) >> (64-(3))) )^(x[(70 -2)&0x0f]>>6)) + x[(70 -7)&0x0f] + (( ((x[(70 -15)&0x0f]) << (63)) | ((x[(70 -15)&0x0f]) >> (64-(63))) )^( ((x[(70 -15)&0x0f]) << (56)) | ((x[(70 -15)&0x0f]) >> (64-(56))) )^(x[(70 -15)&0x0f]>>7)) + x[70&0x0f] , x[70&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[71] + ( tm = (( ((x[(71 -2)&0x0f]) << (45)) | ((x[(71 -2)&0x0f]) >> (64-(45))) )^( ((x[(71 -2)&0x0f]) << (3)) | ((x[(71 -2)&0x0f]) >> (64-(3))) )^(x[(71 -2)&0x0f]>>6)) + x[(71 -7)&0x0f] + (( ((x[(71 -15)&0x0f]) << (63)) | ((x[(71 -15)&0x0f]) >> (64-(63))) )^( ((x[(71 -15)&0x0f]) << (56)) | ((x[(71 -15)&0x0f]) >> (64-(56))) )^(x[(71 -15)&0x0f]>>7)) + x[71&0x0f] , x[71&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      do { t0 = (( ((a) << (36)) | ((a) >> (64-(36))) )^( ((a) << (30)) | ((a) >> (64-(30))) )^( ((a) << (25)) | ((a) >> (64-(25))) )) + ( ( a & b ) | ( c & ( a | b ) ) ); t1 = h + (( ((e) << (50)) | ((e) >> (64-(50))) )^( ((e) << (46)) | ((e) >> (64-(46))) )^( ((e) << (23)) | ((e) >> (64-(23))) )) + ( g ^ ( e & ( f ^ g ) ) ) + sha512_round_constants[72] + ( tm = (( ((x[(72 -2)&0x0f]) << (45)) | ((x[(72 -2)&0x0f]) >> (64-(45))) )^( ((x[(72 -2)&0x0f]) << (3)) | ((x[(72 -2)&0x0f]) >> (64-(3))) )^(x[(72 -2)&0x0f]>>6)) + x[(72 -7)&0x0f] + (( ((x[(72 -15)&0x0f]) << (63)) | ((x[(72 -15)&0x0f]) >> (64-(63))) )^( ((x[(72 -15)&0x0f]) << (56)) | ((x[(72 -15)&0x0f]) >> (64-(56))) )^(x[(72 -15)&0x0f]>>7)) + x[72&0x0f] , x[72&0x0f] = tm ); d += t1; h = t0 + t1; } while(0);
      do { t0 = (( ((h) << (36)) | ((h) >> (64-(36))) )^( ((h) << (30)) | ((h) >> (64-(30))) )^( ((h) << (25)) | ((h) >> (64-(25))) )) + ( ( h & a ) | ( b & ( h | a ) ) ); t1 = g + (( ((d) << (50)) | ((d) >> (64-(50))) )^( ((d) << (46)) | ((d) >> (64-(46))) )^( ((d) << (23)) | ((d) >> (64-(23))) )) + ( f ^ ( d & ( e ^ f ) ) ) + sha512_round_constants[73] + ( tm = (( ((x[(73 -2)&0x0f]) << (45)) | ((x[(73 -2)&0x0f]) >> (64-(45))) )^( ((x[(73 -2)&0x0f]) << (3)) | ((x[(73 -2)&0x0f]) >> (64-(3))) )^(x[(73 -2)&0x0f]>>6)) + x[(73 -7)&0x0f] + (( ((x[(73 -15)&0x0f]) << (63)) | ((x[(73 -15)&0x0f]) >> (64-(63))) )^( ((x[(73 -15)&0x0f]) << (56)) | ((x[(73 -15)&0x0f]) >> (64-(56))) )^(x[(73 -15)&0x0f]>>7)) + x[73&0x0f] , x[73&0x0f] = tm ); c += t1; g = t0 + t1; } while(0);
      do { t0 = (( ((g) << (36)) | ((g) >> (64-(36))) )^( ((g) << (30)) | ((g) >> (64-(30))) )^( ((g) << (25)) | ((g) >> (64-(25))) )) + ( ( g & h ) | ( a & ( g | h ) ) ); t1 = f + (( ((c) << (50)) | ((c) >> (64-(50))) )^( ((c) << (46)) | ((c) >> (64-(46))) )^( ((c) << (23)) | ((c) >> (64-(23))) )) + ( e ^ ( c & ( d ^ e ) ) ) + sha512_round_constants[74] + ( tm = (( ((x[(74 -2)&0x0f]) << (45)) | ((x[(74 -2)&0x0f]) >> (64-(45))) )^( ((x[(74 -2)&0x0f]) << (3)) | ((x[(74 -2)&0x0f]) >> (64-(3))) )^(x[(74 -2)&0x0f]>>6)) + x[(74 -7)&0x0f] + (( ((x[(74 -15)&0x0f]) << (63)) | ((x[(74 -15)&0x0f]) >> (64-(63))) )^( ((x[(74 -15)&0x0f]) << (56)) | ((x[(74 -15)&0x0f]) >> (64-(56))) )^(x[(74 -15)&0x0f]>>7)) + x[74&0x0f] , x[74&0x0f] = tm ); b += t1; f = t0 + t1; } while(0);
      do { t0 = (( ((f) << (36)) | ((f) >> (64-(36))) )^( ((f) << (30)) | ((f) >> (64-(30))) )^( ((f) << (25)) | ((f) >> (64-(25))) )) + ( ( f & g ) | ( h & ( f | g ) ) ); t1 = e + (( ((b) << (50)) | ((b) >> (64-(50))) )^( ((b) << (46)) | ((b) >> (64-(46))) )^( ((b) << (23)) | ((b) >> (64-(23))) )) + ( d ^ ( b & ( c ^ d ) ) ) + sha512_round_constants[75] + ( tm = (( ((x[(75 -2)&0x0f]) << (45)) | ((x[(75 -2)&0x0f]) >> (64-(45))) )^( ((x[(75 -2)&0x0f]) << (3)) | ((x[(75 -2)&0x0f]) >> (64-(3))) )^(x[(75 -2)&0x0f]>>6)) + x[(75 -7)&0x0f] + (( ((x[(75 -15)&0x0f]) << (63)) | ((x[(75 -15)&0x0f]) >> (64-(63))) )^( ((x[(75 -15)&0x0f]) << (56)) | ((x[(75 -15)&0x0f]) >> (64-(56))) )^(x[(75 -15)&0x0f]>>7)) + x[75&0x0f] , x[75&0x0f] = tm ); a += t1; e = t0 + t1; } while(0);
      do { t0 = (( ((e) << (36)) | ((e) >> (64-(36))) )^( ((e) << (30)) | ((e) >> (64-(30))) )^( ((e) << (25)) | ((e) >> (64-(25))) )) + ( ( e & f ) | ( g & ( e | f ) ) ); t1 = d + (( ((a) << (50)) | ((a) >> (64-(50))) )^( ((a) << (46)) | ((a) >> (64-(46))) )^( ((a) << (23)) | ((a) >> (64-(23))) )) + ( c ^ ( a & ( b ^ c ) ) ) + sha512_round_constants[76] + ( tm = (( ((x[(76 -2)&0x0f]) << (45)) | ((x[(76 -2)&0x0f]) >> (64-(45))) )^( ((x[(76 -2)&0x0f]) << (3)) | ((x[(76 -2)&0x0f]) >> (64-(3))) )^(x[(76 -2)&0x0f]>>6)) + x[(76 -7)&0x0f] + (( ((x[(76 -15)&0x0f]) << (63)) | ((x[(76 -15)&0x0f]) >> (64-(63))) )^( ((x[(76 -15)&0x0f]) << (56)) | ((x[(76 -15)&0x0f]) >> (64-(56))) )^(x[(76 -15)&0x0f]>>7)) + x[76&0x0f] , x[76&0x0f] = tm ); h += t1; d = t0 + t1; } while(0);
      do { t0 = (( ((d) << (36)) | ((d) >> (64-(36))) )^( ((d) << (30)) | ((d) >> (64-(30))) )^( ((d) << (25)) | ((d) >> (64-(25))) )) + ( ( d & e ) | ( f & ( d | e ) ) ); t1 = c + (( ((h) << (50)) | ((h) >> (64-(50))) )^( ((h) << (46)) | ((h) >> (64-(46))) )^( ((h) << (23)) | ((h) >> (64-(23))) )) + ( b ^ ( h & ( a ^ b ) ) ) + sha512_round_constants[77] + ( tm = (( ((x[(77 -2)&0x0f]) << (45)) | ((x[(77 -2)&0x0f]) >> (64-(45))) )^( ((x[(77 -2)&0x0f]) << (3)) | ((x[(77 -2)&0x0f]) >> (64-(3))) )^(x[(77 -2)&0x0f]>>6)) + x[(77 -7)&0x0f] + (( ((x[(77 -15)&0x0f]) << (63)) | ((x[(77 -15)&0x0f]) >> (64-(63))) )^( ((x[(77 -15)&0x0f]) << (56)) | ((x[(77 -15)&0x0f]) >> (64-(56))) )^(x[(77 -15)&0x0f]>>7)) + x[77&0x0f] , x[77&0x0f] = tm ); g += t1; c = t0 + t1; } while(0);
      do { t0 = (( ((c) << (36)) | ((c) >> (64-(36))) )^( ((c) << (30)) | ((c) >> (64-(30))) )^( ((c) << (25)) | ((c) >> (64-(25))) )) + ( ( c & d ) | ( e & ( c | d ) ) ); t1 = b + (( ((g) << (50)) | ((g) >> (64-(50))) )^( ((g) << (46)) | ((g) >> (64-(46))) )^( ((g) << (23)) | ((g) >> (64-(23))) )) + ( a ^ ( g & ( h ^ a ) ) ) + sha512_round_constants[78] + ( tm = (( ((x[(78 -2)&0x0f]) << (45)) | ((x[(78 -2)&0x0f]) >> (64-(45))) )^( ((x[(78 -2)&0x0f]) << (3)) | ((x[(78 -2)&0x0f]) >> (64-(3))) )^(x[(78 -2)&0x0f]>>6)) + x[(78 -7)&0x0f] + (( ((x[(78 -15)&0x0f]) << (63)) | ((x[(78 -15)&0x0f]) >> (64-(63))) )^( ((x[(78 -15)&0x0f]) << (56)) | ((x[(78 -15)&0x0f]) >> (64-(56))) )^(x[(78 -15)&0x0f]>>7)) + x[78&0x0f] , x[78&0x0f] = tm ); f += t1; b = t0 + t1; } while(0);
      do { t0 = (( ((b) << (36)) | ((b) >> (64-(36))) )^( ((b) << (30)) | ((b) >> (64-(30))) )^( ((b) << (25)) | ((b) >> (64-(25))) )) + ( ( b & c ) | ( d & ( b | c ) ) ); t1 = a + (( ((f) << (50)) | ((f) >> (64-(50))) )^( ((f) << (46)) | ((f) >> (64-(46))) )^( ((f) << (23)) | ((f) >> (64-(23))) )) + ( h ^ ( f & ( g ^ h ) ) ) + sha512_round_constants[79] + ( tm = (( ((x[(79 -2)&0x0f]) << (45)) | ((x[(79 -2)&0x0f]) >> (64-(45))) )^( ((x[(79 -2)&0x0f]) << (3)) | ((x[(79 -2)&0x0f]) >> (64-(3))) )^(x[(79 -2)&0x0f]>>6)) + x[(79 -7)&0x0f] + (( ((x[(79 -15)&0x0f]) << (63)) | ((x[(79 -15)&0x0f]) >> (64-(63))) )^( ((x[(79 -15)&0x0f]) << (56)) | ((x[(79 -15)&0x0f]) >> (64-(56))) )^(x[(79 -15)&0x0f]>>7)) + x[79&0x0f] , x[79&0x0f] = tm ); e += t1; a = t0 + t1; } while(0);
      a = ctx->state[0] += a;
      b = ctx->state[1] += b;
      c = ctx->state[2] += c;
      d = ctx->state[3] += d;
      e = ctx->state[4] += e;
      f = ctx->state[5] += f;
      g = ctx->state[6] += g;
      h = ctx->state[7] += h;
    }
}
static inline void *
ptr_align (void const *ptr, size_t alignment)
{
  char const *p0 = ptr;
  char const *p1 = p0 + alignment - 1;
  return (void *) (p1 - (size_t) p1 % alignment);
}
int
main()
{
  unsigned char bin_buffer_unaligned[(384 / 8) + 8];
  unsigned char *bin_buffer = ptr_align (bin_buffer_unaligned, 8);
  sha384_buffer (((void *)0), 0, bin_buffer);
  int i;
  for (i = 0; i < ((384 / 4) / 2); ++i)
    printf ("%02x", bin_buffer[i]);
  printf ("\n");
  return 0;
}
Comment 1 Richard Biener 2006-06-23 19:50:21 UTC
Can you please attach the preprocessed source rather than pasting it in?  (I know there was no way to do so on the new bug page)

Thanks!
Comment 2 Jim Meyering 2006-06-23 19:58:40 UTC
Created attachment 11734 [details]
preprocessed input

Here's the same j.i file, as an attachment.
Comment 3 Richard Biener 2006-06-23 20:12:45 UTC
It produces
38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
for me with -O and -O2.  Can you post the output of

gcc -I.. -I. -g -O2 ~/j.c -v

?
Comment 4 Jim Meyering 2006-06-23 20:26:27 UTC
Created attachment 11735 [details]
Here's the output of running gcc -I.. -I. -g -O2 ~/j.c -v

Here's the output of running gcc -I.. -I. -g -O2 ~/j.c -v
Comment 5 Richard Biener 2006-06-23 21:03:31 UTC
Ok, looks like it is s390 specific because I can reproduce it with
gcc version 4.1.2 20060531 (prerelease)
/usr/lib/gcc/s390-suse-linux/4.1.2/cc1 -fpreprocessed t.i -quiet -dumpbase t.i -march=z900 -mtune=z9-109 -m31 -mesa -auxbase t -O2 -version -o /tmp/ccuMU6kl.s

ppc, ppc64, i686 and x86_64 are fine with the same version.
Comment 6 Richard Biener 2006-06-23 21:15:44 UTC
trying to reduce it.
Comment 7 Alexandre Oliva 2006-08-17 08:55:12 UTC
Subject: Bug 28146

Author: aoliva
Date: Thu Aug 17 08:55:02 2006
New Revision: 116215

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=116215
Log:
PR target/28146
* reload.h (reg_equiv_alt_mem_list): New declaration.
* reload1.c (reg_equiv_alt_mem_list): New definition.
(reload): Initialize it and release it.
(delete_output_reload): Use it.
* reload.c (push_reg_equiv_alt_mem): New function.
(find_reloads_toplev): Call it.
(find_reloads_address, find_reloads_address_1): Likewise.
(find_reloads_subreg_address): Likewise.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/reload.c
    trunk/gcc/reload.h
    trunk/gcc/reload1.c

Comment 8 Andrew Pinski 2006-08-17 15:08:14 UTC
Fixed.
Comment 9 Andreas Schwab 2006-08-21 14:27:38 UTC
*** Bug 28789 has been marked as a duplicate of this bug. ***