{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE BangPatterns #-}

module Crypto.Hash.Whirlpool
    (
      Whirlpool
    ) where

import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy.Char8 as LC
import           Data.ByteString (ByteString)
import           Data.ByteString.Builder
import           Data.Array.Unboxed
import           Data.Int
import           Data.Word
import           Data.Bits
import           Data.Monoid
import           Data.List(foldl')

import           Crypto.Hash.ADT

_c0, _c1, _c2, _c3, _c4, _c5, _c6, _c7 :: [Word64]
_c0 :: [Word64]
_c0 = [
    Word64
0x18186018c07830d8, Word64
0x23238c2305af4626, Word64
0xc6c63fc67ef991b8, Word64
0xe8e887e8136fcdfb
  , Word64
0x878726874ca113cb, Word64
0xb8b8dab8a9626d11, Word64
0x0101040108050209, Word64
0x4f4f214f426e9e0d
  , Word64
0x3636d836adee6c9b, Word64
0xa6a6a2a6590451ff, Word64
0xd2d26fd2debdb90c, Word64
0xf5f5f3f5fb06f70e
  , Word64
0x7979f979ef80f296, Word64
0x6f6fa16f5fcede30, Word64
0x91917e91fcef3f6d, Word64
0x52525552aa07a4f8
  , Word64
0x60609d6027fdc047, Word64
0xbcbccabc89766535, Word64
0x9b9b569baccd2b37, Word64
0x8e8e028e048c018a
  , Word64
0xa3a3b6a371155bd2, Word64
0x0c0c300c603c186c, Word64
0x7b7bf17bff8af684, Word64
0x3535d435b5e16a80
  , Word64
0x1d1d741de8693af5, Word64
0xe0e0a7e05347ddb3, Word64
0xd7d77bd7f6acb321, Word64
0xc2c22fc25eed999c
  , Word64
0x2e2eb82e6d965c43, Word64
0x4b4b314b627a9629, Word64
0xfefedffea321e15d, Word64
0x575741578216aed5
  , Word64
0x15155415a8412abd, Word64
0x7777c1779fb6eee8, Word64
0x3737dc37a5eb6e92, Word64
0xe5e5b3e57b56d79e
  , Word64
0x9f9f469f8cd92313, Word64
0xf0f0e7f0d317fd23, Word64
0x4a4a354a6a7f9420, Word64
0xdada4fda9e95a944
  , Word64
0x58587d58fa25b0a2, Word64
0xc9c903c906ca8fcf, Word64
0x2929a429558d527c, Word64
0x0a0a280a5022145a
  , Word64
0xb1b1feb1e14f7f50, Word64
0xa0a0baa0691a5dc9, Word64
0x6b6bb16b7fdad614, Word64
0x85852e855cab17d9
  , Word64
0xbdbdcebd8173673c, Word64
0x5d5d695dd234ba8f, Word64
0x1010401080502090, Word64
0xf4f4f7f4f303f507
  , Word64
0xcbcb0bcb16c08bdd, Word64
0x3e3ef83eedc67cd3, Word64
0x0505140528110a2d, Word64
0x676781671fe6ce78
  , Word64
0xe4e4b7e47353d597, Word64
0x27279c2725bb4e02, Word64
0x4141194132588273, Word64
0x8b8b168b2c9d0ba7
  , Word64
0xa7a7a6a7510153f6, Word64
0x7d7de97dcf94fab2, Word64
0x95956e95dcfb3749, Word64
0xd8d847d88e9fad56
  , Word64
0xfbfbcbfb8b30eb70, Word64
0xeeee9fee2371c1cd, Word64
0x7c7ced7cc791f8bb, Word64
0x6666856617e3cc71
  , Word64
0xdddd53dda68ea77b, Word64
0x17175c17b84b2eaf, Word64
0x4747014702468e45, Word64
0x9e9e429e84dc211a
  , Word64
0xcaca0fca1ec589d4, Word64
0x2d2db42d75995a58, Word64
0xbfbfc6bf9179632e, Word64
0x07071c07381b0e3f
  , Word64
0xadad8ead012347ac, Word64
0x5a5a755aea2fb4b0, Word64
0x838336836cb51bef, Word64
0x3333cc3385ff66b6
  , Word64
0x636391633ff2c65c, Word64
0x02020802100a0412, Word64
0xaaaa92aa39384993, Word64
0x7171d971afa8e2de
  , Word64
0xc8c807c80ecf8dc6, Word64
0x19196419c87d32d1, Word64
0x494939497270923b, Word64
0xd9d943d9869aaf5f
  , Word64
0xf2f2eff2c31df931, Word64
0xe3e3abe34b48dba8, Word64
0x5b5b715be22ab6b9, Word64
0x88881a8834920dbc
  , Word64
0x9a9a529aa4c8293e, Word64
0x262698262dbe4c0b, Word64
0x3232c8328dfa64bf, Word64
0xb0b0fab0e94a7d59
  , Word64
0xe9e983e91b6acff2, Word64
0x0f0f3c0f78331e77, Word64
0xd5d573d5e6a6b733, Word64
0x80803a8074ba1df4
  , Word64
0xbebec2be997c6127, Word64
0xcdcd13cd26de87eb, Word64
0x3434d034bde46889, Word64
0x48483d487a759032
  , Word64
0xffffdbffab24e354, Word64
0x7a7af57af78ff48d, Word64
0x90907a90f4ea3d64, Word64
0x5f5f615fc23ebe9d
  , Word64
0x202080201da0403d, Word64
0x6868bd6867d5d00f, Word64
0x1a1a681ad07234ca, Word64
0xaeae82ae192c41b7
  , Word64
0xb4b4eab4c95e757d, Word64
0x54544d549a19a8ce, Word64
0x93937693ece53b7f, Word64
0x222288220daa442f
  , Word64
0x64648d6407e9c863, Word64
0xf1f1e3f1db12ff2a, Word64
0x7373d173bfa2e6cc, Word64
0x12124812905a2482
  , Word64
0x40401d403a5d807a, Word64
0x0808200840281048, Word64
0xc3c32bc356e89b95, Word64
0xecec97ec337bc5df
  , Word64
0xdbdb4bdb9690ab4d, Word64
0xa1a1bea1611f5fc0, Word64
0x8d8d0e8d1c830791, Word64
0x3d3df43df5c97ac8
  , Word64
0x97976697ccf1335b, Word64
0x0000000000000000, Word64
0xcfcf1bcf36d483f9, Word64
0x2b2bac2b4587566e
  , Word64
0x7676c57697b3ece1, Word64
0x8282328264b019e6, Word64
0xd6d67fd6fea9b128, Word64
0x1b1b6c1bd87736c3
  , Word64
0xb5b5eeb5c15b7774, Word64
0xafaf86af112943be, Word64
0x6a6ab56a77dfd41d, Word64
0x50505d50ba0da0ea
  , Word64
0x45450945124c8a57, Word64
0xf3f3ebf3cb18fb38, Word64
0x3030c0309df060ad, Word64
0xefef9bef2b74c3c4
  , Word64
0x3f3ffc3fe5c37eda, Word64
0x55554955921caac7, Word64
0xa2a2b2a2791059db, Word64
0xeaea8fea0365c9e9
  , Word64
0x656589650fecca6a, Word64
0xbabad2bab9686903, Word64
0x2f2fbc2f65935e4a, Word64
0xc0c027c04ee79d8e
  , Word64
0xdede5fdebe81a160, Word64
0x1c1c701ce06c38fc, Word64
0xfdfdd3fdbb2ee746, Word64
0x4d4d294d52649a1f
  , Word64
0x92927292e4e03976, Word64
0x7575c9758fbceafa, Word64
0x06061806301e0c36, Word64
0x8a8a128a249809ae
  , Word64
0xb2b2f2b2f940794b, Word64
0xe6e6bfe66359d185, Word64
0x0e0e380e70361c7e, Word64
0x1f1f7c1ff8633ee7
  , Word64
0x6262956237f7c455, Word64
0xd4d477d4eea3b53a, Word64
0xa8a89aa829324d81, Word64
0x96966296c4f43152
  , Word64
0xf9f9c3f99b3aef62, Word64
0xc5c533c566f697a3, Word64
0x2525942535b14a10, Word64
0x59597959f220b2ab
  , Word64
0x84842a8454ae15d0, Word64
0x7272d572b7a7e4c5, Word64
0x3939e439d5dd72ec, Word64
0x4c4c2d4c5a619816
  , Word64
0x5e5e655eca3bbc94, Word64
0x7878fd78e785f09f, Word64
0x3838e038ddd870e5, Word64
0x8c8c0a8c14860598
  , Word64
0xd1d163d1c6b2bf17, Word64
0xa5a5aea5410b57e4, Word64
0xe2e2afe2434dd9a1, Word64
0x616199612ff8c24e
  , Word64
0xb3b3f6b3f1457b42, Word64
0x2121842115a54234, Word64
0x9c9c4a9c94d62508, Word64
0x1e1e781ef0663cee
  , Word64
0x4343114322528661, Word64
0xc7c73bc776fc93b1, Word64
0xfcfcd7fcb32be54f, Word64
0x0404100420140824
  , Word64
0x51515951b208a2e3, Word64
0x99995e99bcc72f25, Word64
0x6d6da96d4fc4da22, Word64
0x0d0d340d68391a65
  , Word64
0xfafacffa8335e979, Word64
0xdfdf5bdfb684a369, Word64
0x7e7ee57ed79bfca9, Word64
0x242490243db44819
  , Word64
0x3b3bec3bc5d776fe, Word64
0xabab96ab313d4b9a, Word64
0xcece1fce3ed181f0, Word64
0x1111441188552299
  , Word64
0x8f8f068f0c890383, Word64
0x4e4e254e4a6b9c04, Word64
0xb7b7e6b7d1517366, Word64
0xebeb8beb0b60cbe0
  , Word64
0x3c3cf03cfdcc78c1, Word64
0x81813e817cbf1ffd, Word64
0x94946a94d4fe3540, Word64
0xf7f7fbf7eb0cf31c
  , Word64
0xb9b9deb9a1676f18, Word64
0x13134c13985f268b, Word64
0x2c2cb02c7d9c5851, Word64
0xd3d36bd3d6b8bb05
  , Word64
0xe7e7bbe76b5cd38c, Word64
0x6e6ea56e57cbdc39, Word64
0xc4c437c46ef395aa, Word64
0x03030c03180f061b
  , Word64
0x565645568a13acdc, Word64
0x44440d441a49885e, Word64
0x7f7fe17fdf9efea0, Word64
0xa9a99ea921374f88
  , Word64
0x2a2aa82a4d825467, Word64
0xbbbbd6bbb16d6b0a, Word64
0xc1c123c146e29f87, Word64
0x53535153a202a6f1
  , Word64
0xdcdc57dcae8ba572, Word64
0x0b0b2c0b58271653, Word64
0x9d9d4e9d9cd32701, Word64
0x6c6cad6c47c1d82b
  , Word64
0x3131c43195f562a4, Word64
0x7474cd7487b9e8f3, Word64
0xf6f6fff6e309f115, Word64
0x464605460a438c4c
  , Word64
0xacac8aac092645a5, Word64
0x89891e893c970fb5, Word64
0x14145014a04428b4, Word64
0xe1e1a3e15b42dfba
  , Word64
0x16165816b04e2ca6, Word64
0x3a3ae83acdd274f7, Word64
0x6969b9696fd0d206, Word64
0x09092409482d1241
  , Word64
0x7070dd70a7ade0d7, Word64
0xb6b6e2b6d954716f, Word64
0xd0d067d0ceb7bd1e, Word64
0xeded93ed3b7ec7d6
  , Word64
0xcccc17cc2edb85e2, Word64
0x424215422a578468, Word64
0x98985a98b4c22d2c, Word64
0xa4a4aaa4490e55ed
  , Word64
0x2828a0285d885075, Word64
0x5c5c6d5cda31b886, Word64
0xf8f8c7f8933fed6b, Word64
0x8686228644a411c2
  ]

_c1 :: [Word64]
_c1 = [
    Word64
0xd818186018c07830, Word64
0x2623238c2305af46, Word64
0xb8c6c63fc67ef991, Word64
0xfbe8e887e8136fcd
  , Word64
0xcb878726874ca113, Word64
0x11b8b8dab8a9626d, Word64
0x0901010401080502, Word64
0x0d4f4f214f426e9e
  , Word64
0x9b3636d836adee6c, Word64
0xffa6a6a2a6590451, Word64
0x0cd2d26fd2debdb9, Word64
0x0ef5f5f3f5fb06f7
  , Word64
0x967979f979ef80f2, Word64
0x306f6fa16f5fcede, Word64
0x6d91917e91fcef3f, Word64
0xf852525552aa07a4
  , Word64
0x4760609d6027fdc0, Word64
0x35bcbccabc897665, Word64
0x379b9b569baccd2b, Word64
0x8a8e8e028e048c01
  , Word64
0xd2a3a3b6a371155b, Word64
0x6c0c0c300c603c18, Word64
0x847b7bf17bff8af6, Word64
0x803535d435b5e16a
  , Word64
0xf51d1d741de8693a, Word64
0xb3e0e0a7e05347dd, Word64
0x21d7d77bd7f6acb3, Word64
0x9cc2c22fc25eed99
  , Word64
0x432e2eb82e6d965c, Word64
0x294b4b314b627a96, Word64
0x5dfefedffea321e1, Word64
0xd5575741578216ae
  , Word64
0xbd15155415a8412a, Word64
0xe87777c1779fb6ee, Word64
0x923737dc37a5eb6e, Word64
0x9ee5e5b3e57b56d7
  , Word64
0x139f9f469f8cd923, Word64
0x23f0f0e7f0d317fd, Word64
0x204a4a354a6a7f94, Word64
0x44dada4fda9e95a9
  , Word64
0xa258587d58fa25b0, Word64
0xcfc9c903c906ca8f, Word64
0x7c2929a429558d52, Word64
0x5a0a0a280a502214
  , Word64
0x50b1b1feb1e14f7f, Word64
0xc9a0a0baa0691a5d, Word64
0x146b6bb16b7fdad6, Word64
0xd985852e855cab17
  , Word64
0x3cbdbdcebd817367, Word64
0x8f5d5d695dd234ba, Word64
0x9010104010805020, Word64
0x07f4f4f7f4f303f5
  , Word64
0xddcbcb0bcb16c08b, Word64
0xd33e3ef83eedc67c, Word64
0x2d0505140528110a, Word64
0x78676781671fe6ce
  , Word64
0x97e4e4b7e47353d5, Word64
0x0227279c2725bb4e, Word64
0x7341411941325882, Word64
0xa78b8b168b2c9d0b
  , Word64
0xf6a7a7a6a7510153, Word64
0xb27d7de97dcf94fa, Word64
0x4995956e95dcfb37, Word64
0x56d8d847d88e9fad
  , Word64
0x70fbfbcbfb8b30eb, Word64
0xcdeeee9fee2371c1, Word64
0xbb7c7ced7cc791f8, Word64
0x716666856617e3cc
  , Word64
0x7bdddd53dda68ea7, Word64
0xaf17175c17b84b2e, Word64
0x454747014702468e, Word64
0x1a9e9e429e84dc21
  , Word64
0xd4caca0fca1ec589, Word64
0x582d2db42d75995a, Word64
0x2ebfbfc6bf917963, Word64
0x3f07071c07381b0e
  , Word64
0xacadad8ead012347, Word64
0xb05a5a755aea2fb4, Word64
0xef838336836cb51b, Word64
0xb63333cc3385ff66
  , Word64
0x5c636391633ff2c6, Word64
0x1202020802100a04, Word64
0x93aaaa92aa393849, Word64
0xde7171d971afa8e2
  , Word64
0xc6c8c807c80ecf8d, Word64
0xd119196419c87d32, Word64
0x3b49493949727092, Word64
0x5fd9d943d9869aaf
  , Word64
0x31f2f2eff2c31df9, Word64
0xa8e3e3abe34b48db, Word64
0xb95b5b715be22ab6, Word64
0xbc88881a8834920d
  , Word64
0x3e9a9a529aa4c829, Word64
0x0b262698262dbe4c, Word64
0xbf3232c8328dfa64, Word64
0x59b0b0fab0e94a7d
  , Word64
0xf2e9e983e91b6acf, Word64
0x770f0f3c0f78331e, Word64
0x33d5d573d5e6a6b7, Word64
0xf480803a8074ba1d
  , Word64
0x27bebec2be997c61, Word64
0xebcdcd13cd26de87, Word64
0x893434d034bde468, Word64
0x3248483d487a7590
  , Word64
0x54ffffdbffab24e3, Word64
0x8d7a7af57af78ff4, Word64
0x6490907a90f4ea3d, Word64
0x9d5f5f615fc23ebe
  , Word64
0x3d202080201da040, Word64
0x0f6868bd6867d5d0, Word64
0xca1a1a681ad07234, Word64
0xb7aeae82ae192c41
  , Word64
0x7db4b4eab4c95e75, Word64
0xce54544d549a19a8, Word64
0x7f93937693ece53b, Word64
0x2f222288220daa44
  , Word64
0x6364648d6407e9c8, Word64
0x2af1f1e3f1db12ff, Word64
0xcc7373d173bfa2e6, Word64
0x8212124812905a24
  , Word64
0x7a40401d403a5d80, Word64
0x4808082008402810, Word64
0x95c3c32bc356e89b, Word64
0xdfecec97ec337bc5
  , Word64
0x4ddbdb4bdb9690ab, Word64
0xc0a1a1bea1611f5f, Word64
0x918d8d0e8d1c8307, Word64
0xc83d3df43df5c97a
  , Word64
0x5b97976697ccf133, Word64
0x0000000000000000, Word64
0xf9cfcf1bcf36d483, Word64
0x6e2b2bac2b458756
  , Word64
0xe17676c57697b3ec, Word64
0xe68282328264b019, Word64
0x28d6d67fd6fea9b1, Word64
0xc31b1b6c1bd87736
  , Word64
0x74b5b5eeb5c15b77, Word64
0xbeafaf86af112943, Word64
0x1d6a6ab56a77dfd4, Word64
0xea50505d50ba0da0
  , Word64
0x5745450945124c8a, Word64
0x38f3f3ebf3cb18fb, Word64
0xad3030c0309df060, Word64
0xc4efef9bef2b74c3
  , Word64
0xda3f3ffc3fe5c37e, Word64
0xc755554955921caa, Word64
0xdba2a2b2a2791059, Word64
0xe9eaea8fea0365c9
  , Word64
0x6a656589650fecca, Word64
0x03babad2bab96869, Word64
0x4a2f2fbc2f65935e, Word64
0x8ec0c027c04ee79d
  , Word64
0x60dede5fdebe81a1, Word64
0xfc1c1c701ce06c38, Word64
0x46fdfdd3fdbb2ee7, Word64
0x1f4d4d294d52649a
  , Word64
0x7692927292e4e039, Word64
0xfa7575c9758fbcea, Word64
0x3606061806301e0c, Word64
0xae8a8a128a249809
  , Word64
0x4bb2b2f2b2f94079, Word64
0x85e6e6bfe66359d1, Word64
0x7e0e0e380e70361c, Word64
0xe71f1f7c1ff8633e
  , Word64
0x556262956237f7c4, Word64
0x3ad4d477d4eea3b5, Word64
0x81a8a89aa829324d, Word64
0x5296966296c4f431
  , Word64
0x62f9f9c3f99b3aef, Word64
0xa3c5c533c566f697, Word64
0x102525942535b14a, Word64
0xab59597959f220b2
  , Word64
0xd084842a8454ae15, Word64
0xc57272d572b7a7e4, Word64
0xec3939e439d5dd72, Word64
0x164c4c2d4c5a6198
  , Word64
0x945e5e655eca3bbc, Word64
0x9f7878fd78e785f0, Word64
0xe53838e038ddd870, Word64
0x988c8c0a8c148605
  , Word64
0x17d1d163d1c6b2bf, Word64
0xe4a5a5aea5410b57, Word64
0xa1e2e2afe2434dd9, Word64
0x4e616199612ff8c2
  , Word64
0x42b3b3f6b3f1457b, Word64
0x342121842115a542, Word64
0x089c9c4a9c94d625, Word64
0xee1e1e781ef0663c
  , Word64
0x6143431143225286, Word64
0xb1c7c73bc776fc93, Word64
0x4ffcfcd7fcb32be5, Word64
0x2404041004201408
  , Word64
0xe351515951b208a2, Word64
0x2599995e99bcc72f, Word64
0x226d6da96d4fc4da, Word64
0x650d0d340d68391a
  , Word64
0x79fafacffa8335e9, Word64
0x69dfdf5bdfb684a3, Word64
0xa97e7ee57ed79bfc, Word64
0x19242490243db448
  , Word64
0xfe3b3bec3bc5d776, Word64
0x9aabab96ab313d4b, Word64
0xf0cece1fce3ed181, Word64
0x9911114411885522
  , Word64
0x838f8f068f0c8903, Word64
0x044e4e254e4a6b9c, Word64
0x66b7b7e6b7d15173, Word64
0xe0ebeb8beb0b60cb
  , Word64
0xc13c3cf03cfdcc78, Word64
0xfd81813e817cbf1f, Word64
0x4094946a94d4fe35, Word64
0x1cf7f7fbf7eb0cf3
  , Word64
0x18b9b9deb9a1676f, Word64
0x8b13134c13985f26, Word64
0x512c2cb02c7d9c58, Word64
0x05d3d36bd3d6b8bb
  , Word64
0x8ce7e7bbe76b5cd3, Word64
0x396e6ea56e57cbdc, Word64
0xaac4c437c46ef395, Word64
0x1b03030c03180f06
  , Word64
0xdc565645568a13ac, Word64
0x5e44440d441a4988, Word64
0xa07f7fe17fdf9efe, Word64
0x88a9a99ea921374f
  , Word64
0x672a2aa82a4d8254, Word64
0x0abbbbd6bbb16d6b, Word64
0x87c1c123c146e29f, Word64
0xf153535153a202a6
  , Word64
0x72dcdc57dcae8ba5, Word64
0x530b0b2c0b582716, Word64
0x019d9d4e9d9cd327, Word64
0x2b6c6cad6c47c1d8
  , Word64
0xa43131c43195f562, Word64
0xf37474cd7487b9e8, Word64
0x15f6f6fff6e309f1, Word64
0x4c464605460a438c
  , Word64
0xa5acac8aac092645, Word64
0xb589891e893c970f, Word64
0xb414145014a04428, Word64
0xbae1e1a3e15b42df
  , Word64
0xa616165816b04e2c, Word64
0xf73a3ae83acdd274, Word64
0x066969b9696fd0d2, Word64
0x4109092409482d12
  , Word64
0xd77070dd70a7ade0, Word64
0x6fb6b6e2b6d95471, Word64
0x1ed0d067d0ceb7bd, Word64
0xd6eded93ed3b7ec7
  , Word64
0xe2cccc17cc2edb85, Word64
0x68424215422a5784, Word64
0x2c98985a98b4c22d, Word64
0xeda4a4aaa4490e55
  , Word64
0x752828a0285d8850, Word64
0x865c5c6d5cda31b8, Word64
0x6bf8f8c7f8933fed, Word64
0xc28686228644a411
  ]

_c2 :: [Word64]
_c2 = [
    Word64
0x30d818186018c078, Word64
0x462623238c2305af, Word64
0x91b8c6c63fc67ef9, Word64
0xcdfbe8e887e8136f
  , Word64
0x13cb878726874ca1, Word64
0x6d11b8b8dab8a962, Word64
0x0209010104010805, Word64
0x9e0d4f4f214f426e
  , Word64
0x6c9b3636d836adee, Word64
0x51ffa6a6a2a65904, Word64
0xb90cd2d26fd2debd, Word64
0xf70ef5f5f3f5fb06
  , Word64
0xf2967979f979ef80, Word64
0xde306f6fa16f5fce, Word64
0x3f6d91917e91fcef, Word64
0xa4f852525552aa07
  , Word64
0xc04760609d6027fd, Word64
0x6535bcbccabc8976, Word64
0x2b379b9b569baccd, Word64
0x018a8e8e028e048c
  , Word64
0x5bd2a3a3b6a37115, Word64
0x186c0c0c300c603c, Word64
0xf6847b7bf17bff8a, Word64
0x6a803535d435b5e1
  , Word64
0x3af51d1d741de869, Word64
0xddb3e0e0a7e05347, Word64
0xb321d7d77bd7f6ac, Word64
0x999cc2c22fc25eed
  , Word64
0x5c432e2eb82e6d96, Word64
0x96294b4b314b627a, Word64
0xe15dfefedffea321, Word64
0xaed5575741578216
  , Word64
0x2abd15155415a841, Word64
0xeee87777c1779fb6, Word64
0x6e923737dc37a5eb, Word64
0xd79ee5e5b3e57b56
  , Word64
0x23139f9f469f8cd9, Word64
0xfd23f0f0e7f0d317, Word64
0x94204a4a354a6a7f, Word64
0xa944dada4fda9e95
  , Word64
0xb0a258587d58fa25, Word64
0x8fcfc9c903c906ca, Word64
0x527c2929a429558d, Word64
0x145a0a0a280a5022
  , Word64
0x7f50b1b1feb1e14f, Word64
0x5dc9a0a0baa0691a, Word64
0xd6146b6bb16b7fda, Word64
0x17d985852e855cab
  , Word64
0x673cbdbdcebd8173, Word64
0xba8f5d5d695dd234, Word64
0x2090101040108050, Word64
0xf507f4f4f7f4f303
  , Word64
0x8bddcbcb0bcb16c0, Word64
0x7cd33e3ef83eedc6, Word64
0x0a2d050514052811, Word64
0xce78676781671fe6
  , Word64
0xd597e4e4b7e47353, Word64
0x4e0227279c2725bb, Word64
0x8273414119413258, Word64
0x0ba78b8b168b2c9d
  , Word64
0x53f6a7a7a6a75101, Word64
0xfab27d7de97dcf94, Word64
0x374995956e95dcfb, Word64
0xad56d8d847d88e9f
  , Word64
0xeb70fbfbcbfb8b30, Word64
0xc1cdeeee9fee2371, Word64
0xf8bb7c7ced7cc791, Word64
0xcc716666856617e3
  , Word64
0xa77bdddd53dda68e, Word64
0x2eaf17175c17b84b, Word64
0x8e45474701470246, Word64
0x211a9e9e429e84dc
  , Word64
0x89d4caca0fca1ec5, Word64
0x5a582d2db42d7599, Word64
0x632ebfbfc6bf9179, Word64
0x0e3f07071c07381b
  , Word64
0x47acadad8ead0123, Word64
0xb4b05a5a755aea2f, Word64
0x1bef838336836cb5, Word64
0x66b63333cc3385ff
  , Word64
0xc65c636391633ff2, Word64
0x041202020802100a, Word64
0x4993aaaa92aa3938, Word64
0xe2de7171d971afa8
  , Word64
0x8dc6c8c807c80ecf, Word64
0x32d119196419c87d, Word64
0x923b494939497270, Word64
0xaf5fd9d943d9869a
  , Word64
0xf931f2f2eff2c31d, Word64
0xdba8e3e3abe34b48, Word64
0xb6b95b5b715be22a, Word64
0x0dbc88881a883492
  , Word64
0x293e9a9a529aa4c8, Word64
0x4c0b262698262dbe, Word64
0x64bf3232c8328dfa, Word64
0x7d59b0b0fab0e94a
  , Word64
0xcff2e9e983e91b6a, Word64
0x1e770f0f3c0f7833, Word64
0xb733d5d573d5e6a6, Word64
0x1df480803a8074ba
  , Word64
0x6127bebec2be997c, Word64
0x87ebcdcd13cd26de, Word64
0x68893434d034bde4, Word64
0x903248483d487a75
  , Word64
0xe354ffffdbffab24, Word64
0xf48d7a7af57af78f, Word64
0x3d6490907a90f4ea, Word64
0xbe9d5f5f615fc23e
  , Word64
0x403d202080201da0, Word64
0xd00f6868bd6867d5, Word64
0x34ca1a1a681ad072, Word64
0x41b7aeae82ae192c
  , Word64
0x757db4b4eab4c95e, Word64
0xa8ce54544d549a19, Word64
0x3b7f93937693ece5, Word64
0x442f222288220daa
  , Word64
0xc86364648d6407e9, Word64
0xff2af1f1e3f1db12, Word64
0xe6cc7373d173bfa2, Word64
0x248212124812905a
  , Word64
0x807a40401d403a5d, Word64
0x1048080820084028, Word64
0x9b95c3c32bc356e8, Word64
0xc5dfecec97ec337b
  , Word64
0xab4ddbdb4bdb9690, Word64
0x5fc0a1a1bea1611f, Word64
0x07918d8d0e8d1c83, Word64
0x7ac83d3df43df5c9
  , Word64
0x335b97976697ccf1, Word64
0x0000000000000000, Word64
0x83f9cfcf1bcf36d4, Word64
0x566e2b2bac2b4587
  , Word64
0xece17676c57697b3, Word64
0x19e68282328264b0, Word64
0xb128d6d67fd6fea9, Word64
0x36c31b1b6c1bd877
  , Word64
0x7774b5b5eeb5c15b, Word64
0x43beafaf86af1129, Word64
0xd41d6a6ab56a77df, Word64
0xa0ea50505d50ba0d
  , Word64
0x8a5745450945124c, Word64
0xfb38f3f3ebf3cb18, Word64
0x60ad3030c0309df0, Word64
0xc3c4efef9bef2b74
  , Word64
0x7eda3f3ffc3fe5c3, Word64
0xaac755554955921c, Word64
0x59dba2a2b2a27910, Word64
0xc9e9eaea8fea0365
  , Word64
0xca6a656589650fec, Word64
0x6903babad2bab968, Word64
0x5e4a2f2fbc2f6593, Word64
0x9d8ec0c027c04ee7
  , Word64
0xa160dede5fdebe81, Word64
0x38fc1c1c701ce06c, Word64
0xe746fdfdd3fdbb2e, Word64
0x9a1f4d4d294d5264
  , Word64
0x397692927292e4e0, Word64
0xeafa7575c9758fbc, Word64
0x0c3606061806301e, Word64
0x09ae8a8a128a2498
  , Word64
0x794bb2b2f2b2f940, Word64
0xd185e6e6bfe66359, Word64
0x1c7e0e0e380e7036, Word64
0x3ee71f1f7c1ff863
  , Word64
0xc4556262956237f7, Word64
0xb53ad4d477d4eea3, Word64
0x4d81a8a89aa82932, Word64
0x315296966296c4f4
  , Word64
0xef62f9f9c3f99b3a, Word64
0x97a3c5c533c566f6, Word64
0x4a102525942535b1, Word64
0xb2ab59597959f220
  , Word64
0x15d084842a8454ae, Word64
0xe4c57272d572b7a7, Word64
0x72ec3939e439d5dd, Word64
0x98164c4c2d4c5a61
  , Word64
0xbc945e5e655eca3b, Word64
0xf09f7878fd78e785, Word64
0x70e53838e038ddd8, Word64
0x05988c8c0a8c1486
  , Word64
0xbf17d1d163d1c6b2, Word64
0x57e4a5a5aea5410b, Word64
0xd9a1e2e2afe2434d, Word64
0xc24e616199612ff8
  , Word64
0x7b42b3b3f6b3f145, Word64
0x42342121842115a5, Word64
0x25089c9c4a9c94d6, Word64
0x3cee1e1e781ef066
  , Word64
0x8661434311432252, Word64
0x93b1c7c73bc776fc, Word64
0xe54ffcfcd7fcb32b, Word64
0x0824040410042014
  , Word64
0xa2e351515951b208, Word64
0x2f2599995e99bcc7, Word64
0xda226d6da96d4fc4, Word64
0x1a650d0d340d6839
  , Word64
0xe979fafacffa8335, Word64
0xa369dfdf5bdfb684, Word64
0xfca97e7ee57ed79b, Word64
0x4819242490243db4
  , Word64
0x76fe3b3bec3bc5d7, Word64
0x4b9aabab96ab313d, Word64
0x81f0cece1fce3ed1, Word64
0x2299111144118855
  , Word64
0x03838f8f068f0c89, Word64
0x9c044e4e254e4a6b, Word64
0x7366b7b7e6b7d151, Word64
0xcbe0ebeb8beb0b60
  , Word64
0x78c13c3cf03cfdcc, Word64
0x1ffd81813e817cbf, Word64
0x354094946a94d4fe, Word64
0xf31cf7f7fbf7eb0c
  , Word64
0x6f18b9b9deb9a167, Word64
0x268b13134c13985f, Word64
0x58512c2cb02c7d9c, Word64
0xbb05d3d36bd3d6b8
  , Word64
0xd38ce7e7bbe76b5c, Word64
0xdc396e6ea56e57cb, Word64
0x95aac4c437c46ef3, Word64
0x061b03030c03180f
  , Word64
0xacdc565645568a13, Word64
0x885e44440d441a49, Word64
0xfea07f7fe17fdf9e, Word64
0x4f88a9a99ea92137
  , Word64
0x54672a2aa82a4d82, Word64
0x6b0abbbbd6bbb16d, Word64
0x9f87c1c123c146e2, Word64
0xa6f153535153a202
  , Word64
0xa572dcdc57dcae8b, Word64
0x16530b0b2c0b5827, Word64
0x27019d9d4e9d9cd3, Word64
0xd82b6c6cad6c47c1
  , Word64
0x62a43131c43195f5, Word64
0xe8f37474cd7487b9, Word64
0xf115f6f6fff6e309, Word64
0x8c4c464605460a43
  , Word64
0x45a5acac8aac0926, Word64
0x0fb589891e893c97, Word64
0x28b414145014a044, Word64
0xdfbae1e1a3e15b42
  , Word64
0x2ca616165816b04e, Word64
0x74f73a3ae83acdd2, Word64
0xd2066969b9696fd0, Word64
0x124109092409482d
  , Word64
0xe0d77070dd70a7ad, Word64
0x716fb6b6e2b6d954, Word64
0xbd1ed0d067d0ceb7, Word64
0xc7d6eded93ed3b7e
  , Word64
0x85e2cccc17cc2edb, Word64
0x8468424215422a57, Word64
0x2d2c98985a98b4c2, Word64
0x55eda4a4aaa4490e
  , Word64
0x50752828a0285d88, Word64
0xb8865c5c6d5cda31, Word64
0xed6bf8f8c7f8933f, Word64
0x11c28686228644a4
  ]

_c3 :: [Word64]
_c3 = [
    Word64
0x7830d818186018c0, Word64
0xaf462623238c2305, Word64
0xf991b8c6c63fc67e, Word64
0x6fcdfbe8e887e813
  , Word64
0xa113cb878726874c, Word64
0x626d11b8b8dab8a9, Word64
0x0502090101040108, Word64
0x6e9e0d4f4f214f42
  , Word64
0xee6c9b3636d836ad, Word64
0x0451ffa6a6a2a659, Word64
0xbdb90cd2d26fd2de, Word64
0x06f70ef5f5f3f5fb
  , Word64
0x80f2967979f979ef, Word64
0xcede306f6fa16f5f, Word64
0xef3f6d91917e91fc, Word64
0x07a4f852525552aa
  , Word64
0xfdc04760609d6027, Word64
0x766535bcbccabc89, Word64
0xcd2b379b9b569bac, Word64
0x8c018a8e8e028e04
  , Word64
0x155bd2a3a3b6a371, Word64
0x3c186c0c0c300c60, Word64
0x8af6847b7bf17bff, Word64
0xe16a803535d435b5
  , Word64
0x693af51d1d741de8, Word64
0x47ddb3e0e0a7e053, Word64
0xacb321d7d77bd7f6, Word64
0xed999cc2c22fc25e
  , Word64
0x965c432e2eb82e6d, Word64
0x7a96294b4b314b62, Word64
0x21e15dfefedffea3, Word64
0x16aed55757415782
  , Word64
0x412abd15155415a8, Word64
0xb6eee87777c1779f, Word64
0xeb6e923737dc37a5, Word64
0x56d79ee5e5b3e57b
  , Word64
0xd923139f9f469f8c, Word64
0x17fd23f0f0e7f0d3, Word64
0x7f94204a4a354a6a, Word64
0x95a944dada4fda9e
  , Word64
0x25b0a258587d58fa, Word64
0xca8fcfc9c903c906, Word64
0x8d527c2929a42955, Word64
0x22145a0a0a280a50
  , Word64
0x4f7f50b1b1feb1e1, Word64
0x1a5dc9a0a0baa069, Word64
0xdad6146b6bb16b7f, Word64
0xab17d985852e855c
  , Word64
0x73673cbdbdcebd81, Word64
0x34ba8f5d5d695dd2, Word64
0x5020901010401080, Word64
0x03f507f4f4f7f4f3
  , Word64
0xc08bddcbcb0bcb16, Word64
0xc67cd33e3ef83eed, Word64
0x110a2d0505140528, Word64
0xe6ce78676781671f
  , Word64
0x53d597e4e4b7e473, Word64
0xbb4e0227279c2725, Word64
0x5882734141194132, Word64
0x9d0ba78b8b168b2c
  , Word64
0x0153f6a7a7a6a751, Word64
0x94fab27d7de97dcf, Word64
0xfb374995956e95dc, Word64
0x9fad56d8d847d88e
  , Word64
0x30eb70fbfbcbfb8b, Word64
0x71c1cdeeee9fee23, Word64
0x91f8bb7c7ced7cc7, Word64
0xe3cc716666856617
  , Word64
0x8ea77bdddd53dda6, Word64
0x4b2eaf17175c17b8, Word64
0x468e454747014702, Word64
0xdc211a9e9e429e84
  , Word64
0xc589d4caca0fca1e, Word64
0x995a582d2db42d75, Word64
0x79632ebfbfc6bf91, Word64
0x1b0e3f07071c0738
  , Word64
0x2347acadad8ead01, Word64
0x2fb4b05a5a755aea, Word64
0xb51bef838336836c, Word64
0xff66b63333cc3385
  , Word64
0xf2c65c636391633f, Word64
0x0a04120202080210, Word64
0x384993aaaa92aa39, Word64
0xa8e2de7171d971af
  , Word64
0xcf8dc6c8c807c80e, Word64
0x7d32d119196419c8, Word64
0x70923b4949394972, Word64
0x9aaf5fd9d943d986
  , Word64
0x1df931f2f2eff2c3, Word64
0x48dba8e3e3abe34b, Word64
0x2ab6b95b5b715be2, Word64
0x920dbc88881a8834
  , Word64
0xc8293e9a9a529aa4, Word64
0xbe4c0b262698262d, Word64
0xfa64bf3232c8328d, Word64
0x4a7d59b0b0fab0e9
  , Word64
0x6acff2e9e983e91b, Word64
0x331e770f0f3c0f78, Word64
0xa6b733d5d573d5e6, Word64
0xba1df480803a8074
  , Word64
0x7c6127bebec2be99, Word64
0xde87ebcdcd13cd26, Word64
0xe468893434d034bd, Word64
0x75903248483d487a
  , Word64
0x24e354ffffdbffab, Word64
0x8ff48d7a7af57af7, Word64
0xea3d6490907a90f4, Word64
0x3ebe9d5f5f615fc2
  , Word64
0xa0403d202080201d, Word64
0xd5d00f6868bd6867, Word64
0x7234ca1a1a681ad0, Word64
0x2c41b7aeae82ae19
  , Word64
0x5e757db4b4eab4c9, Word64
0x19a8ce54544d549a, Word64
0xe53b7f93937693ec, Word64
0xaa442f222288220d
  , Word64
0xe9c86364648d6407, Word64
0x12ff2af1f1e3f1db, Word64
0xa2e6cc7373d173bf, Word64
0x5a24821212481290
  , Word64
0x5d807a40401d403a, Word64
0x2810480808200840, Word64
0xe89b95c3c32bc356, Word64
0x7bc5dfecec97ec33
  , Word64
0x90ab4ddbdb4bdb96, Word64
0x1f5fc0a1a1bea161, Word64
0x8307918d8d0e8d1c, Word64
0xc97ac83d3df43df5
  , Word64
0xf1335b97976697cc, Word64
0x0000000000000000, Word64
0xd483f9cfcf1bcf36, Word64
0x87566e2b2bac2b45
  , Word64
0xb3ece17676c57697, Word64
0xb019e68282328264, Word64
0xa9b128d6d67fd6fe, Word64
0x7736c31b1b6c1bd8
  , Word64
0x5b7774b5b5eeb5c1, Word64
0x2943beafaf86af11, Word64
0xdfd41d6a6ab56a77, Word64
0x0da0ea50505d50ba
  , Word64
0x4c8a574545094512, Word64
0x18fb38f3f3ebf3cb, Word64
0xf060ad3030c0309d, Word64
0x74c3c4efef9bef2b
  , Word64
0xc37eda3f3ffc3fe5, Word64
0x1caac75555495592, Word64
0x1059dba2a2b2a279, Word64
0x65c9e9eaea8fea03
  , Word64
0xecca6a656589650f, Word64
0x686903babad2bab9, Word64
0x935e4a2f2fbc2f65, Word64
0xe79d8ec0c027c04e
  , Word64
0x81a160dede5fdebe, Word64
0x6c38fc1c1c701ce0, Word64
0x2ee746fdfdd3fdbb, Word64
0x649a1f4d4d294d52
  , Word64
0xe0397692927292e4, Word64
0xbceafa7575c9758f, Word64
0x1e0c360606180630, Word64
0x9809ae8a8a128a24
  , Word64
0x40794bb2b2f2b2f9, Word64
0x59d185e6e6bfe663, Word64
0x361c7e0e0e380e70, Word64
0x633ee71f1f7c1ff8
  , Word64
0xf7c4556262956237, Word64
0xa3b53ad4d477d4ee, Word64
0x324d81a8a89aa829, Word64
0xf4315296966296c4
  , Word64
0x3aef62f9f9c3f99b, Word64
0xf697a3c5c533c566, Word64
0xb14a102525942535, Word64
0x20b2ab59597959f2
  , Word64
0xae15d084842a8454, Word64
0xa7e4c57272d572b7, Word64
0xdd72ec3939e439d5, Word64
0x6198164c4c2d4c5a
  , Word64
0x3bbc945e5e655eca, Word64
0x85f09f7878fd78e7, Word64
0xd870e53838e038dd, Word64
0x8605988c8c0a8c14
  , Word64
0xb2bf17d1d163d1c6, Word64
0x0b57e4a5a5aea541, Word64
0x4dd9a1e2e2afe243, Word64
0xf8c24e616199612f
  , Word64
0x457b42b3b3f6b3f1, Word64
0xa542342121842115, Word64
0xd625089c9c4a9c94, Word64
0x663cee1e1e781ef0
  , Word64
0x5286614343114322, Word64
0xfc93b1c7c73bc776, Word64
0x2be54ffcfcd7fcb3, Word64
0x1408240404100420
  , Word64
0x08a2e351515951b2, Word64
0xc72f2599995e99bc, Word64
0xc4da226d6da96d4f, Word64
0x391a650d0d340d68
  , Word64
0x35e979fafacffa83, Word64
0x84a369dfdf5bdfb6, Word64
0x9bfca97e7ee57ed7, Word64
0xb44819242490243d
  , Word64
0xd776fe3b3bec3bc5, Word64
0x3d4b9aabab96ab31, Word64
0xd181f0cece1fce3e, Word64
0x5522991111441188
  , Word64
0x8903838f8f068f0c, Word64
0x6b9c044e4e254e4a, Word64
0x517366b7b7e6b7d1, Word64
0x60cbe0ebeb8beb0b
  , Word64
0xcc78c13c3cf03cfd, Word64
0xbf1ffd81813e817c, Word64
0xfe354094946a94d4, Word64
0x0cf31cf7f7fbf7eb
  , Word64
0x676f18b9b9deb9a1, Word64
0x5f268b13134c1398, Word64
0x9c58512c2cb02c7d, Word64
0xb8bb05d3d36bd3d6
  , Word64
0x5cd38ce7e7bbe76b, Word64
0xcbdc396e6ea56e57, Word64
0xf395aac4c437c46e, Word64
0x0f061b03030c0318
  , Word64
0x13acdc565645568a, Word64
0x49885e44440d441a, Word64
0x9efea07f7fe17fdf, Word64
0x374f88a9a99ea921
  , Word64
0x8254672a2aa82a4d, Word64
0x6d6b0abbbbd6bbb1, Word64
0xe29f87c1c123c146, Word64
0x02a6f153535153a2
  , Word64
0x8ba572dcdc57dcae, Word64
0x2716530b0b2c0b58, Word64
0xd327019d9d4e9d9c, Word64
0xc1d82b6c6cad6c47
  , Word64
0xf562a43131c43195, Word64
0xb9e8f37474cd7487, Word64
0x09f115f6f6fff6e3, Word64
0x438c4c464605460a
  , Word64
0x2645a5acac8aac09, Word64
0x970fb589891e893c, Word64
0x4428b414145014a0, Word64
0x42dfbae1e1a3e15b
  , Word64
0x4e2ca616165816b0, Word64
0xd274f73a3ae83acd, Word64
0xd0d2066969b9696f, Word64
0x2d12410909240948
  , Word64
0xade0d77070dd70a7, Word64
0x54716fb6b6e2b6d9, Word64
0xb7bd1ed0d067d0ce, Word64
0x7ec7d6eded93ed3b
  , Word64
0xdb85e2cccc17cc2e, Word64
0x578468424215422a, Word64
0xc22d2c98985a98b4, Word64
0x0e55eda4a4aaa449
  , Word64
0x8850752828a0285d, Word64
0x31b8865c5c6d5cda, Word64
0x3fed6bf8f8c7f893, Word64
0xa411c28686228644
  ]

_c4 :: [Word64]
_c4 = [
    Word64
0xc07830d818186018, Word64
0x05af462623238c23, Word64
0x7ef991b8c6c63fc6, Word64
0x136fcdfbe8e887e8
  , Word64
0x4ca113cb87872687, Word64
0xa9626d11b8b8dab8, Word64
0x0805020901010401, Word64
0x426e9e0d4f4f214f
  , Word64
0xadee6c9b3636d836, Word64
0x590451ffa6a6a2a6, Word64
0xdebdb90cd2d26fd2, Word64
0xfb06f70ef5f5f3f5
  , Word64
0xef80f2967979f979, Word64
0x5fcede306f6fa16f, Word64
0xfcef3f6d91917e91, Word64
0xaa07a4f852525552
  , Word64
0x27fdc04760609d60, Word64
0x89766535bcbccabc, Word64
0xaccd2b379b9b569b, Word64
0x048c018a8e8e028e
  , Word64
0x71155bd2a3a3b6a3, Word64
0x603c186c0c0c300c, Word64
0xff8af6847b7bf17b, Word64
0xb5e16a803535d435
  , Word64
0xe8693af51d1d741d, Word64
0x5347ddb3e0e0a7e0, Word64
0xf6acb321d7d77bd7, Word64
0x5eed999cc2c22fc2
  , Word64
0x6d965c432e2eb82e, Word64
0x627a96294b4b314b, Word64
0xa321e15dfefedffe, Word64
0x8216aed557574157
  , Word64
0xa8412abd15155415, Word64
0x9fb6eee87777c177, Word64
0xa5eb6e923737dc37, Word64
0x7b56d79ee5e5b3e5
  , Word64
0x8cd923139f9f469f, Word64
0xd317fd23f0f0e7f0, Word64
0x6a7f94204a4a354a, Word64
0x9e95a944dada4fda
  , Word64
0xfa25b0a258587d58, Word64
0x06ca8fcfc9c903c9, Word64
0x558d527c2929a429, Word64
0x5022145a0a0a280a
  , Word64
0xe14f7f50b1b1feb1, Word64
0x691a5dc9a0a0baa0, Word64
0x7fdad6146b6bb16b, Word64
0x5cab17d985852e85
  , Word64
0x8173673cbdbdcebd, Word64
0xd234ba8f5d5d695d, Word64
0x8050209010104010, Word64
0xf303f507f4f4f7f4
  , Word64
0x16c08bddcbcb0bcb, Word64
0xedc67cd33e3ef83e, Word64
0x28110a2d05051405, Word64
0x1fe6ce7867678167
  , Word64
0x7353d597e4e4b7e4, Word64
0x25bb4e0227279c27, Word64
0x3258827341411941, Word64
0x2c9d0ba78b8b168b
  , Word64
0x510153f6a7a7a6a7, Word64
0xcf94fab27d7de97d, Word64
0xdcfb374995956e95, Word64
0x8e9fad56d8d847d8
  , Word64
0x8b30eb70fbfbcbfb, Word64
0x2371c1cdeeee9fee, Word64
0xc791f8bb7c7ced7c, Word64
0x17e3cc7166668566
  , Word64
0xa68ea77bdddd53dd, Word64
0xb84b2eaf17175c17, Word64
0x02468e4547470147, Word64
0x84dc211a9e9e429e
  , Word64
0x1ec589d4caca0fca, Word64
0x75995a582d2db42d, Word64
0x9179632ebfbfc6bf, Word64
0x381b0e3f07071c07
  , Word64
0x012347acadad8ead, Word64
0xea2fb4b05a5a755a, Word64
0x6cb51bef83833683, Word64
0x85ff66b63333cc33
  , Word64
0x3ff2c65c63639163, Word64
0x100a041202020802, Word64
0x39384993aaaa92aa, Word64
0xafa8e2de7171d971
  , Word64
0x0ecf8dc6c8c807c8, Word64
0xc87d32d119196419, Word64
0x7270923b49493949, Word64
0x869aaf5fd9d943d9
  , Word64
0xc31df931f2f2eff2, Word64
0x4b48dba8e3e3abe3, Word64
0xe22ab6b95b5b715b, Word64
0x34920dbc88881a88
  , Word64
0xa4c8293e9a9a529a, Word64
0x2dbe4c0b26269826, Word64
0x8dfa64bf3232c832, Word64
0xe94a7d59b0b0fab0
  , Word64
0x1b6acff2e9e983e9, Word64
0x78331e770f0f3c0f, Word64
0xe6a6b733d5d573d5, Word64
0x74ba1df480803a80
  , Word64
0x997c6127bebec2be, Word64
0x26de87ebcdcd13cd, Word64
0xbde468893434d034, Word64
0x7a75903248483d48
  , Word64
0xab24e354ffffdbff, Word64
0xf78ff48d7a7af57a, Word64
0xf4ea3d6490907a90, Word64
0xc23ebe9d5f5f615f
  , Word64
0x1da0403d20208020, Word64
0x67d5d00f6868bd68, Word64
0xd07234ca1a1a681a, Word64
0x192c41b7aeae82ae
  , Word64
0xc95e757db4b4eab4, Word64
0x9a19a8ce54544d54, Word64
0xece53b7f93937693, Word64
0x0daa442f22228822
  , Word64
0x07e9c86364648d64, Word64
0xdb12ff2af1f1e3f1, Word64
0xbfa2e6cc7373d173, Word64
0x905a248212124812
  , Word64
0x3a5d807a40401d40, Word64
0x4028104808082008, Word64
0x56e89b95c3c32bc3, Word64
0x337bc5dfecec97ec
  , Word64
0x9690ab4ddbdb4bdb, Word64
0x611f5fc0a1a1bea1, Word64
0x1c8307918d8d0e8d, Word64
0xf5c97ac83d3df43d
  , Word64
0xccf1335b97976697, Word64
0x0000000000000000, Word64
0x36d483f9cfcf1bcf, Word64
0x4587566e2b2bac2b
  , Word64
0x97b3ece17676c576, Word64
0x64b019e682823282, Word64
0xfea9b128d6d67fd6, Word64
0xd87736c31b1b6c1b
  , Word64
0xc15b7774b5b5eeb5, Word64
0x112943beafaf86af, Word64
0x77dfd41d6a6ab56a, Word64
0xba0da0ea50505d50
  , Word64
0x124c8a5745450945, Word64
0xcb18fb38f3f3ebf3, Word64
0x9df060ad3030c030, Word64
0x2b74c3c4efef9bef
  , Word64
0xe5c37eda3f3ffc3f, Word64
0x921caac755554955, Word64
0x791059dba2a2b2a2, Word64
0x0365c9e9eaea8fea
  , Word64
0x0fecca6a65658965, Word64
0xb9686903babad2ba, Word64
0x65935e4a2f2fbc2f, Word64
0x4ee79d8ec0c027c0
  , Word64
0xbe81a160dede5fde, Word64
0xe06c38fc1c1c701c, Word64
0xbb2ee746fdfdd3fd, Word64
0x52649a1f4d4d294d
  , Word64
0xe4e0397692927292, Word64
0x8fbceafa7575c975, Word64
0x301e0c3606061806, Word64
0x249809ae8a8a128a
  , Word64
0xf940794bb2b2f2b2, Word64
0x6359d185e6e6bfe6, Word64
0x70361c7e0e0e380e, Word64
0xf8633ee71f1f7c1f
  , Word64
0x37f7c45562629562, Word64
0xeea3b53ad4d477d4, Word64
0x29324d81a8a89aa8, Word64
0xc4f4315296966296
  , Word64
0x9b3aef62f9f9c3f9, Word64
0x66f697a3c5c533c5, Word64
0x35b14a1025259425, Word64
0xf220b2ab59597959
  , Word64
0x54ae15d084842a84, Word64
0xb7a7e4c57272d572, Word64
0xd5dd72ec3939e439, Word64
0x5a6198164c4c2d4c
  , Word64
0xca3bbc945e5e655e, Word64
0xe785f09f7878fd78, Word64
0xddd870e53838e038, Word64
0x148605988c8c0a8c
  , Word64
0xc6b2bf17d1d163d1, Word64
0x410b57e4a5a5aea5, Word64
0x434dd9a1e2e2afe2, Word64
0x2ff8c24e61619961
  , Word64
0xf1457b42b3b3f6b3, Word64
0x15a5423421218421, Word64
0x94d625089c9c4a9c, Word64
0xf0663cee1e1e781e
  , Word64
0x2252866143431143, Word64
0x76fc93b1c7c73bc7, Word64
0xb32be54ffcfcd7fc, Word64
0x2014082404041004
  , Word64
0xb208a2e351515951, Word64
0xbcc72f2599995e99, Word64
0x4fc4da226d6da96d, Word64
0x68391a650d0d340d
  , Word64
0x8335e979fafacffa, Word64
0xb684a369dfdf5bdf, Word64
0xd79bfca97e7ee57e, Word64
0x3db4481924249024
  , Word64
0xc5d776fe3b3bec3b, Word64
0x313d4b9aabab96ab, Word64
0x3ed181f0cece1fce, Word64
0x8855229911114411
  , Word64
0x0c8903838f8f068f, Word64
0x4a6b9c044e4e254e, Word64
0xd1517366b7b7e6b7, Word64
0x0b60cbe0ebeb8beb
  , Word64
0xfdcc78c13c3cf03c, Word64
0x7cbf1ffd81813e81, Word64
0xd4fe354094946a94, Word64
0xeb0cf31cf7f7fbf7
  , Word64
0xa1676f18b9b9deb9, Word64
0x985f268b13134c13, Word64
0x7d9c58512c2cb02c, Word64
0xd6b8bb05d3d36bd3
  , Word64
0x6b5cd38ce7e7bbe7, Word64
0x57cbdc396e6ea56e, Word64
0x6ef395aac4c437c4, Word64
0x180f061b03030c03
  , Word64
0x8a13acdc56564556, Word64
0x1a49885e44440d44, Word64
0xdf9efea07f7fe17f, Word64
0x21374f88a9a99ea9
  , Word64
0x4d8254672a2aa82a, Word64
0xb16d6b0abbbbd6bb, Word64
0x46e29f87c1c123c1, Word64
0xa202a6f153535153
  , Word64
0xae8ba572dcdc57dc, Word64
0x582716530b0b2c0b, Word64
0x9cd327019d9d4e9d, Word64
0x47c1d82b6c6cad6c
  , Word64
0x95f562a43131c431, Word64
0x87b9e8f37474cd74, Word64
0xe309f115f6f6fff6, Word64
0x0a438c4c46460546
  , Word64
0x092645a5acac8aac, Word64
0x3c970fb589891e89, Word64
0xa04428b414145014, Word64
0x5b42dfbae1e1a3e1
  , Word64
0xb04e2ca616165816, Word64
0xcdd274f73a3ae83a, Word64
0x6fd0d2066969b969, Word64
0x482d124109092409
  , Word64
0xa7ade0d77070dd70, Word64
0xd954716fb6b6e2b6, Word64
0xceb7bd1ed0d067d0, Word64
0x3b7ec7d6eded93ed
  , Word64
0x2edb85e2cccc17cc, Word64
0x2a57846842421542, Word64
0xb4c22d2c98985a98, Word64
0x490e55eda4a4aaa4
  , Word64
0x5d8850752828a028, Word64
0xda31b8865c5c6d5c, Word64
0x933fed6bf8f8c7f8, Word64
0x44a411c286862286
  ]

_c5 :: [Word64]
_c5 = [
    Word64
0x18c07830d8181860, Word64
0x2305af462623238c, Word64
0xc67ef991b8c6c63f, Word64
0xe8136fcdfbe8e887
  , Word64
0x874ca113cb878726, Word64
0xb8a9626d11b8b8da, Word64
0x0108050209010104, Word64
0x4f426e9e0d4f4f21
  , Word64
0x36adee6c9b3636d8, Word64
0xa6590451ffa6a6a2, Word64
0xd2debdb90cd2d26f, Word64
0xf5fb06f70ef5f5f3
  , Word64
0x79ef80f2967979f9, Word64
0x6f5fcede306f6fa1, Word64
0x91fcef3f6d91917e, Word64
0x52aa07a4f8525255
  , Word64
0x6027fdc04760609d, Word64
0xbc89766535bcbcca, Word64
0x9baccd2b379b9b56, Word64
0x8e048c018a8e8e02
  , Word64
0xa371155bd2a3a3b6, Word64
0x0c603c186c0c0c30, Word64
0x7bff8af6847b7bf1, Word64
0x35b5e16a803535d4
  , Word64
0x1de8693af51d1d74, Word64
0xe05347ddb3e0e0a7, Word64
0xd7f6acb321d7d77b, Word64
0xc25eed999cc2c22f
  , Word64
0x2e6d965c432e2eb8, Word64
0x4b627a96294b4b31, Word64
0xfea321e15dfefedf, Word64
0x578216aed5575741
  , Word64
0x15a8412abd151554, Word64
0x779fb6eee87777c1, Word64
0x37a5eb6e923737dc, Word64
0xe57b56d79ee5e5b3
  , Word64
0x9f8cd923139f9f46, Word64
0xf0d317fd23f0f0e7, Word64
0x4a6a7f94204a4a35, Word64
0xda9e95a944dada4f
  , Word64
0x58fa25b0a258587d, Word64
0xc906ca8fcfc9c903, Word64
0x29558d527c2929a4, Word64
0x0a5022145a0a0a28
  , Word64
0xb1e14f7f50b1b1fe, Word64
0xa0691a5dc9a0a0ba, Word64
0x6b7fdad6146b6bb1, Word64
0x855cab17d985852e
  , Word64
0xbd8173673cbdbdce, Word64
0x5dd234ba8f5d5d69, Word64
0x1080502090101040, Word64
0xf4f303f507f4f4f7
  , Word64
0xcb16c08bddcbcb0b, Word64
0x3eedc67cd33e3ef8, Word64
0x0528110a2d050514, Word64
0x671fe6ce78676781
  , Word64
0xe47353d597e4e4b7, Word64
0x2725bb4e0227279c, Word64
0x4132588273414119, Word64
0x8b2c9d0ba78b8b16
  , Word64
0xa7510153f6a7a7a6, Word64
0x7dcf94fab27d7de9, Word64
0x95dcfb374995956e, Word64
0xd88e9fad56d8d847
  , Word64
0xfb8b30eb70fbfbcb, Word64
0xee2371c1cdeeee9f, Word64
0x7cc791f8bb7c7ced, Word64
0x6617e3cc71666685
  , Word64
0xdda68ea77bdddd53, Word64
0x17b84b2eaf17175c, Word64
0x4702468e45474701, Word64
0x9e84dc211a9e9e42
  , Word64
0xca1ec589d4caca0f, Word64
0x2d75995a582d2db4, Word64
0xbf9179632ebfbfc6, Word64
0x07381b0e3f07071c
  , Word64
0xad012347acadad8e, Word64
0x5aea2fb4b05a5a75, Word64
0x836cb51bef838336, Word64
0x3385ff66b63333cc
  , Word64
0x633ff2c65c636391, Word64
0x02100a0412020208, Word64
0xaa39384993aaaa92, Word64
0x71afa8e2de7171d9
  , Word64
0xc80ecf8dc6c8c807, Word64
0x19c87d32d1191964, Word64
0x497270923b494939, Word64
0xd9869aaf5fd9d943
  , Word64
0xf2c31df931f2f2ef, Word64
0xe34b48dba8e3e3ab, Word64
0x5be22ab6b95b5b71, Word64
0x8834920dbc88881a
  , Word64
0x9aa4c8293e9a9a52, Word64
0x262dbe4c0b262698, Word64
0x328dfa64bf3232c8, Word64
0xb0e94a7d59b0b0fa
  , Word64
0xe91b6acff2e9e983, Word64
0x0f78331e770f0f3c, Word64
0xd5e6a6b733d5d573, Word64
0x8074ba1df480803a
  , Word64
0xbe997c6127bebec2, Word64
0xcd26de87ebcdcd13, Word64
0x34bde468893434d0, Word64
0x487a75903248483d
  , Word64
0xffab24e354ffffdb, Word64
0x7af78ff48d7a7af5, Word64
0x90f4ea3d6490907a, Word64
0x5fc23ebe9d5f5f61
  , Word64
0x201da0403d202080, Word64
0x6867d5d00f6868bd, Word64
0x1ad07234ca1a1a68, Word64
0xae192c41b7aeae82
  , Word64
0xb4c95e757db4b4ea, Word64
0x549a19a8ce54544d, Word64
0x93ece53b7f939376, Word64
0x220daa442f222288
  , Word64
0x6407e9c86364648d, Word64
0xf1db12ff2af1f1e3, Word64
0x73bfa2e6cc7373d1, Word64
0x12905a2482121248
  , Word64
0x403a5d807a40401d, Word64
0x0840281048080820, Word64
0xc356e89b95c3c32b, Word64
0xec337bc5dfecec97
  , Word64
0xdb9690ab4ddbdb4b, Word64
0xa1611f5fc0a1a1be, Word64
0x8d1c8307918d8d0e, Word64
0x3df5c97ac83d3df4
  , Word64
0x97ccf1335b979766, Word64
0x0000000000000000, Word64
0xcf36d483f9cfcf1b, Word64
0x2b4587566e2b2bac
  , Word64
0x7697b3ece17676c5, Word64
0x8264b019e6828232, Word64
0xd6fea9b128d6d67f, Word64
0x1bd87736c31b1b6c
  , Word64
0xb5c15b7774b5b5ee, Word64
0xaf112943beafaf86, Word64
0x6a77dfd41d6a6ab5, Word64
0x50ba0da0ea50505d
  , Word64
0x45124c8a57454509, Word64
0xf3cb18fb38f3f3eb, Word64
0x309df060ad3030c0, Word64
0xef2b74c3c4efef9b
  , Word64
0x3fe5c37eda3f3ffc, Word64
0x55921caac7555549, Word64
0xa2791059dba2a2b2, Word64
0xea0365c9e9eaea8f
  , Word64
0x650fecca6a656589, Word64
0xbab9686903babad2, Word64
0x2f65935e4a2f2fbc, Word64
0xc04ee79d8ec0c027
  , Word64
0xdebe81a160dede5f, Word64
0x1ce06c38fc1c1c70, Word64
0xfdbb2ee746fdfdd3, Word64
0x4d52649a1f4d4d29
  , Word64
0x92e4e03976929272, Word64
0x758fbceafa7575c9, Word64
0x06301e0c36060618, Word64
0x8a249809ae8a8a12
  , Word64
0xb2f940794bb2b2f2, Word64
0xe66359d185e6e6bf, Word64
0x0e70361c7e0e0e38, Word64
0x1ff8633ee71f1f7c
  , Word64
0x6237f7c455626295, Word64
0xd4eea3b53ad4d477, Word64
0xa829324d81a8a89a, Word64
0x96c4f43152969662
  , Word64
0xf99b3aef62f9f9c3, Word64
0xc566f697a3c5c533, Word64
0x2535b14a10252594, Word64
0x59f220b2ab595979
  , Word64
0x8454ae15d084842a, Word64
0x72b7a7e4c57272d5, Word64
0x39d5dd72ec3939e4, Word64
0x4c5a6198164c4c2d
  , Word64
0x5eca3bbc945e5e65, Word64
0x78e785f09f7878fd, Word64
0x38ddd870e53838e0, Word64
0x8c148605988c8c0a
  , Word64
0xd1c6b2bf17d1d163, Word64
0xa5410b57e4a5a5ae, Word64
0xe2434dd9a1e2e2af, Word64
0x612ff8c24e616199
  , Word64
0xb3f1457b42b3b3f6, Word64
0x2115a54234212184, Word64
0x9c94d625089c9c4a, Word64
0x1ef0663cee1e1e78
  , Word64
0x4322528661434311, Word64
0xc776fc93b1c7c73b, Word64
0xfcb32be54ffcfcd7, Word64
0x0420140824040410
  , Word64
0x51b208a2e3515159, Word64
0x99bcc72f2599995e, Word64
0x6d4fc4da226d6da9, Word64
0x0d68391a650d0d34
  , Word64
0xfa8335e979fafacf, Word64
0xdfb684a369dfdf5b, Word64
0x7ed79bfca97e7ee5, Word64
0x243db44819242490
  , Word64
0x3bc5d776fe3b3bec, Word64
0xab313d4b9aabab96, Word64
0xce3ed181f0cece1f, Word64
0x1188552299111144
  , Word64
0x8f0c8903838f8f06, Word64
0x4e4a6b9c044e4e25, Word64
0xb7d1517366b7b7e6, Word64
0xeb0b60cbe0ebeb8b
  , Word64
0x3cfdcc78c13c3cf0, Word64
0x817cbf1ffd81813e, Word64
0x94d4fe354094946a, Word64
0xf7eb0cf31cf7f7fb
  , Word64
0xb9a1676f18b9b9de, Word64
0x13985f268b13134c, Word64
0x2c7d9c58512c2cb0, Word64
0xd3d6b8bb05d3d36b
  , Word64
0xe76b5cd38ce7e7bb, Word64
0x6e57cbdc396e6ea5, Word64
0xc46ef395aac4c437, Word64
0x03180f061b03030c
  , Word64
0x568a13acdc565645, Word64
0x441a49885e44440d, Word64
0x7fdf9efea07f7fe1, Word64
0xa921374f88a9a99e
  , Word64
0x2a4d8254672a2aa8, Word64
0xbbb16d6b0abbbbd6, Word64
0xc146e29f87c1c123, Word64
0x53a202a6f1535351
  , Word64
0xdcae8ba572dcdc57, Word64
0x0b582716530b0b2c, Word64
0x9d9cd327019d9d4e, Word64
0x6c47c1d82b6c6cad
  , Word64
0x3195f562a43131c4, Word64
0x7487b9e8f37474cd, Word64
0xf6e309f115f6f6ff, Word64
0x460a438c4c464605
  , Word64
0xac092645a5acac8a, Word64
0x893c970fb589891e, Word64
0x14a04428b4141450, Word64
0xe15b42dfbae1e1a3
  , Word64
0x16b04e2ca6161658, Word64
0x3acdd274f73a3ae8, Word64
0x696fd0d2066969b9, Word64
0x09482d1241090924
  , Word64
0x70a7ade0d77070dd, Word64
0xb6d954716fb6b6e2, Word64
0xd0ceb7bd1ed0d067, Word64
0xed3b7ec7d6eded93
  , Word64
0xcc2edb85e2cccc17, Word64
0x422a578468424215, Word64
0x98b4c22d2c98985a, Word64
0xa4490e55eda4a4aa
  , Word64
0x285d8850752828a0, Word64
0x5cda31b8865c5c6d, Word64
0xf8933fed6bf8f8c7, Word64
0x8644a411c2868622
  ]

_c6 :: [Word64]
_c6 = [
    Word64
0x6018c07830d81818, Word64
0x8c2305af46262323, Word64
0x3fc67ef991b8c6c6, Word64
0x87e8136fcdfbe8e8
  , Word64
0x26874ca113cb8787, Word64
0xdab8a9626d11b8b8, Word64
0x0401080502090101, Word64
0x214f426e9e0d4f4f
  , Word64
0xd836adee6c9b3636, Word64
0xa2a6590451ffa6a6, Word64
0x6fd2debdb90cd2d2, Word64
0xf3f5fb06f70ef5f5
  , Word64
0xf979ef80f2967979, Word64
0xa16f5fcede306f6f, Word64
0x7e91fcef3f6d9191, Word64
0x5552aa07a4f85252
  , Word64
0x9d6027fdc0476060, Word64
0xcabc89766535bcbc, Word64
0x569baccd2b379b9b, Word64
0x028e048c018a8e8e
  , Word64
0xb6a371155bd2a3a3, Word64
0x300c603c186c0c0c, Word64
0xf17bff8af6847b7b, Word64
0xd435b5e16a803535
  , Word64
0x741de8693af51d1d, Word64
0xa7e05347ddb3e0e0, Word64
0x7bd7f6acb321d7d7, Word64
0x2fc25eed999cc2c2
  , Word64
0xb82e6d965c432e2e, Word64
0x314b627a96294b4b, Word64
0xdffea321e15dfefe, Word64
0x41578216aed55757
  , Word64
0x5415a8412abd1515, Word64
0xc1779fb6eee87777, Word64
0xdc37a5eb6e923737, Word64
0xb3e57b56d79ee5e5
  , Word64
0x469f8cd923139f9f, Word64
0xe7f0d317fd23f0f0, Word64
0x354a6a7f94204a4a, Word64
0x4fda9e95a944dada
  , Word64
0x7d58fa25b0a25858, Word64
0x03c906ca8fcfc9c9, Word64
0xa429558d527c2929, Word64
0x280a5022145a0a0a
  , Word64
0xfeb1e14f7f50b1b1, Word64
0xbaa0691a5dc9a0a0, Word64
0xb16b7fdad6146b6b, Word64
0x2e855cab17d98585
  , Word64
0xcebd8173673cbdbd, Word64
0x695dd234ba8f5d5d, Word64
0x4010805020901010, Word64
0xf7f4f303f507f4f4
  , Word64
0x0bcb16c08bddcbcb, Word64
0xf83eedc67cd33e3e, Word64
0x140528110a2d0505, Word64
0x81671fe6ce786767
  , Word64
0xb7e47353d597e4e4, Word64
0x9c2725bb4e022727, Word64
0x1941325882734141, Word64
0x168b2c9d0ba78b8b
  , Word64
0xa6a7510153f6a7a7, Word64
0xe97dcf94fab27d7d, Word64
0x6e95dcfb37499595, Word64
0x47d88e9fad56d8d8
  , Word64
0xcbfb8b30eb70fbfb, Word64
0x9fee2371c1cdeeee, Word64
0xed7cc791f8bb7c7c, Word64
0x856617e3cc716666
  , Word64
0x53dda68ea77bdddd, Word64
0x5c17b84b2eaf1717, Word64
0x014702468e454747, Word64
0x429e84dc211a9e9e
  , Word64
0x0fca1ec589d4caca, Word64
0xb42d75995a582d2d, Word64
0xc6bf9179632ebfbf, Word64
0x1c07381b0e3f0707
  , Word64
0x8ead012347acadad, Word64
0x755aea2fb4b05a5a, Word64
0x36836cb51bef8383, Word64
0xcc3385ff66b63333
  , Word64
0x91633ff2c65c6363, Word64
0x0802100a04120202, Word64
0x92aa39384993aaaa, Word64
0xd971afa8e2de7171
  , Word64
0x07c80ecf8dc6c8c8, Word64
0x6419c87d32d11919, Word64
0x39497270923b4949, Word64
0x43d9869aaf5fd9d9
  , Word64
0xeff2c31df931f2f2, Word64
0xabe34b48dba8e3e3, Word64
0x715be22ab6b95b5b, Word64
0x1a8834920dbc8888
  , Word64
0x529aa4c8293e9a9a, Word64
0x98262dbe4c0b2626, Word64
0xc8328dfa64bf3232, Word64
0xfab0e94a7d59b0b0
  , Word64
0x83e91b6acff2e9e9, Word64
0x3c0f78331e770f0f, Word64
0x73d5e6a6b733d5d5, Word64
0x3a8074ba1df48080
  , Word64
0xc2be997c6127bebe, Word64
0x13cd26de87ebcdcd, Word64
0xd034bde468893434, Word64
0x3d487a7590324848
  , Word64
0xdbffab24e354ffff, Word64
0xf57af78ff48d7a7a, Word64
0x7a90f4ea3d649090, Word64
0x615fc23ebe9d5f5f
  , Word64
0x80201da0403d2020, Word64
0xbd6867d5d00f6868, Word64
0x681ad07234ca1a1a, Word64
0x82ae192c41b7aeae
  , Word64
0xeab4c95e757db4b4, Word64
0x4d549a19a8ce5454, Word64
0x7693ece53b7f9393, Word64
0x88220daa442f2222
  , Word64
0x8d6407e9c8636464, Word64
0xe3f1db12ff2af1f1, Word64
0xd173bfa2e6cc7373, Word64
0x4812905a24821212
  , Word64
0x1d403a5d807a4040, Word64
0x2008402810480808, Word64
0x2bc356e89b95c3c3, Word64
0x97ec337bc5dfecec
  , Word64
0x4bdb9690ab4ddbdb, Word64
0xbea1611f5fc0a1a1, Word64
0x0e8d1c8307918d8d, Word64
0xf43df5c97ac83d3d
  , Word64
0x6697ccf1335b9797, Word64
0x0000000000000000, Word64
0x1bcf36d483f9cfcf, Word64
0xac2b4587566e2b2b
  , Word64
0xc57697b3ece17676, Word64
0x328264b019e68282, Word64
0x7fd6fea9b128d6d6, Word64
0x6c1bd87736c31b1b
  , Word64
0xeeb5c15b7774b5b5, Word64
0x86af112943beafaf, Word64
0xb56a77dfd41d6a6a, Word64
0x5d50ba0da0ea5050
  , Word64
0x0945124c8a574545, Word64
0xebf3cb18fb38f3f3, Word64
0xc0309df060ad3030, Word64
0x9bef2b74c3c4efef
  , Word64
0xfc3fe5c37eda3f3f, Word64
0x4955921caac75555, Word64
0xb2a2791059dba2a2, Word64
0x8fea0365c9e9eaea
  , Word64
0x89650fecca6a6565, Word64
0xd2bab9686903baba, Word64
0xbc2f65935e4a2f2f, Word64
0x27c04ee79d8ec0c0
  , Word64
0x5fdebe81a160dede, Word64
0x701ce06c38fc1c1c, Word64
0xd3fdbb2ee746fdfd, Word64
0x294d52649a1f4d4d
  , Word64
0x7292e4e039769292, Word64
0xc9758fbceafa7575, Word64
0x1806301e0c360606, Word64
0x128a249809ae8a8a
  , Word64
0xf2b2f940794bb2b2, Word64
0xbfe66359d185e6e6, Word64
0x380e70361c7e0e0e, Word64
0x7c1ff8633ee71f1f
  , Word64
0x956237f7c4556262, Word64
0x77d4eea3b53ad4d4, Word64
0x9aa829324d81a8a8, Word64
0x6296c4f431529696
  , Word64
0xc3f99b3aef62f9f9, Word64
0x33c566f697a3c5c5, Word64
0x942535b14a102525, Word64
0x7959f220b2ab5959
  , Word64
0x2a8454ae15d08484, Word64
0xd572b7a7e4c57272, Word64
0xe439d5dd72ec3939, Word64
0x2d4c5a6198164c4c
  , Word64
0x655eca3bbc945e5e, Word64
0xfd78e785f09f7878, Word64
0xe038ddd870e53838, Word64
0x0a8c148605988c8c
  , Word64
0x63d1c6b2bf17d1d1, Word64
0xaea5410b57e4a5a5, Word64
0xafe2434dd9a1e2e2, Word64
0x99612ff8c24e6161
  , Word64
0xf6b3f1457b42b3b3, Word64
0x842115a542342121, Word64
0x4a9c94d625089c9c, Word64
0x781ef0663cee1e1e
  , Word64
0x1143225286614343, Word64
0x3bc776fc93b1c7c7, Word64
0xd7fcb32be54ffcfc, Word64
0x1004201408240404
  , Word64
0x5951b208a2e35151, Word64
0x5e99bcc72f259999, Word64
0xa96d4fc4da226d6d, Word64
0x340d68391a650d0d
  , Word64
0xcffa8335e979fafa, Word64
0x5bdfb684a369dfdf, Word64
0xe57ed79bfca97e7e, Word64
0x90243db448192424
  , Word64
0xec3bc5d776fe3b3b, Word64
0x96ab313d4b9aabab, Word64
0x1fce3ed181f0cece, Word64
0x4411885522991111
  , Word64
0x068f0c8903838f8f, Word64
0x254e4a6b9c044e4e, Word64
0xe6b7d1517366b7b7, Word64
0x8beb0b60cbe0ebeb
  , Word64
0xf03cfdcc78c13c3c, Word64
0x3e817cbf1ffd8181, Word64
0x6a94d4fe35409494, Word64
0xfbf7eb0cf31cf7f7
  , Word64
0xdeb9a1676f18b9b9, Word64
0x4c13985f268b1313, Word64
0xb02c7d9c58512c2c, Word64
0x6bd3d6b8bb05d3d3
  , Word64
0xbbe76b5cd38ce7e7, Word64
0xa56e57cbdc396e6e, Word64
0x37c46ef395aac4c4, Word64
0x0c03180f061b0303
  , Word64
0x45568a13acdc5656, Word64
0x0d441a49885e4444, Word64
0xe17fdf9efea07f7f, Word64
0x9ea921374f88a9a9
  , Word64
0xa82a4d8254672a2a, Word64
0xd6bbb16d6b0abbbb, Word64
0x23c146e29f87c1c1, Word64
0x5153a202a6f15353
  , Word64
0x57dcae8ba572dcdc, Word64
0x2c0b582716530b0b, Word64
0x4e9d9cd327019d9d, Word64
0xad6c47c1d82b6c6c
  , Word64
0xc43195f562a43131, Word64
0xcd7487b9e8f37474, Word64
0xfff6e309f115f6f6, Word64
0x05460a438c4c4646
  , Word64
0x8aac092645a5acac, Word64
0x1e893c970fb58989, Word64
0x5014a04428b41414, Word64
0xa3e15b42dfbae1e1
  , Word64
0x5816b04e2ca61616, Word64
0xe83acdd274f73a3a, Word64
0xb9696fd0d2066969, Word64
0x2409482d12410909
  , Word64
0xdd70a7ade0d77070, Word64
0xe2b6d954716fb6b6, Word64
0x67d0ceb7bd1ed0d0, Word64
0x93ed3b7ec7d6eded
  , Word64
0x17cc2edb85e2cccc, Word64
0x15422a5784684242, Word64
0x5a98b4c22d2c9898, Word64
0xaaa4490e55eda4a4
  , Word64
0xa0285d8850752828, Word64
0x6d5cda31b8865c5c, Word64
0xc7f8933fed6bf8f8, Word64
0x228644a411c28686
  ]

_c7 :: [Word64]
_c7 = [
    Word64
0x186018c07830d818, Word64
0x238c2305af462623, Word64
0xc63fc67ef991b8c6, Word64
0xe887e8136fcdfbe8
  , Word64
0x8726874ca113cb87, Word64
0xb8dab8a9626d11b8, Word64
0x0104010805020901, Word64
0x4f214f426e9e0d4f
  , Word64
0x36d836adee6c9b36, Word64
0xa6a2a6590451ffa6, Word64
0xd26fd2debdb90cd2, Word64
0xf5f3f5fb06f70ef5
  , Word64
0x79f979ef80f29679, Word64
0x6fa16f5fcede306f, Word64
0x917e91fcef3f6d91, Word64
0x525552aa07a4f852
  , Word64
0x609d6027fdc04760, Word64
0xbccabc89766535bc, Word64
0x9b569baccd2b379b, Word64
0x8e028e048c018a8e
  , Word64
0xa3b6a371155bd2a3, Word64
0x0c300c603c186c0c, Word64
0x7bf17bff8af6847b, Word64
0x35d435b5e16a8035
  , Word64
0x1d741de8693af51d, Word64
0xe0a7e05347ddb3e0, Word64
0xd77bd7f6acb321d7, Word64
0xc22fc25eed999cc2
  , Word64
0x2eb82e6d965c432e, Word64
0x4b314b627a96294b, Word64
0xfedffea321e15dfe, Word64
0x5741578216aed557
  , Word64
0x155415a8412abd15, Word64
0x77c1779fb6eee877, Word64
0x37dc37a5eb6e9237, Word64
0xe5b3e57b56d79ee5
  , Word64
0x9f469f8cd923139f, Word64
0xf0e7f0d317fd23f0, Word64
0x4a354a6a7f94204a, Word64
0xda4fda9e95a944da
  , Word64
0x587d58fa25b0a258, Word64
0xc903c906ca8fcfc9, Word64
0x29a429558d527c29, Word64
0x0a280a5022145a0a
  , Word64
0xb1feb1e14f7f50b1, Word64
0xa0baa0691a5dc9a0, Word64
0x6bb16b7fdad6146b, Word64
0x852e855cab17d985
  , Word64
0xbdcebd8173673cbd, Word64
0x5d695dd234ba8f5d, Word64
0x1040108050209010, Word64
0xf4f7f4f303f507f4
  , Word64
0xcb0bcb16c08bddcb, Word64
0x3ef83eedc67cd33e, Word64
0x05140528110a2d05, Word64
0x6781671fe6ce7867
  , Word64
0xe4b7e47353d597e4, Word64
0x279c2725bb4e0227, Word64
0x4119413258827341, Word64
0x8b168b2c9d0ba78b
  , Word64
0xa7a6a7510153f6a7, Word64
0x7de97dcf94fab27d, Word64
0x956e95dcfb374995, Word64
0xd847d88e9fad56d8
  , Word64
0xfbcbfb8b30eb70fb, Word64
0xee9fee2371c1cdee, Word64
0x7ced7cc791f8bb7c, Word64
0x66856617e3cc7166
  , Word64
0xdd53dda68ea77bdd, Word64
0x175c17b84b2eaf17, Word64
0x47014702468e4547, Word64
0x9e429e84dc211a9e
  , Word64
0xca0fca1ec589d4ca, Word64
0x2db42d75995a582d, Word64
0xbfc6bf9179632ebf, Word64
0x071c07381b0e3f07
  , Word64
0xad8ead012347acad, Word64
0x5a755aea2fb4b05a, Word64
0x8336836cb51bef83, Word64
0x33cc3385ff66b633
  , Word64
0x6391633ff2c65c63, Word64
0x020802100a041202, Word64
0xaa92aa39384993aa, Word64
0x71d971afa8e2de71
  , Word64
0xc807c80ecf8dc6c8, Word64
0x196419c87d32d119, Word64
0x4939497270923b49, Word64
0xd943d9869aaf5fd9
  , Word64
0xf2eff2c31df931f2, Word64
0xe3abe34b48dba8e3, Word64
0x5b715be22ab6b95b, Word64
0x881a8834920dbc88
  , Word64
0x9a529aa4c8293e9a, Word64
0x2698262dbe4c0b26, Word64
0x32c8328dfa64bf32, Word64
0xb0fab0e94a7d59b0
  , Word64
0xe983e91b6acff2e9, Word64
0x0f3c0f78331e770f, Word64
0xd573d5e6a6b733d5, Word64
0x803a8074ba1df480
  , Word64
0xbec2be997c6127be, Word64
0xcd13cd26de87ebcd, Word64
0x34d034bde4688934, Word64
0x483d487a75903248
  , Word64
0xffdbffab24e354ff, Word64
0x7af57af78ff48d7a, Word64
0x907a90f4ea3d6490, Word64
0x5f615fc23ebe9d5f
  , Word64
0x2080201da0403d20, Word64
0x68bd6867d5d00f68, Word64
0x1a681ad07234ca1a, Word64
0xae82ae192c41b7ae
  , Word64
0xb4eab4c95e757db4, Word64
0x544d549a19a8ce54, Word64
0x937693ece53b7f93, Word64
0x2288220daa442f22
  , Word64
0x648d6407e9c86364, Word64
0xf1e3f1db12ff2af1, Word64
0x73d173bfa2e6cc73, Word64
0x124812905a248212
  , Word64
0x401d403a5d807a40, Word64
0x0820084028104808, Word64
0xc32bc356e89b95c3, Word64
0xec97ec337bc5dfec
  , Word64
0xdb4bdb9690ab4ddb, Word64
0xa1bea1611f5fc0a1, Word64
0x8d0e8d1c8307918d, Word64
0x3df43df5c97ac83d
  , Word64
0x976697ccf1335b97, Word64
0x0000000000000000, Word64
0xcf1bcf36d483f9cf, Word64
0x2bac2b4587566e2b
  , Word64
0x76c57697b3ece176, Word64
0x82328264b019e682, Word64
0xd67fd6fea9b128d6, Word64
0x1b6c1bd87736c31b
  , Word64
0xb5eeb5c15b7774b5, Word64
0xaf86af112943beaf, Word64
0x6ab56a77dfd41d6a, Word64
0x505d50ba0da0ea50
  , Word64
0x450945124c8a5745, Word64
0xf3ebf3cb18fb38f3, Word64
0x30c0309df060ad30, Word64
0xef9bef2b74c3c4ef
  , Word64
0x3ffc3fe5c37eda3f, Word64
0x554955921caac755, Word64
0xa2b2a2791059dba2, Word64
0xea8fea0365c9e9ea
  , Word64
0x6589650fecca6a65, Word64
0xbad2bab9686903ba, Word64
0x2fbc2f65935e4a2f, Word64
0xc027c04ee79d8ec0
  , Word64
0xde5fdebe81a160de, Word64
0x1c701ce06c38fc1c, Word64
0xfdd3fdbb2ee746fd, Word64
0x4d294d52649a1f4d
  , Word64
0x927292e4e0397692, Word64
0x75c9758fbceafa75, Word64
0x061806301e0c3606, Word64
0x8a128a249809ae8a
  , Word64
0xb2f2b2f940794bb2, Word64
0xe6bfe66359d185e6, Word64
0x0e380e70361c7e0e, Word64
0x1f7c1ff8633ee71f
  , Word64
0x62956237f7c45562, Word64
0xd477d4eea3b53ad4, Word64
0xa89aa829324d81a8, Word64
0x966296c4f4315296
  , Word64
0xf9c3f99b3aef62f9, Word64
0xc533c566f697a3c5, Word64
0x25942535b14a1025, Word64
0x597959f220b2ab59
  , Word64
0x842a8454ae15d084, Word64
0x72d572b7a7e4c572, Word64
0x39e439d5dd72ec39, Word64
0x4c2d4c5a6198164c
  , Word64
0x5e655eca3bbc945e, Word64
0x78fd78e785f09f78, Word64
0x38e038ddd870e538, Word64
0x8c0a8c148605988c
  , Word64
0xd163d1c6b2bf17d1, Word64
0xa5aea5410b57e4a5, Word64
0xe2afe2434dd9a1e2, Word64
0x6199612ff8c24e61
  , Word64
0xb3f6b3f1457b42b3, Word64
0x21842115a5423421, Word64
0x9c4a9c94d625089c, Word64
0x1e781ef0663cee1e
  , Word64
0x4311432252866143, Word64
0xc73bc776fc93b1c7, Word64
0xfcd7fcb32be54ffc, Word64
0x0410042014082404
  , Word64
0x515951b208a2e351, Word64
0x995e99bcc72f2599, Word64
0x6da96d4fc4da226d, Word64
0x0d340d68391a650d
  , Word64
0xfacffa8335e979fa, Word64
0xdf5bdfb684a369df, Word64
0x7ee57ed79bfca97e, Word64
0x2490243db4481924
  , Word64
0x3bec3bc5d776fe3b, Word64
0xab96ab313d4b9aab, Word64
0xce1fce3ed181f0ce, Word64
0x1144118855229911
  , Word64
0x8f068f0c8903838f, Word64
0x4e254e4a6b9c044e, Word64
0xb7e6b7d1517366b7, Word64
0xeb8beb0b60cbe0eb
  , Word64
0x3cf03cfdcc78c13c, Word64
0x813e817cbf1ffd81, Word64
0x946a94d4fe354094, Word64
0xf7fbf7eb0cf31cf7
  , Word64
0xb9deb9a1676f18b9, Word64
0x134c13985f268b13, Word64
0x2cb02c7d9c58512c, Word64
0xd36bd3d6b8bb05d3
  , Word64
0xe7bbe76b5cd38ce7, Word64
0x6ea56e57cbdc396e, Word64
0xc437c46ef395aac4, Word64
0x030c03180f061b03
  , Word64
0x5645568a13acdc56, Word64
0x440d441a49885e44, Word64
0x7fe17fdf9efea07f, Word64
0xa99ea921374f88a9
  , Word64
0x2aa82a4d8254672a, Word64
0xbbd6bbb16d6b0abb, Word64
0xc123c146e29f87c1, Word64
0x535153a202a6f153
  , Word64
0xdc57dcae8ba572dc, Word64
0x0b2c0b582716530b, Word64
0x9d4e9d9cd327019d, Word64
0x6cad6c47c1d82b6c
  , Word64
0x31c43195f562a431, Word64
0x74cd7487b9e8f374, Word64
0xf6fff6e309f115f6, Word64
0x4605460a438c4c46
  , Word64
0xac8aac092645a5ac, Word64
0x891e893c970fb589, Word64
0x145014a04428b414, Word64
0xe1a3e15b42dfbae1
  , Word64
0x165816b04e2ca616, Word64
0x3ae83acdd274f73a, Word64
0x69b9696fd0d20669, Word64
0x092409482d124109
  , Word64
0x70dd70a7ade0d770, Word64
0xb6e2b6d954716fb6, Word64
0xd067d0ceb7bd1ed0, Word64
0xed93ed3b7ec7d6ed
  , Word64
0xcc17cc2edb85e2cc, Word64
0x4215422a57846842, Word64
0x985a98b4c22d2c98, Word64
0xa4aaa4490e55eda4
  , Word64
0x28a0285d88507528, Word64
0x5c6d5cda31b8865c, Word64
0xf8c7f8933fed6bf8, Word64
0x86228644a411c286
  ]

ccs :: UArray (Int, Int) Word64
ccs :: UArray (Int, Int) Word64
ccs = forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
(i, i) -> [(i, e)] -> a i e
array ( (Int
0,Int
0), (Int
7, Int
255) ) forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip [(Int
x, Int
y) | Int
x <- [Int
0..Int
7], Int
y <- [Int
0..Int
255]] (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Word64]
_c0, [Word64]
_c1, [Word64]
_c2, [Word64]
_c3, [Word64]
_c4, [Word64]
_c5, [Word64]
_c6, [Word64]
_c7])

rcs :: UArray Int Word64
rcs :: UArray Int Word64
rcs = forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
(i, i) -> [e] -> a i e
listArray (Int
0, Int
9) [
    Word64
0x1823c6e887b8014f
  , Word64
0x36a6d2f5796f9152
  , Word64
0x60bc9b8ea30c7b35
  , Word64
0x1de0d7c22e4bfe57
  , Word64
0x157737e59ff04ada
  , Word64
0x58c9290ab1a06b85
  , Word64
0xbd5d10f4cb3e0567
  , Word64
0xe427418ba77d95d8
  , Word64
0xfbee7c66dd17479e
  , Word64
0xca2dbf07ad5a8333
    ]

encodeInt64Helper :: Int64 -> [Word8]
encodeInt64Helper :: Int64 -> [Word8]
encodeInt64Helper Int64
x_ = [Word8
w7, Word8
w6, Word8
w5, Word8
w4, Word8
w3, Word8
w2, Word8
w1, Word8
w0]
  where x :: Int64
x = Int64
x_ forall a. Num a => a -> a -> a
* Int64
8
        w7 :: Word8
w7 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR` Int
56) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w6 :: Word8
w6 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w5 :: Word8
w5 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w4 :: Word8
w4 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w3 :: Word8
w3 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w2 :: Word8
w2 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w1 :: Word8
w1 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR`  Int
8) forall a. Bits a => a -> a -> a
.&. Int64
0xff
        w0 :: Word8
w0 = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int64
x forall a. Bits a => a -> Int -> a
`shiftR`  Int
0) forall a. Bits a => a -> a -> a
.&. Int64
0xff

encodeInt64 :: Int64 -> ByteString
encodeInt64 :: Int64 -> ByteString
encodeInt64 = [Word8] -> ByteString
B.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> [Word8]
encodeInt64Helper

whirlpoolBlockSize :: Int
whirlpoolBlockSize :: Int
whirlpoolBlockSize = Int
64

whirlpoolDigestSize :: Int
whirlpoolDigestSize :: Int
whirlpoolDigestSize = Int
64

lastChunk :: Int64 -> ByteString -> [ByteString]
lastChunk :: Int64 -> ByteString -> [ByteString]
lastChunk Int64
msglen ByteString
s
  | Int
len forall a. Ord a => a -> a -> Bool
< Int
32     = [ByteString
s forall a. Semigroup a => a -> a -> a
<> Word8 -> ByteString -> ByteString
B.cons Word8
0x80 (Int -> Word8 -> ByteString
B.replicate (Int
55 forall a. Num a => a -> a -> a
- Int
len) Word8
0x0)  forall a. Semigroup a => a -> a -> a
<> ByteString
encodedLen]
  | Int
len forall a. Ord a => a -> a -> Bool
< Int
64 = (ByteString
s forall a. Semigroup a => a -> a -> a
<> Word8 -> ByteString
B.singleton Word8
0x80 forall a. Semigroup a => a -> a -> a
<> (Int -> Word8 -> ByteString
B.replicate (Int
63forall a. Num a => a -> a -> a
-forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len) Word8
0)) forall a. a -> [a] -> [a]
: [(Int -> Word8 -> ByteString
B.replicate Int
56 Word8
0x0) forall a. Semigroup a => a -> a -> a
<> ByteString
encodedLen]
  where
    len :: Int
len        = ByteString -> Int
B.length ByteString
s
    encodedLen :: ByteString
encodedLen = Int64 -> ByteString
encodeInt64 Int64
msglen

data Whirlpool = Whirlpool  {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
              {-# UNPACK #-} !Word64
          deriving Whirlpool -> Whirlpool -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Whirlpool -> Whirlpool -> Bool
$c/= :: Whirlpool -> Whirlpool -> Bool
== :: Whirlpool -> Whirlpool -> Bool
$c== :: Whirlpool -> Whirlpool -> Bool
Eq

{-# INLINE fromList #-}
{-# INLINE toList #-}
fromList :: [Word64] -> Whirlpool
toList   :: Whirlpool -> [Word64]
fromList :: [Word64] -> Whirlpool
fromList (Word64
a:Word64
b:Word64
c:Word64
d:Word64
e:Word64
f:Word64
g:Word64
h:[Word64]
_) = Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Whirlpool
Whirlpool Word64
a Word64
b Word64
c Word64
d Word64
e Word64
f Word64
g Word64
h
toList :: Whirlpool -> [Word64]
toList   (Whirlpool Word64
a Word64
b Word64
c Word64
d Word64
e Word64
f Word64
g Word64
h) = Word64
aforall a. a -> [a] -> [a]
:Word64
bforall a. a -> [a] -> [a]
:Word64
cforall a. a -> [a] -> [a]
:Word64
dforall a. a -> [a] -> [a]
:Word64
eforall a. a -> [a] -> [a]
:Word64
fforall a. a -> [a] -> [a]
:Word64
gforall a. a -> [a] -> [a]
:[Word64
h]

initHash :: Whirlpool
initHash :: Whirlpool
initHash = Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Whirlpool
Whirlpool Word64
0 Word64
0 Word64
0 Word64
0 Word64
0 Word64
0 Word64
0 Word64
0

instance Show Whirlpool where
  show :: Whirlpool -> String
show = ByteString -> String
LC.unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> ByteString
toLazyByteString forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Word64 -> Builder
word64HexFixed) forall b c a. (b -> c) -> (a -> b) -> a -> c
. Whirlpool -> [Word64]
toList

{-# INLINE readW64 #-}
readW64 :: ByteString -> Word64
readW64 :: ByteString -> Word64
readW64 = forall a. (a -> Word8 -> a) -> a -> ByteString -> a
B.foldl' Word64 -> Word8 -> Word64
acc Word64
0 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ByteString -> ByteString
B.take Int
8
  where acc :: Word64 -> Word8 -> Word64
acc Word64
x Word8
c = Word64
x forall a. Bits a => a -> Int -> a
`shiftL` Int
8 forall a. Num a => a -> a -> a
+ forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
c
        acc :: Word64 -> Word8 -> Word64
        {-# INLINE acc #-}

{-# INLINE prepareBlock #-}
prepareBlock :: ByteString -> Whirlpool
prepareBlock :: ByteString -> Whirlpool
prepareBlock ByteString
bs = Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Whirlpool
Whirlpool Word64
w1 Word64
w2 Word64
w3 Word64
w4 Word64
w5 Word64
w6 Word64
w7 Word64
w8
  where
    !w1 :: Word64
w1 = ByteString -> Word64
readW64 ByteString
bs
    !w2 :: Word64
w2 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
8 ByteString
bs)
    !w3 :: Word64
w3 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
16 ByteString
bs)
    !w4 :: Word64
w4 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
24 ByteString
bs)
    !w5 :: Word64
w5 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
32 ByteString
bs)
    !w6 :: Word64
w6 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
40 ByteString
bs)
    !w7 :: Word64
w7 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
48 ByteString
bs)
    !w8 :: Word64
w8 = ByteString -> Word64
readW64 (Int -> ByteString -> ByteString
B.drop Int
56 ByteString
bs)
    
{-# INLINE zipW #-}
zipW :: (Word64->Word64->Word64) -> Whirlpool -> Whirlpool -> Whirlpool
zipW :: (Word64 -> Word64 -> Word64) -> Whirlpool -> Whirlpool -> Whirlpool
zipW Word64 -> Word64 -> Word64
zf (Whirlpool Word64
a Word64
b Word64
c Word64
d Word64
e Word64
f Word64
g Word64
h) (Whirlpool Word64
a' Word64
b' Word64
c' Word64
d' Word64
e' Word64
f' Word64
g' Word64
h') =
  Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Whirlpool
Whirlpool (Word64 -> Word64 -> Word64
zf Word64
a Word64
a') (Word64 -> Word64 -> Word64
zf Word64
b Word64
b') (Word64 -> Word64 -> Word64
zf Word64
c Word64
c') (Word64 -> Word64 -> Word64
zf Word64
d Word64
d')
            (Word64 -> Word64 -> Word64
zf Word64
e Word64
e') (Word64 -> Word64 -> Word64
zf Word64
f Word64
f') (Word64 -> Word64 -> Word64
zf Word64
g Word64
g') (Word64 -> Word64 -> Word64
zf Word64
h Word64
h')

whirlpoolBlockUpdate :: Whirlpool -> ByteString -> Whirlpool
whirlpoolBlockUpdate :: Whirlpool -> ByteString -> Whirlpool
whirlpoolBlockUpdate Whirlpool
h0 ByteString
bs = (Word64 -> Word64 -> Word64) -> Whirlpool -> Whirlpool -> Whirlpool
zipW forall a. Bits a => a -> a -> a
xor Whirlpool
h0 forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Word64 -> Word64 -> Word64) -> Whirlpool -> Whirlpool -> Whirlpool
zipW forall a. Bits a => a -> a -> a
xor Whirlpool
block forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (Whirlpool, Whirlpool) -> Int -> (Whirlpool, Whirlpool)
blkUpdate ((Word64 -> Word64 -> Word64) -> Whirlpool -> Whirlpool -> Whirlpool
zipW forall a. Bits a => a -> a -> a
xor Whirlpool
h0 Whirlpool
block, Whirlpool
h0) forall a b. (a -> b) -> a -> b
$ forall (a :: * -> * -> *) e i. (IArray a e, Ix i) => a i e -> [i]
indices UArray Int Word64
rcs
  where !block :: Whirlpool
block = ByteString -> Whirlpool
prepareBlock ByteString
bs
        {-# INLINE blkUpdate #-}
        blkUpdate :: (Whirlpool, Whirlpool) -> Int -> (Whirlpool, Whirlpool)
blkUpdate !((Whirlpool Word64
s0 Word64
s1 Word64
s2 Word64
s3 Word64
s4 Word64
s5 Word64
s6 Word64
s7), !(Whirlpool Word64
k0 Word64
k1 Word64
k2 Word64
k3 Word64
k4 Word64
k5 Word64
k6 Word64
k7)) Int
r = (Whirlpool
st', Whirlpool
hv')
          where
            !j0 :: Word64
j0 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray Int Word64
rcs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! Int
r
            !j1 :: Word64
j1 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !j2 :: Word64
j2 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !j3 :: Word64
j3 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !j4 :: Word64
j4 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !j5 :: Word64
j5 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !j6 :: Word64
j6 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !j7 :: Word64
j7 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k7 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k6 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k5 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k4 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k3 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k2 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k1 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
k0            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
            !hv' :: Whirlpool
hv' = Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Whirlpool
Whirlpool Word64
j0 Word64
j1 Word64
j2 Word64
j3 Word64
j4 Word64
j5 Word64
j6 Word64
j7
            !l0 :: Word64
l0 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j0
            !l1 :: Word64
l1 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j1
            !l2 :: Word64
l2 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j2
            !l3 :: Word64
l3 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j3
            !l4 :: Word64
l4 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j4
            !l5 :: Word64
l5 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j5
            !l6 :: Word64
l6 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j6
            !l7 :: Word64
l7 =        UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
0, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s7 forall a. Bits a => a -> Int -> a
`shiftR` Int
56)         ))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
1, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s6 forall a. Bits a => a -> Int -> a
`shiftR` Int
48) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
2, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s5 forall a. Bits a => a -> Int -> a
`shiftR` Int
40) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
3, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s4 forall a. Bits a => a -> Int -> a
`shiftR` Int
32) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
4, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s3 forall a. Bits a => a -> Int -> a
`shiftR` Int
24) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
5, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s2 forall a. Bits a => a -> Int -> a
`shiftR` Int
16) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
6, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s1 forall a. Bits a => a -> Int -> a
`shiftR` Int
8 ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` UArray (Int, Int) Word64
ccs forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> i -> e
! (Int
7, forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Word64
s0            ) forall a. Bits a => a -> a -> a
.&. Word64
0xff))
                   forall a. Bits a => a -> a -> a
`xor` Word64
j7
            !st' :: Whirlpool
st' = Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Word64
-> Whirlpool
Whirlpool Word64
l0 Word64
l1 Word64
l2 Word64
l3 Word64
l4 Word64
l5 Word64
l6 Word64
l7

whirlpoolInit :: Context Whirlpool
whirlpoolInit :: Context Whirlpool
whirlpoolInit = forall a. Int64 -> Int -> ByteString -> a -> Context a
Context Int64
0 Int
0 ByteString
B.empty Whirlpool
initHash

{-# NOINLINE whirlpoolUpdate #-}
whirlpoolUpdate :: Context Whirlpool -> ByteString -> Context Whirlpool
whirlpoolUpdate :: Context Whirlpool -> ByteString -> Context Whirlpool
whirlpoolUpdate ctx :: Context Whirlpool
ctx@(Context Int64
n Int
k ByteString
w Whirlpool
hv) ByteString
s
  | ByteString -> Bool
B.null ByteString
s               = Context Whirlpool
ctx
  | Int
sizeRead  forall a. Ord a => a -> a -> Bool
< Int
sizeToRead = forall a. Int64 -> Int -> ByteString -> a -> Context a
Context (Int64
n forall a. Num a => a -> a -> a
+ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
sizeRead) (Int
k forall a. Num a => a -> a -> a
+ Int
sizeRead) (ByteString
w forall a. Semigroup a => a -> a -> a
<> ByteString
s1) Whirlpool
hv
  | Int
sizeRead forall a. Ord a => a -> a -> Bool
>= Int
sizeToRead = Context Whirlpool -> ByteString -> Context Whirlpool
whirlpoolUpdate (forall a. Int64 -> Int -> ByteString -> a -> Context a
Context (Int64
n forall a. Num a => a -> a -> a
+ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
sizeToRead) Int
0 forall a. Monoid a => a
mempty (Whirlpool -> ByteString -> Whirlpool
whirlpoolBlockUpdate Whirlpool
hv (ByteString
w forall a. Semigroup a => a -> a -> a
<> ByteString
s1)) ) ByteString
s'    
  where
    !sizeToRead :: Int
sizeToRead  = Int
whirlpoolBlockSize forall a. Num a => a -> a -> a
- Int
k
    !s1 :: ByteString
s1          = Int -> ByteString -> ByteString
B.take Int
sizeToRead ByteString
s
    !s' :: ByteString
s'          = Int -> ByteString -> ByteString
B.drop Int
sizeToRead ByteString
s
    !sizeRead :: Int
sizeRead    = ByteString -> Int
B.length ByteString
s1

{-# NOINLINE whirlpoolFinal #-}
whirlpoolFinal :: Context Whirlpool -> Whirlpool
whirlpoolFinal :: Context Whirlpool -> Whirlpool
whirlpoolFinal (Context Int64
n Int
_ ByteString
w Whirlpool
hv) = forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' Whirlpool -> ByteString -> Whirlpool
whirlpoolBlockUpdate Whirlpool
hv (Int64 -> ByteString -> [ByteString]
lastChunk Int64
n ByteString
w)

{-# NOINLINE whirlpoolHash #-}
whirlpoolHash :: LBS.ByteString -> Whirlpool
whirlpoolHash :: ByteString -> Whirlpool
whirlpoolHash = Context Whirlpool -> Whirlpool
whirlpoolFinal forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> ByteString -> a) -> a -> ByteString -> a
LBS.foldlChunks Context Whirlpool -> ByteString -> Context Whirlpool
whirlpoolUpdate Context Whirlpool
whirlpoolInit

instance HashAlgorithm Whirlpool where
  hashBlockSize :: Whirlpool -> Int
hashBlockSize = forall a b. a -> b -> a
const Int
whirlpoolBlockSize
  hashDigestSize :: Whirlpool -> Int
hashDigestSize = forall a b. a -> b -> a
const Int
whirlpoolDigestSize
  hashInit :: Context Whirlpool
hashInit = Context Whirlpool
whirlpoolInit
  hashUpdate :: Context Whirlpool -> ByteString -> Context Whirlpool
hashUpdate = Context Whirlpool -> ByteString -> Context Whirlpool
whirlpoolUpdate
  hashFinal :: Context Whirlpool -> Whirlpool
hashFinal = Context Whirlpool -> Whirlpool
whirlpoolFinal