Bitcoin Forum
May 04, 2024, 10:00:04 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18]  All
  Print  
Author Topic: [Preview] Smelter - GPU miner for WhirlpoolX (Vanillacoin)  (Read 132800 times)
smolen (OP)
Hero Member
*****
Offline Offline

Activity: 524
Merit: 500


View Profile
May 09, 2015, 12:45:58 PM
 #341

Edit: Found a trick with Smelter at least on my R9 290x.  IT by default does GPU Clock Dynamic so it doesn't fully utilize the Overclock there.  What I did was open Sgminer so it would pin GPU Clock to max and instead of using q to quit just click x on the window so your GPU Clock stays locked into whatever OC it is.  Than open Smelter.  Mining at 700.59 MH/s.  Granted at this speed and OC 1100/1500 My card is pretty darn toasty so I wouldn't recommend it unless you have Liquid or really good Fans and Airflow for the GPU 90c with fans at 100% and 67f with fan blowing into PC.

Edit: I also just noticed that it seems the speed has way more to do with GPU Clock than Mem Clock.  Sweetspot on my GPU Clock seems to be 1125, 1150 gave artifacting, so it would be 1125/1350, speed seems to be around 715 MH/s I think, although it is still climbing slowly. Still runs very toasty though at 90c. 
Cool tricks, cool speeds!
Core/mem clock control is in the work but not ready yet Sad

Why not release new Versions, you can still use it to mine say WestHash/NiceHash Pools and whatever other pools offer WhirlPoolx Algo.

Pointing your miner at a pool won't do anything if the coins network won't accept the blocks.
Yes, no point in releasing miner that is fast but cannot be used. So I'm working on new kernel for another algorithm, if it will be slow enough, the release will be public Smiley

Of course I gave you bad advice. Good one is way out of your price range.
Be very wary of relying on JavaScript for security on crypto sites. The site can change the JavaScript at any time unless you take unusual precautions, and browsers are not generally known for their airtight security.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714860004
Hero Member
*
Offline Offline

Posts: 1714860004

View Profile Personal Message (Offline)

Ignore
1714860004
Reply with quote  #2

1714860004
Report to moderator
malickie
Member
**
Offline Offline

Activity: 92
Merit: 10


View Profile
May 11, 2015, 03:50:37 PM
 #342

Why not release new Versions, you can still use it to mine say WestHash/NiceHash Pools and whatever other pools offer WhirlPoolx Algo.

Pointing your miner at a pool won't do anything if the coins network won't accept the blocks.

Yea I just noticed that it does nothing on the Pools I was talking about Sad  Oh well, will have to wait until the block is back to PoW.

malickie
Member
**
Offline Offline

Activity: 92
Merit: 10


View Profile
May 13, 2015, 01:59:46 PM
 #343

Edit: Found a trick with Smelter at least on my R9 290x.  IT by default does GPU Clock Dynamic so it doesn't fully utilize the Overclock there.  What I did was open Sgminer so it would pin GPU Clock to max and instead of using q to quit just click x on the window so your GPU Clock stays locked into whatever OC it is.  Than open Smelter.  Mining at 700.59 MH/s.  Granted at this speed and OC 1100/1500 My card is pretty darn toasty so I wouldn't recommend it unless you have Liquid or really good Fans and Airflow for the GPU 90c with fans at 100% and 67f with fan blowing into PC.

Edit: I also just noticed that it seems the speed has way more to do with GPU Clock than Mem Clock.  Sweetspot on my GPU Clock seems to be 1125, 1150 gave artifacting, so it would be 1125/1350, speed seems to be around 715 MH/s I think, although it is still climbing slowly. Still runs very toasty though at 90c. 
Cool tricks, cool speeds!
Core/mem clock control is in the work but not ready yet Sad

Why not release new Versions, you can still use it to mine say WestHash/NiceHash Pools and whatever other pools offer WhirlPoolx Algo.

Pointing your miner at a pool won't do anything if the coins network won't accept the blocks.
Yes, no point in releasing miner that is fast but cannot be used. So I'm working on new kernel for another algorithm, if it will be slow enough, the release will be public Smiley

My miner supports three algos, full-custom stratum implementation. But it needs multiple pool support, getblocktemplate support, GPU ADL controls (fan/clocks/other shit). Also need a pool-specific mutex on the socket... I don't use cURL (because fucking ewww), but when mining at extreme low diff, stratum can die, probably cause of the socket being used by multiple threads.

Well, I look forward to seeing your Miner Wolf0.  I must say you do some good work, your Bin file for X11 Algo. for my R9 290x has me at darn near 9 MH/s.  Granted I am also using AMD Opencl files within SGMiner to help it a bit, I think it's 14.9 or maybe 14.6 RC2.  Either way with Just OpenCL it will run at around 6 MH/s.  So yea your bin def. helped.

smolen (OP)
Hero Member
*****
Offline Offline

Activity: 524
Merit: 500


View Profile
May 13, 2015, 05:25:58 PM
 #344

My miner supports three algos, full-custom stratum implementation. But it needs multiple pool support, getblocktemplate support, GPU ADL controls (fan/clocks/other shit). Also need a pool-specific mutex on the socket... I don't use cURL (because fucking ewww), but when mining at extreme low diff, stratum can die, probably cause of the socket being used by multiple threads.
At very low difficulties it's possible to accidentally submit too many stale shares and get banned, may be the problem is on the pool's end. For Stratum networking I switched from curl to boost::asio, curl is still here for getwork/getwork2/getblocktemplate.

Anyways, the ADL SDK is a pain in the ass, but initializing, cleaning up, and getting/setting fan speed works!
Is your CL<->ADL code done in cgminer way or in the right way? Smiley

Of course I gave you bad advice. Good one is way out of your price range.
_javi_
Hero Member
*****
Offline Offline

Activity: 968
Merit: 624


Still a manic miner


View Profile
August 02, 2015, 10:53:46 PM
 #345

i have problems with a rig with 4 GPUs (working fine in sgminer).

This rig hashes the same as a 3 GPU rig.

what should i check?  Huh

(Win 7 64, catalyst 14.4, proper DLLs in smelter dir, Gigabytes 280x, -g 4 -w64.)
gaalx
Sr. Member
****
Offline Offline

Activity: 411
Merit: 250



View Profile
August 04, 2015, 04:14:21 AM
 #346

Warm algorithm, how to adjust settings fan?

z0n0
Legendary
*
Offline Offline

Activity: 1274
Merit: 1006



View Profile
August 04, 2015, 04:18:27 AM
 #347

Warm algorithm, how to adjust settings fan?

I don't think its possible with this version  Undecided
lowhashminer
Newbie
*
Offline Offline

Activity: 19
Merit: 0


View Profile
August 04, 2015, 08:40:33 PM
 #348

Warm algorithm, how to adjust settings fan?

You can download TRIXX app from Sapphire website. Should work on any AMD card.
splootch
Newbie
*
Offline Offline

Activity: 8
Merit: 0


View Profile WWW
August 05, 2015, 09:18:37 AM
 #349

why is that smelter last official miner only get me 5-6 mh on nicehash?
smolen (OP)
Hero Member
*****
Offline Offline

Activity: 524
Merit: 500


View Profile
August 07, 2015, 10:27:40 AM
 #350

I'm very sorry, new version with bugfixes and better diagnostics was almost done when I was distracted by other, non-crypto things Sad

i have problems with a rig with 4 GPUs (working fine in sgminer).

This rig hashes the same as a 3 GPU rig.

what should i check?  Huh

(Win 7 64, catalyst 14.4, proper DLLs in smelter dir, Gigabytes 280x, -g 4 -w64.)

Probably one of GPUs overheated and does not work. Try to lower clock speed for all cards, then raise it back card-by-card. There is no speed settings in the released version, use external tool (Afterburner or something) for overclocking.

Warm algorithm, how to adjust settings fan?

I don't think its possible with this version  Undecided
Yes, not yet

why is that smelter last official miner only get me 5-6 mh on nicehash?
First of all wait a bit, pool calculates speed by accepted shares, give it some time (~ 5-10 min) to catch up. Look at miner window, may be there are some diagnostic messages about rejected shares and h/w errors, if yes, post it here. Lower GPU clocks with Afterburner and see if the speed raises to expected for your card.
If nothing will help - take my apologies, I'm very sorry for abandoning the project, and wait for new version Sad

Of course I gave you bad advice. Good one is way out of your price range.
smolen (OP)
Hero Member
*****
Offline Offline

Activity: 524
Merit: 500


View Profile
January 15, 2016, 05:30:16 AM
 #351

Smelter is again abandoned and I'm again publishing kernel source - this time for Vanillacoin WhirlpoolX algorithm

Code:
static UINT64 arrPrecalc[8*256] =
{

0xD83078C018601818ULL, 0x2646AF05238C2323ULL, 0xB891F97EC63FC6C6ULL, 0xFBCD6F13E887E8E8ULL, 0xCB13A14C87268787ULL, 0x116D62A9B8DAB8B8ULL, 0x0902050801040101ULL, 0x0D9E6E424F214F4FULL, 0x9B6CEEAD36D83636ULL, 0xFF510459A6A2A6A6ULL, 0x0CB9BDDED26FD2D2ULL, 0x0EF706FBF5F3F5F5ULL, 0x96F280EF79F97979ULL, 0x30DECE5F6FA16F6FULL, 0x6D3FEFFC917E9191ULL, 0xF8A407AA52555252ULL, 0x47C0FD27609D6060ULL, 0x35657689BCCABCBCULL, 0x372BCDAC9B569B9BULL, 0x8A018C048E028E8EULL, 0xD25B1571A3B6A3A3ULL, 0x6C183C600C300C0CULL, 0x84F68AFF7BF17B7BULL, 0x806AE1B535D43535ULL, 0xF53A69E81D741D1DULL, 0xB3DD4753E0A7E0E0ULL, 0x21B3ACF6D77BD7D7ULL, 0x9C99ED5EC22FC2C2ULL, 0x435C966D2EB82E2EULL, 0x29967A624B314B4BULL, 0x5DE121A3FEDFFEFEULL, 0xD5AE168257415757ULL, 0xBD2A41A815541515ULL, 0xE8EEB69F77C17777ULL, 0x926EEBA537DC3737ULL, 0x9ED7567BE5B3E5E5ULL, 0x1323D98C9F469F9FULL, 0x23FD17D3F0E7F0F0ULL, 0x20947F6A4A354A4AULL, 0x44A9959EDA4FDADAULL, 0xA2B025FA587D5858ULL, 0xCF8FCA06C903C9C9ULL, 0x7C528D5529A42929ULL, 0x5A1422500A280A0AULL, 0x507F4FE1B1FEB1B1ULL, 0xC95D1A69A0BAA0A0ULL, 0x14D6DA7F6BB16B6BULL, 0xD917AB5C852E8585ULL, 0x3C677381BDCEBDBDULL, 0x8FBA34D25D695D5DULL, 0x9020508010401010ULL, 0x07F503F3F4F7F4F4ULL, 0xDD8BC016CB0BCBCBULL, 0xD37CC6ED3EF83E3EULL, 0x2D0A112805140505ULL, 0x78CEE61F67816767ULL, 0x97D55373E4B7E4E4ULL, 0x024EBB25279C2727ULL, 0x7382583241194141ULL, 0xA70B9D2C8B168B8BULL, 0xF6530151A7A6A7A7ULL, 0xB2FA94CF7DE97D7DULL, 0x4937FBDC956E9595ULL, 0x56AD9F8ED847D8D8ULL, 0x70EB308BFBCBFBFBULL, 0xCDC17123EE9FEEEEULL, 0xBBF891C77CED7C7CULL, 0x71CCE31766856666ULL, 0x7BA78EA6DD53DDDDULL, 0xAF2E4BB8175C1717ULL, 0x458E460247014747ULL, 0x1A21DC849E429E9EULL, 0xD489C51ECA0FCACAULL, 0x585A99752DB42D2DULL, 0x2E637991BFC6BFBFULL, 0x3F0E1B38071C0707ULL, 0xAC472301AD8EADADULL, 0xB0B42FEA5A755A5AULL, 0xEF1BB56C83368383ULL, 0xB666FF8533CC3333ULL, 0x5CC6F23F63916363ULL, 0x12040A1002080202ULL, 0x93493839AA92AAAAULL, 0xDEE2A8AF71D97171ULL, 0xC68DCF0EC807C8C8ULL, 0xD1327DC819641919ULL, 0x3B92707249394949ULL, 0x5FAF9A86D943D9D9ULL, 0x31F91DC3F2EFF2F2ULL, 0xA8DB484BE3ABE3E3ULL, 0xB9B62AE25B715B5BULL, 0xBC0D9234881A8888ULL, 0x3E29C8A49A529A9AULL, 0x0B4CBE2D26982626ULL, 0xBF64FA8D32C83232ULL, 0x597D4AE9B0FAB0B0ULL, 0xF2CF6A1BE983E9E9ULL, 0x771E33780F3C0F0FULL, 0x33B7A6E6D573D5D5ULL, 0xF41DBA74803A8080ULL, 0x27617C99BEC2BEBEULL, 0xEB87DE26CD13CDCDULL, 0x8968E4BD34D03434ULL, 0x3290757A483D4848ULL, 0x54E324ABFFDBFFFFULL, 0x8DF48FF77AF57A7AULL, 0x643DEAF4907A9090ULL, 0x9DBE3EC25F615F5FULL, 0x3D40A01D20802020ULL, 0x0FD0D56768BD6868ULL, 0xCA3472D01A681A1AULL, 0xB7412C19AE82AEAEULL, 0x7D755EC9B4EAB4B4ULL, 0xCEA8199A544D5454ULL, 0x7F3BE5EC93769393ULL, 0x2F44AA0D22882222ULL, 0x63C8E907648D6464ULL, 0x2AFF12DBF1E3F1F1ULL, 0xCCE6A2BF73D17373ULL, 0x82245A9012481212ULL, 0x7A805D3A401D4040ULL, 0x4810284008200808ULL, 0x959BE856C32BC3C3ULL, 0xDFC57B33EC97ECECULL, 0x4DAB9096DB4BDBDBULL, 0xC05F1F61A1BEA1A1ULL, 0x9107831C8D0E8D8DULL, 0xC87AC9F53DF43D3DULL, 0x5B33F1CC97669797ULL, 0x0000000000000000ULL, 0xF983D436CF1BCFCFULL, 0x6E5687452BAC2B2BULL, 0xE1ECB39776C57676ULL, 0xE619B06482328282ULL, 0x28B1A9FED67FD6D6ULL, 0xC33677D81B6C1B1BULL, 0x74775BC1B5EEB5B5ULL, 0xBE432911AF86AFAFULL, 0x1DD4DF776AB56A6AULL, 0xEAA00DBA505D5050ULL, 0x578A4C1245094545ULL, 0x38FB18CBF3EBF3F3ULL, 0xAD60F09D30C03030ULL, 0xC4C3742BEF9BEFEFULL, 0xDA7EC3E53FFC3F3FULL, 0xC7AA1C9255495555ULL, 0xDB591079A2B2A2A2ULL, 0xE9C96503EA8FEAEAULL, 0x6ACAEC0F65896565ULL, 0x036968B9BAD2BABAULL, 0x4A5E93652FBC2F2FULL, 0x8E9DE74EC027C0C0ULL, 0x60A181BEDE5FDEDEULL, 0xFC386CE01C701C1CULL, 0x46E72EBBFDD3FDFDULL, 0x1F9A64524D294D4DULL, 0x7639E0E492729292ULL, 0xFAEABC8F75C97575ULL, 0x360C1E3006180606ULL, 0xAE0998248A128A8AULL, 0x4B7940F9B2F2B2B2ULL, 0x85D15963E6BFE6E6ULL, 0x7E1C36700E380E0EULL, 0xE73E63F81F7C1F1FULL, 0x55C4F73762956262ULL, 0x3AB5A3EED477D4D4ULL, 0x814D3229A89AA8A8ULL, 0x5231F4C496629696ULL, 0x62EF3A9BF9C3F9F9ULL, 0xA397F666C533C5C5ULL, 0x104AB13525942525ULL, 0xABB220F259795959ULL, 0xD015AE54842A8484ULL, 0xC5E4A7B772D57272ULL, 0xEC72DDD539E43939ULL, 0x1698615A4C2D4C4CULL, 0x94BC3BCA5E655E5EULL, 0x9FF085E778FD7878ULL, 0xE570D8DD38E03838ULL, 0x980586148C0A8C8CULL, 0x17BFB2C6D163D1D1ULL, 0xE4570B41A5AEA5A5ULL, 0xA1D94D43E2AFE2E2ULL, 0x4EC2F82F61996161ULL, 0x427B45F1B3F6B3B3ULL, 0x3442A51521842121ULL, 0x0825D6949C4A9C9CULL, 0xEE3C66F01E781E1EULL, 0x6186522243114343ULL, 0xB193FC76C73BC7C7ULL, 0x4FE52BB3FCD7FCFCULL, 0x2408142004100404ULL, 0xE3A208B251595151ULL, 0x252FC7BC995E9999ULL, 0x22DAC44F6DA96D6DULL, 0x651A39680D340D0DULL, 0x79E93583FACFFAFAULL, 0x69A384B6DF5BDFDFULL, 0xA9FC9BD77EE57E7EULL, 0x1948B43D24902424ULL, 0xFE76D7C53BEC3B3BULL, 0x9A4B3D31AB96ABABULL, 0xF081D13ECE1FCECEULL, 0x9922558811441111ULL, 0x8303890C8F068F8FULL, 0x049C6B4A4E254E4EULL, 0x667351D1B7E6B7B7ULL, 0xE0CB600BEB8BEBEBULL, 0xC178CCFD3CF03C3CULL, 0xFD1FBF7C813E8181ULL, 0x4035FED4946A9494ULL, 0x1CF30CEBF7FBF7F7ULL, 0x186F67A1B9DEB9B9ULL, 0x8B265F98134C1313ULL, 0x51589C7D2CB02C2CULL, 0x05BBB8D6D36BD3D3ULL, 0x8CD35C6BE7BBE7E7ULL, 0x39DCCB576EA56E6EULL, 0xAA95F36EC437C4C4ULL, 0x1B060F18030C0303ULL, 0xDCAC138A56455656ULL, 0x5E88491A440D4444ULL, 0xA0FE9EDF7FE17F7FULL, 0x884F3721A99EA9A9ULL, 0x6754824D2AA82A2AULL, 0x0A6B6DB1BBD6BBBBULL, 0x879FE246C123C1C1ULL, 0xF1A602A253515353ULL, 0x72A58BAEDC57DCDCULL, 0x531627580B2C0B0BULL, 0x0127D39C9D4E9D9DULL, 0x2BD8C1476CAD6C6CULL, 0xA462F59531C43131ULL, 0xF3E8B98774CD7474ULL, 0x15F109E3F6FFF6F6ULL, 0x4C8C430A46054646ULL, 0xA5452609AC8AACACULL, 0xB50F973C891E8989ULL, 0xB42844A014501414ULL, 0xBADF425BE1A3E1E1ULL, 0xA62C4EB016581616ULL, 0xF774D2CD3AE83A3AULL, 0x06D2D06F69B96969ULL, 0x41122D4809240909ULL, 0xD7E0ADA770DD7070ULL, 0x6F7154D9B6E2B6B6ULL, 0x1EBDB7CED067D0D0ULL, 0xD6C77E3BED93EDEDULL, 0xE285DB2ECC17CCCCULL, 0x6884572A42154242ULL, 0x2C2DC2B4985A9898ULL, 0xED550E49A4AAA4A4ULL, 0x7550885D28A02828ULL, 0x86B831DA5C6D5C5CULL, 0x6BED3F93F8C7F8F8ULL, 0xC211A44486228686ULL,

0x3078C018601818D8ULL, 0x46AF05238C232326ULL, 0x91F97EC63FC6C6B8ULL, 0xCD6F13E887E8E8FBULL, 0x13A14C87268787CBULL, 0x6D62A9B8DAB8B811ULL, 0x0205080104010109ULL, 0x9E6E424F214F4F0DULL, 0x6CEEAD36D836369BULL, 0x510459A6A2A6A6FFULL, 0xB9BDDED26FD2D20CULL, 0xF706FBF5F3F5F50EULL, 0xF280EF79F9797996ULL, 0xDECE5F6FA16F6F30ULL, 0x3FEFFC917E91916DULL, 0xA407AA52555252F8ULL, 0xC0FD27609D606047ULL, 0x657689BCCABCBC35ULL, 0x2BCDAC9B569B9B37ULL, 0x018C048E028E8E8AULL, 0x5B1571A3B6A3A3D2ULL, 0x183C600C300C0C6CULL, 0xF68AFF7BF17B7B84ULL, 0x6AE1B535D4353580ULL, 0x3A69E81D741D1DF5ULL, 0xDD4753E0A7E0E0B3ULL, 0xB3ACF6D77BD7D721ULL, 0x99ED5EC22FC2C29CULL, 0x5C966D2EB82E2E43ULL, 0x967A624B314B4B29ULL, 0xE121A3FEDFFEFE5DULL, 0xAE168257415757D5ULL, 0x2A41A815541515BDULL, 0xEEB69F77C17777E8ULL, 0x6EEBA537DC373792ULL, 0xD7567BE5B3E5E59EULL, 0x23D98C9F469F9F13ULL, 0xFD17D3F0E7F0F023ULL, 0x947F6A4A354A4A20ULL, 0xA9959EDA4FDADA44ULL, 0xB025FA587D5858A2ULL, 0x8FCA06C903C9C9CFULL, 0x528D5529A429297CULL, 0x1422500A280A0A5AULL, 0x7F4FE1B1FEB1B150ULL, 0x5D1A69A0BAA0A0C9ULL, 0xD6DA7F6BB16B6B14ULL, 0x17AB5C852E8585D9ULL, 0x677381BDCEBDBD3CULL, 0xBA34D25D695D5D8FULL, 0x2050801040101090ULL, 0xF503F3F4F7F4F407ULL, 0x8BC016CB0BCBCBDDULL, 0x7CC6ED3EF83E3ED3ULL, 0x0A1128051405052DULL, 0xCEE61F6781676778ULL, 0xD55373E4B7E4E497ULL, 0x4EBB25279C272702ULL, 0x8258324119414173ULL, 0x0B9D2C8B168B8BA7ULL, 0x530151A7A6A7A7F6ULL, 0xFA94CF7DE97D7DB2ULL, 0x37FBDC956E959549ULL, 0xAD9F8ED847D8D856ULL, 0xEB308BFBCBFBFB70ULL, 0xC17123EE9FEEEECDULL, 0xF891C77CED7C7CBBULL, 0xCCE3176685666671ULL, 0xA78EA6DD53DDDD7BULL, 0x2E4BB8175C1717AFULL, 0x8E46024701474745ULL, 0x21DC849E429E9E1AULL, 0x89C51ECA0FCACAD4ULL, 0x5A99752DB42D2D58ULL, 0x637991BFC6BFBF2EULL, 0x0E1B38071C07073FULL, 0x472301AD8EADADACULL, 0xB42FEA5A755A5AB0ULL, 0x1BB56C83368383EFULL, 0x66FF8533CC3333B6ULL, 0xC6F23F639163635CULL, 0x040A100208020212ULL, 0x493839AA92AAAA93ULL, 0xE2A8AF71D97171DEULL, 0x8DCF0EC807C8C8C6ULL, 0x327DC819641919D1ULL, 0x927072493949493BULL, 0xAF9A86D943D9D95FULL, 0xF91DC3F2EFF2F231ULL, 0xDB484BE3ABE3E3A8ULL, 0xB62AE25B715B5BB9ULL, 0x0D9234881A8888BCULL, 0x29C8A49A529A9A3EULL, 0x4CBE2D269826260BULL, 0x64FA8D32C83232BFULL, 0x7D4AE9B0FAB0B059ULL, 0xCF6A1BE983E9E9F2ULL, 0x1E33780F3C0F0F77ULL, 0xB7A6E6D573D5D533ULL, 0x1DBA74803A8080F4ULL, 0x617C99BEC2BEBE27ULL, 0x87DE26CD13CDCDEBULL, 0x68E4BD34D0343489ULL, 0x90757A483D484832ULL, 0xE324ABFFDBFFFF54ULL, 0xF48FF77AF57A7A8DULL, 0x3DEAF4907A909064ULL, 0xBE3EC25F615F5F9DULL, 0x40A01D208020203DULL, 0xD0D56768BD68680FULL, 0x3472D01A681A1ACAULL, 0x412C19AE82AEAEB7ULL, 0x755EC9B4EAB4B47DULL, 0xA8199A544D5454CEULL, 0x3BE5EC937693937FULL, 0x44AA0D228822222FULL, 0xC8E907648D646463ULL, 0xFF12DBF1E3F1F12AULL, 0xE6A2BF73D17373CCULL, 0x245A901248121282ULL, 0x805D3A401D40407AULL, 0x1028400820080848ULL, 0x9BE856C32BC3C395ULL, 0xC57B33EC97ECECDFULL, 0xAB9096DB4BDBDB4DULL, 0x5F1F61A1BEA1A1C0ULL, 0x07831C8D0E8D8D91ULL, 0x7AC9F53DF43D3DC8ULL, 0x33F1CC976697975BULL, 0x0000000000000000ULL, 0x83D436CF1BCFCFF9ULL, 0x5687452BAC2B2B6EULL, 0xECB39776C57676E1ULL, 0x19B06482328282E6ULL, 0xB1A9FED67FD6D628ULL, 0x3677D81B6C1B1BC3ULL, 0x775BC1B5EEB5B574ULL, 0x432911AF86AFAFBEULL, 0xD4DF776AB56A6A1DULL, 0xA00DBA505D5050EAULL, 0x8A4C124509454557ULL, 0xFB18CBF3EBF3F338ULL, 0x60F09D30C03030ADULL, 0xC3742BEF9BEFEFC4ULL, 0x7EC3E53FFC3F3FDAULL, 0xAA1C9255495555C7ULL, 0x591079A2B2A2A2DBULL, 0xC96503EA8FEAEAE9ULL, 0xCAEC0F658965656AULL, 0x6968B9BAD2BABA03ULL, 0x5E93652FBC2F2F4AULL, 0x9DE74EC027C0C08EULL, 0xA181BEDE5FDEDE60ULL, 0x386CE01C701C1CFCULL, 0xE72EBBFDD3FDFD46ULL, 0x9A64524D294D4D1FULL, 0x39E0E49272929276ULL, 0xEABC8F75C97575FAULL, 0x0C1E300618060636ULL, 0x0998248A128A8AAEULL, 0x7940F9B2F2B2B24BULL, 0xD15963E6BFE6E685ULL, 0x1C36700E380E0E7EULL, 0x3E63F81F7C1F1FE7ULL, 0xC4F7376295626255ULL, 0xB5A3EED477D4D43AULL, 0x4D3229A89AA8A881ULL, 0x31F4C49662969652ULL, 0xEF3A9BF9C3F9F962ULL, 0x97F666C533C5C5A3ULL, 0x4AB1352594252510ULL, 0xB220F259795959ABULL, 0x15AE54842A8484D0ULL, 0xE4A7B772D57272C5ULL, 0x72DDD539E43939ECULL, 0x98615A4C2D4C4C16ULL, 0xBC3BCA5E655E5E94ULL, 0xF085E778FD78789FULL, 0x70D8DD38E03838E5ULL, 0x0586148C0A8C8C98ULL, 0xBFB2C6D163D1D117ULL, 0x570B41A5AEA5A5E4ULL, 0xD94D43E2AFE2E2A1ULL, 0xC2F82F619961614EULL, 0x7B45F1B3F6B3B342ULL, 0x42A5152184212134ULL, 0x25D6949C4A9C9C08ULL, 0x3C66F01E781E1EEEULL, 0x8652224311434361ULL, 0x93FC76C73BC7C7B1ULL, 0xE52BB3FCD7FCFC4FULL, 0x0814200410040424ULL, 0xA208B251595151E3ULL, 0x2FC7BC995E999925ULL, 0xDAC44F6DA96D6D22ULL, 0x1A39680D340D0D65ULL, 0xE93583FACFFAFA79ULL, 0xA384B6DF5BDFDF69ULL, 0xFC9BD77EE57E7EA9ULL, 0x48B43D2490242419ULL, 0x76D7C53BEC3B3BFEULL, 0x4B3D31AB96ABAB9AULL, 0x81D13ECE1FCECEF0ULL, 0x2255881144111199ULL, 0x03890C8F068F8F83ULL, 0x9C6B4A4E254E4E04ULL, 0x7351D1B7E6B7B766ULL, 0xCB600BEB8BEBEBE0ULL, 0x78CCFD3CF03C3CC1ULL, 0x1FBF7C813E8181FDULL, 0x35FED4946A949440ULL, 0xF30CEBF7FBF7F71CULL, 0x6F67A1B9DEB9B918ULL, 0x265F98134C13138BULL, 0x589C7D2CB02C2C51ULL, 0xBBB8D6D36BD3D305ULL, 0xD35C6BE7BBE7E78CULL, 0xDCCB576EA56E6E39ULL, 0x95F36EC437C4C4AAULL, 0x060F18030C03031BULL, 0xAC138A56455656DCULL, 0x88491A440D44445EULL, 0xFE9EDF7FE17F7FA0ULL, 0x4F3721A99EA9A988ULL, 0x54824D2AA82A2A67ULL, 0x6B6DB1BBD6BBBB0AULL, 0x9FE246C123C1C187ULL, 0xA602A253515353F1ULL, 0xA58BAEDC57DCDC72ULL, 0x1627580B2C0B0B53ULL, 0x27D39C9D4E9D9D01ULL, 0xD8C1476CAD6C6C2BULL, 0x62F59531C43131A4ULL, 0xE8B98774CD7474F3ULL, 0xF109E3F6FFF6F615ULL, 0x8C430A460546464CULL, 0x452609AC8AACACA5ULL, 0x0F973C891E8989B5ULL, 0x2844A014501414B4ULL, 0xDF425BE1A3E1E1BAULL, 0x2C4EB016581616A6ULL, 0x74D2CD3AE83A3AF7ULL, 0xD2D06F69B9696906ULL, 0x122D480924090941ULL, 0xE0ADA770DD7070D7ULL, 0x7154D9B6E2B6B66FULL, 0xBDB7CED067D0D01EULL, 0xC77E3BED93EDEDD6ULL, 0x85DB2ECC17CCCCE2ULL, 0x84572A4215424268ULL, 0x2DC2B4985A98982CULL, 0x550E49A4AAA4A4EDULL, 0x50885D28A0282875ULL, 0xB831DA5C6D5C5C86ULL, 0xED3F93F8C7F8F86BULL, 0x11A44486228686C2ULL,

0x78C018601818D830ULL, 0xAF05238C23232646ULL, 0xF97EC63FC6C6B891ULL, 0x6F13E887E8E8FBCDULL, 0xA14C87268787CB13ULL, 0x62A9B8DAB8B8116DULL, 0x0508010401010902ULL, 0x6E424F214F4F0D9EULL, 0xEEAD36D836369B6CULL, 0x0459A6A2A6A6FF51ULL, 0xBDDED26FD2D20CB9ULL, 0x06FBF5F3F5F50EF7ULL, 0x80EF79F9797996F2ULL, 0xCE5F6FA16F6F30DEULL, 0xEFFC917E91916D3FULL, 0x07AA52555252F8A4ULL, 0xFD27609D606047C0ULL, 0x7689BCCABCBC3565ULL, 0xCDAC9B569B9B372BULL, 0x8C048E028E8E8A01ULL, 0x1571A3B6A3A3D25BULL, 0x3C600C300C0C6C18ULL, 0x8AFF7BF17B7B84F6ULL, 0xE1B535D43535806AULL, 0x69E81D741D1DF53AULL, 0x4753E0A7E0E0B3DDULL, 0xACF6D77BD7D721B3ULL, 0xED5EC22FC2C29C99ULL, 0x966D2EB82E2E435CULL, 0x7A624B314B4B2996ULL, 0x21A3FEDFFEFE5DE1ULL, 0x168257415757D5AEULL, 0x41A815541515BD2AULL, 0xB69F77C17777E8EEULL, 0xEBA537DC3737926EULL, 0x567BE5B3E5E59ED7ULL, 0xD98C9F469F9F1323ULL, 0x17D3F0E7F0F023FDULL, 0x7F6A4A354A4A2094ULL, 0x959EDA4FDADA44A9ULL, 0x25FA587D5858A2B0ULL, 0xCA06C903C9C9CF8FULL, 0x8D5529A429297C52ULL, 0x22500A280A0A5A14ULL, 0x4FE1B1FEB1B1507FULL, 0x1A69A0BAA0A0C95DULL, 0xDA7F6BB16B6B14D6ULL, 0xAB5C852E8585D917ULL, 0x7381BDCEBDBD3C67ULL, 0x34D25D695D5D8FBAULL, 0x5080104010109020ULL, 0x03F3F4F7F4F407F5ULL, 0xC016CB0BCBCBDD8BULL, 0xC6ED3EF83E3ED37CULL, 0x1128051405052D0AULL, 0xE61F6781676778CEULL, 0x5373E4B7E4E497D5ULL, 0xBB25279C2727024EULL, 0x5832411941417382ULL, 0x9D2C8B168B8BA70BULL, 0x0151A7A6A7A7F653ULL, 0x94CF7DE97D7DB2FAULL, 0xFBDC956E95954937ULL, 0x9F8ED847D8D856ADULL, 0x308BFBCBFBFB70EBULL, 0x7123EE9FEEEECDC1ULL, 0x91C77CED7C7CBBF8ULL, 0xE3176685666671CCULL, 0x8EA6DD53DDDD7BA7ULL, 0x4BB8175C1717AF2EULL, 0x460247014747458EULL, 0xDC849E429E9E1A21ULL, 0xC51ECA0FCACAD489ULL, 0x99752DB42D2D585AULL, 0x7991BFC6BFBF2E63ULL, 0x1B38071C07073F0EULL, 0x2301AD8EADADAC47ULL, 0x2FEA5A755A5AB0B4ULL, 0xB56C83368383EF1BULL, 0xFF8533CC3333B666ULL, 0xF23F639163635CC6ULL, 0x0A10020802021204ULL, 0x3839AA92AAAA9349ULL, 0xA8AF71D97171DEE2ULL, 0xCF0EC807C8C8C68DULL, 0x7DC819641919D132ULL, 0x7072493949493B92ULL, 0x9A86D943D9D95FAFULL, 0x1DC3F2EFF2F231F9ULL, 0x484BE3ABE3E3A8DBULL, 0x2AE25B715B5BB9B6ULL, 0x9234881A8888BC0DULL, 0xC8A49A529A9A3E29ULL, 0xBE2D269826260B4CULL, 0xFA8D32C83232BF64ULL, 0x4AE9B0FAB0B0597DULL, 0x6A1BE983E9E9F2CFULL, 0x33780F3C0F0F771EULL, 0xA6E6D573D5D533B7ULL, 0xBA74803A8080F41DULL, 0x7C99BEC2BEBE2761ULL, 0xDE26CD13CDCDEB87ULL, 0xE4BD34D034348968ULL, 0x757A483D48483290ULL, 0x24ABFFDBFFFF54E3ULL, 0x8FF77AF57A7A8DF4ULL, 0xEAF4907A9090643DULL, 0x3EC25F615F5F9DBEULL, 0xA01D208020203D40ULL, 0xD56768BD68680FD0ULL, 0x72D01A681A1ACA34ULL, 0x2C19AE82AEAEB741ULL, 0x5EC9B4EAB4B47D75ULL, 0x199A544D5454CEA8ULL, 0xE5EC937693937F3BULL, 0xAA0D228822222F44ULL, 0xE907648D646463C8ULL, 0x12DBF1E3F1F12AFFULL, 0xA2BF73D17373CCE6ULL, 0x5A90124812128224ULL, 0x5D3A401D40407A80ULL, 0x2840082008084810ULL, 0xE856C32BC3C3959BULL, 0x7B33EC97ECECDFC5ULL, 0x9096DB4BDBDB4DABULL, 0x1F61A1BEA1A1C05FULL, 0x831C8D0E8D8D9107ULL, 0xC9F53DF43D3DC87AULL, 0xF1CC976697975B33ULL, 0x0000000000000000ULL, 0xD436CF1BCFCFF983ULL, 0x87452BAC2B2B6E56ULL, 0xB39776C57676E1ECULL, 0xB06482328282E619ULL, 0xA9FED67FD6D628B1ULL, 0x77D81B6C1B1BC336ULL, 0x5BC1B5EEB5B57477ULL, 0x2911AF86AFAFBE43ULL, 0xDF776AB56A6A1DD4ULL, 0x0DBA505D5050EAA0ULL, 0x4C1245094545578AULL, 0x18CBF3EBF3F338FBULL, 0xF09D30C03030AD60ULL, 0x742BEF9BEFEFC4C3ULL, 0xC3E53FFC3F3FDA7EULL, 0x1C9255495555C7AAULL, 0x1079A2B2A2A2DB59ULL, 0x6503EA8FEAEAE9C9ULL, 0xEC0F658965656ACAULL, 0x68B9BAD2BABA0369ULL, 0x93652FBC2F2F4A5EULL, 0xE74EC027C0C08E9DULL, 0x81BEDE5FDEDE60A1ULL, 0x6CE01C701C1CFC38ULL, 0x2EBBFDD3FDFD46E7ULL, 0x64524D294D4D1F9AULL, 0xE0E4927292927639ULL, 0xBC8F75C97575FAEAULL, 0x1E3006180606360CULL, 0x98248A128A8AAE09ULL, 0x40F9B2F2B2B24B79ULL, 0x5963E6BFE6E685D1ULL, 0x36700E380E0E7E1CULL, 0x63F81F7C1F1FE73EULL, 0xF7376295626255C4ULL, 0xA3EED477D4D43AB5ULL, 0x3229A89AA8A8814DULL, 0xF4C4966296965231ULL, 0x3A9BF9C3F9F962EFULL, 0xF666C533C5C5A397ULL, 0xB13525942525104AULL, 0x20F259795959ABB2ULL, 0xAE54842A8484D015ULL, 0xA7B772D57272C5E4ULL, 0xDDD539E43939EC72ULL, 0x615A4C2D4C4C1698ULL, 0x3BCA5E655E5E94BCULL, 0x85E778FD78789FF0ULL, 0xD8DD38E03838E570ULL, 0x86148C0A8C8C9805ULL, 0xB2C6D163D1D117BFULL, 0x0B41A5AEA5A5E457ULL, 0x4D43E2AFE2E2A1D9ULL, 0xF82F619961614EC2ULL, 0x45F1B3F6B3B3427BULL, 0xA515218421213442ULL, 0xD6949C4A9C9C0825ULL, 0x66F01E781E1EEE3CULL, 0x5222431143436186ULL, 0xFC76C73BC7C7B193ULL, 0x2BB3FCD7FCFC4FE5ULL, 0x1420041004042408ULL, 0x08B251595151E3A2ULL, 0xC7BC995E9999252FULL, 0xC44F6DA96D6D22DAULL, 0x39680D340D0D651AULL, 0x3583FACFFAFA79E9ULL, 0x84B6DF5BDFDF69A3ULL, 0x9BD77EE57E7EA9FCULL, 0xB43D249024241948ULL, 0xD7C53BEC3B3BFE76ULL, 0x3D31AB96ABAB9A4BULL, 0xD13ECE1FCECEF081ULL, 0x5588114411119922ULL, 0x890C8F068F8F8303ULL, 0x6B4A4E254E4E049CULL, 0x51D1B7E6B7B76673ULL, 0x600BEB8BEBEBE0CBULL, 0xCCFD3CF03C3CC178ULL, 0xBF7C813E8181FD1FULL, 0xFED4946A94944035ULL, 0x0CEBF7FBF7F71CF3ULL, 0x67A1B9DEB9B9186FULL, 0x5F98134C13138B26ULL, 0x9C7D2CB02C2C5158ULL, 0xB8D6D36BD3D305BBULL, 0x5C6BE7BBE7E78CD3ULL, 0xCB576EA56E6E39DCULL, 0xF36EC437C4C4AA95ULL, 0x0F18030C03031B06ULL, 0x138A56455656DCACULL, 0x491A440D44445E88ULL, 0x9EDF7FE17F7FA0FEULL, 0x3721A99EA9A9884FULL, 0x824D2AA82A2A6754ULL, 0x6DB1BBD6BBBB0A6BULL, 0xE246C123C1C1879FULL, 0x02A253515353F1A6ULL, 0x8BAEDC57DCDC72A5ULL, 0x27580B2C0B0B5316ULL, 0xD39C9D4E9D9D0127ULL, 0xC1476CAD6C6C2BD8ULL, 0xF59531C43131A462ULL, 0xB98774CD7474F3E8ULL, 0x09E3F6FFF6F615F1ULL, 0x430A460546464C8CULL, 0x2609AC8AACACA545ULL, 0x973C891E8989B50FULL, 0x44A014501414B428ULL, 0x425BE1A3E1E1BADFULL, 0x4EB016581616A62CULL, 0xD2CD3AE83A3AF774ULL, 0xD06F69B9696906D2ULL, 0x2D48092409094112ULL, 0xADA770DD7070D7E0ULL, 0x54D9B6E2B6B66F71ULL, 0xB7CED067D0D01EBDULL, 0x7E3BED93EDEDD6C7ULL, 0xDB2ECC17CCCCE285ULL, 0x572A421542426884ULL, 0xC2B4985A98982C2DULL, 0x0E49A4AAA4A4ED55ULL, 0x885D28A028287550ULL, 0x31DA5C6D5C5C86B8ULL, 0x3F93F8C7F8F86BEDULL, 0xA44486228686C211ULL,

0xC018601818D83078ULL, 0x05238C23232646AFULL, 0x7EC63FC6C6B891F9ULL, 0x13E887E8E8FBCD6FULL, 0x4C87268787CB13A1ULL, 0xA9B8DAB8B8116D62ULL, 0x0801040101090205ULL, 0x424F214F4F0D9E6EULL, 0xAD36D836369B6CEEULL, 0x59A6A2A6A6FF5104ULL, 0xDED26FD2D20CB9BDULL, 0xFBF5F3F5F50EF706ULL, 0xEF79F9797996F280ULL, 0x5F6FA16F6F30DECEULL, 0xFC917E91916D3FEFULL, 0xAA52555252F8A407ULL, 0x27609D606047C0FDULL, 0x89BCCABCBC356576ULL, 0xAC9B569B9B372BCDULL, 0x048E028E8E8A018CULL, 0x71A3B6A3A3D25B15ULL, 0x600C300C0C6C183CULL, 0xFF7BF17B7B84F68AULL, 0xB535D43535806AE1ULL, 0xE81D741D1DF53A69ULL, 0x53E0A7E0E0B3DD47ULL, 0xF6D77BD7D721B3ACULL, 0x5EC22FC2C29C99EDULL, 0x6D2EB82E2E435C96ULL, 0x624B314B4B29967AULL, 0xA3FEDFFEFE5DE121ULL, 0x8257415757D5AE16ULL, 0xA815541515BD2A41ULL, 0x9F77C17777E8EEB6ULL, 0xA537DC3737926EEBULL, 0x7BE5B3E5E59ED756ULL, 0x8C9F469F9F1323D9ULL, 0xD3F0E7F0F023FD17ULL, 0x6A4A354A4A20947FULL, 0x9EDA4FDADA44A995ULL, 0xFA587D5858A2B025ULL, 0x06C903C9C9CF8FCAULL, 0x5529A429297C528DULL, 0x500A280A0A5A1422ULL, 0xE1B1FEB1B1507F4FULL, 0x69A0BAA0A0C95D1AULL, 0x7F6BB16B6B14D6DAULL, 0x5C852E8585D917ABULL, 0x81BDCEBDBD3C6773ULL, 0xD25D695D5D8FBA34ULL, 0x8010401010902050ULL, 0xF3F4F7F4F407F503ULL, 0x16CB0BCBCBDD8BC0ULL, 0xED3EF83E3ED37CC6ULL, 0x28051405052D0A11ULL, 0x1F6781676778CEE6ULL, 0x73E4B7E4E497D553ULL, 0x25279C2727024EBBULL, 0x3241194141738258ULL, 0x2C8B168B8BA70B9DULL, 0x51A7A6A7A7F65301ULL, 0xCF7DE97D7DB2FA94ULL, 0xDC956E95954937FBULL, 0x8ED847D8D856AD9FULL, 0x8BFBCBFBFB70EB30ULL, 0x23EE9FEEEECDC171ULL, 0xC77CED7C7CBBF891ULL, 0x176685666671CCE3ULL, 0xA6DD53DDDD7BA78EULL, 0xB8175C1717AF2E4BULL, 0x0247014747458E46ULL, 0x849E429E9E1A21DCULL, 0x1ECA0FCACAD489C5ULL, 0x752DB42D2D585A99ULL, 0x91BFC6BFBF2E6379ULL, 0x38071C07073F0E1BULL, 0x01AD8EADADAC4723ULL, 0xEA5A755A5AB0B42FULL, 0x6C83368383EF1BB5ULL, 0x8533CC3333B666FFULL, 0x3F639163635CC6F2ULL, 0x100208020212040AULL, 0x39AA92AAAA934938ULL, 0xAF71D97171DEE2A8ULL, 0x0EC807C8C8C68DCFULL, 0xC819641919D1327DULL, 0x72493949493B9270ULL, 0x86D943D9D95FAF9AULL, 0xC3F2EFF2F231F91DULL, 0x4BE3ABE3E3A8DB48ULL, 0xE25B715B5BB9B62AULL, 0x34881A8888BC0D92ULL, 0xA49A529A9A3E29C8ULL, 0x2D269826260B4CBEULL, 0x8D32C83232BF64FAULL, 0xE9B0FAB0B0597D4AULL, 0x1BE983E9E9F2CF6AULL, 0x780F3C0F0F771E33ULL, 0xE6D573D5D533B7A6ULL, 0x74803A8080F41DBAULL, 0x99BEC2BEBE27617CULL, 0x26CD13CDCDEB87DEULL, 0xBD34D034348968E4ULL, 0x7A483D4848329075ULL, 0xABFFDBFFFF54E324ULL, 0xF77AF57A7A8DF48FULL, 0xF4907A9090643DEAULL, 0xC25F615F5F9DBE3EULL, 0x1D208020203D40A0ULL, 0x6768BD68680FD0D5ULL, 0xD01A681A1ACA3472ULL, 0x19AE82AEAEB7412CULL, 0xC9B4EAB4B47D755EULL, 0x9A544D5454CEA819ULL, 0xEC937693937F3BE5ULL, 0x0D228822222F44AAULL, 0x07648D646463C8E9ULL, 0xDBF1E3F1F12AFF12ULL, 0xBF73D17373CCE6A2ULL, 0x901248121282245AULL, 0x3A401D40407A805DULL, 0x4008200808481028ULL, 0x56C32BC3C3959BE8ULL, 0x33EC97ECECDFC57BULL, 0x96DB4BDBDB4DAB90ULL, 0x61A1BEA1A1C05F1FULL, 0x1C8D0E8D8D910783ULL, 0xF53DF43D3DC87AC9ULL, 0xCC976697975B33F1ULL, 0x0000000000000000ULL, 0x36CF1BCFCFF983D4ULL, 0x452BAC2B2B6E5687ULL, 0x9776C57676E1ECB3ULL, 0x6482328282E619B0ULL, 0xFED67FD6D628B1A9ULL, 0xD81B6C1B1BC33677ULL, 0xC1B5EEB5B574775BULL, 0x11AF86AFAFBE4329ULL, 0x776AB56A6A1DD4DFULL, 0xBA505D5050EAA00DULL, 0x1245094545578A4CULL, 0xCBF3EBF3F338FB18ULL, 0x9D30C03030AD60F0ULL, 0x2BEF9BEFEFC4C374ULL, 0xE53FFC3F3FDA7EC3ULL, 0x9255495555C7AA1CULL, 0x79A2B2A2A2DB5910ULL, 0x03EA8FEAEAE9C965ULL, 0x0F658965656ACAECULL, 0xB9BAD2BABA036968ULL, 0x652FBC2F2F4A5E93ULL, 0x4EC027C0C08E9DE7ULL, 0xBEDE5FDEDE60A181ULL, 0xE01C701C1CFC386CULL, 0xBBFDD3FDFD46E72EULL, 0x524D294D4D1F9A64ULL, 0xE4927292927639E0ULL, 0x8F75C97575FAEABCULL, 0x3006180606360C1EULL, 0x248A128A8AAE0998ULL, 0xF9B2F2B2B24B7940ULL, 0x63E6BFE6E685D159ULL, 0x700E380E0E7E1C36ULL, 0xF81F7C1F1FE73E63ULL, 0x376295626255C4F7ULL, 0xEED477D4D43AB5A3ULL, 0x29A89AA8A8814D32ULL, 0xC4966296965231F4ULL, 0x9BF9C3F9F962EF3AULL, 0x66C533C5C5A397F6ULL, 0x3525942525104AB1ULL, 0xF259795959ABB220ULL, 0x54842A8484D015AEULL, 0xB772D57272C5E4A7ULL, 0xD539E43939EC72DDULL, 0x5A4C2D4C4C169861ULL, 0xCA5E655E5E94BC3BULL, 0xE778FD78789FF085ULL, 0xDD38E03838E570D8ULL, 0x148C0A8C8C980586ULL, 0xC6D163D1D117BFB2ULL, 0x41A5AEA5A5E4570BULL, 0x43E2AFE2E2A1D94DULL, 0x2F619961614EC2F8ULL, 0xF1B3F6B3B3427B45ULL, 0x15218421213442A5ULL, 0x949C4A9C9C0825D6ULL, 0xF01E781E1EEE3C66ULL, 0x2243114343618652ULL, 0x76C73BC7C7B193FCULL, 0xB3FCD7FCFC4FE52BULL, 0x2004100404240814ULL, 0xB251595151E3A208ULL, 0xBC995E9999252FC7ULL, 0x4F6DA96D6D22DAC4ULL, 0x680D340D0D651A39ULL, 0x83FACFFAFA79E935ULL, 0xB6DF5BDFDF69A384ULL, 0xD77EE57E7EA9FC9BULL, 0x3D249024241948B4ULL, 0xC53BEC3B3BFE76D7ULL, 0x31AB96ABAB9A4B3DULL, 0x3ECE1FCECEF081D1ULL, 0x8811441111992255ULL, 0x0C8F068F8F830389ULL, 0x4A4E254E4E049C6BULL, 0xD1B7E6B7B7667351ULL, 0x0BEB8BEBEBE0CB60ULL, 0xFD3CF03C3CC178CCULL, 0x7C813E8181FD1FBFULL, 0xD4946A94944035FEULL, 0xEBF7FBF7F71CF30CULL, 0xA1B9DEB9B9186F67ULL, 0x98134C13138B265FULL, 0x7D2CB02C2C51589CULL, 0xD6D36BD3D305BBB8ULL, 0x6BE7BBE7E78CD35CULL, 0x576EA56E6E39DCCBULL, 0x6EC437C4C4AA95F3ULL, 0x18030C03031B060FULL, 0x8A56455656DCAC13ULL, 0x1A440D44445E8849ULL, 0xDF7FE17F7FA0FE9EULL, 0x21A99EA9A9884F37ULL, 0x4D2AA82A2A675482ULL, 0xB1BBD6BBBB0A6B6DULL, 0x46C123C1C1879FE2ULL, 0xA253515353F1A602ULL, 0xAEDC57DCDC72A58BULL, 0x580B2C0B0B531627ULL, 0x9C9D4E9D9D0127D3ULL, 0x476CAD6C6C2BD8C1ULL, 0x9531C43131A462F5ULL, 0x8774CD7474F3E8B9ULL, 0xE3F6FFF6F615F109ULL, 0x0A460546464C8C43ULL, 0x09AC8AACACA54526ULL, 0x3C891E8989B50F97ULL, 0xA014501414B42844ULL, 0x5BE1A3E1E1BADF42ULL, 0xB016581616A62C4EULL, 0xCD3AE83A3AF774D2ULL, 0x6F69B9696906D2D0ULL, 0x480924090941122DULL, 0xA770DD7070D7E0ADULL, 0xD9B6E2B6B66F7154ULL, 0xCED067D0D01EBDB7ULL, 0x3BED93EDEDD6C77EULL, 0x2ECC17CCCCE285DBULL, 0x2A42154242688457ULL, 0xB4985A98982C2DC2ULL, 0x49A4AAA4A4ED550EULL, 0x5D28A02828755088ULL, 0xDA5C6D5C5C86B831ULL, 0x93F8C7F8F86BED3FULL, 0x4486228686C211A4ULL,

0x18601818D83078C0ULL, 0x238C23232646AF05ULL, 0xC63FC6C6B891F97EULL, 0xE887E8E8FBCD6F13ULL, 0x87268787CB13A14CULL, 0xB8DAB8B8116D62A9ULL, 0x0104010109020508ULL, 0x4F214F4F0D9E6E42ULL, 0x36D836369B6CEEADULL, 0xA6A2A6A6FF510459ULL, 0xD26FD2D20CB9BDDEULL, 0xF5F3F5F50EF706FBULL, 0x79F9797996F280EFULL, 0x6FA16F6F30DECE5FULL, 0x917E91916D3FEFFCULL, 0x52555252F8A407AAULL, 0x609D606047C0FD27ULL, 0xBCCABCBC35657689ULL, 0x9B569B9B372BCDACULL, 0x8E028E8E8A018C04ULL, 0xA3B6A3A3D25B1571ULL, 0x0C300C0C6C183C60ULL, 0x7BF17B7B84F68AFFULL, 0x35D43535806AE1B5ULL, 0x1D741D1DF53A69E8ULL, 0xE0A7E0E0B3DD4753ULL, 0xD77BD7D721B3ACF6ULL, 0xC22FC2C29C99ED5EULL, 0x2EB82E2E435C966DULL, 0x4B314B4B29967A62ULL, 0xFEDFFEFE5DE121A3ULL, 0x57415757D5AE1682ULL, 0x15541515BD2A41A8ULL, 0x77C17777E8EEB69FULL, 0x37DC3737926EEBA5ULL, 0xE5B3E5E59ED7567BULL, 0x9F469F9F1323D98CULL, 0xF0E7F0F023FD17D3ULL, 0x4A354A4A20947F6AULL, 0xDA4FDADA44A9959EULL, 0x587D5858A2B025FAULL, 0xC903C9C9CF8FCA06ULL, 0x29A429297C528D55ULL, 0x0A280A0A5A142250ULL, 0xB1FEB1B1507F4FE1ULL, 0xA0BAA0A0C95D1A69ULL, 0x6BB16B6B14D6DA7FULL, 0x852E8585D917AB5CULL, 0xBDCEBDBD3C677381ULL, 0x5D695D5D8FBA34D2ULL, 0x1040101090205080ULL, 0xF4F7F4F407F503F3ULL, 0xCB0BCBCBDD8BC016ULL, 0x3EF83E3ED37CC6EDULL, 0x051405052D0A1128ULL, 0x6781676778CEE61FULL, 0xE4B7E4E497D55373ULL, 0x279C2727024EBB25ULL, 0x4119414173825832ULL, 0x8B168B8BA70B9D2CULL, 0xA7A6A7A7F6530151ULL, 0x7DE97D7DB2FA94CFULL, 0x956E95954937FBDCULL, 0xD847D8D856AD9F8EULL, 0xFBCBFBFB70EB308BULL, 0xEE9FEEEECDC17123ULL, 0x7CED7C7CBBF891C7ULL, 0x6685666671CCE317ULL, 0xDD53DDDD7BA78EA6ULL, 0x175C1717AF2E4BB8ULL, 0x47014747458E4602ULL, 0x9E429E9E1A21DC84ULL, 0xCA0FCACAD489C51EULL, 0x2DB42D2D585A9975ULL, 0xBFC6BFBF2E637991ULL, 0x071C07073F0E1B38ULL, 0xAD8EADADAC472301ULL, 0x5A755A5AB0B42FEAULL, 0x83368383EF1BB56CULL, 0x33CC3333B666FF85ULL, 0x639163635CC6F23FULL, 0x0208020212040A10ULL, 0xAA92AAAA93493839ULL, 0x71D97171DEE2A8AFULL, 0xC807C8C8C68DCF0EULL, 0x19641919D1327DC8ULL, 0x493949493B927072ULL, 0xD943D9D95FAF9A86ULL, 0xF2EFF2F231F91DC3ULL, 0xE3ABE3E3A8DB484BULL, 0x5B715B5BB9B62AE2ULL, 0x881A8888BC0D9234ULL, 0x9A529A9A3E29C8A4ULL, 0x269826260B4CBE2DULL, 0x32C83232BF64FA8DULL, 0xB0FAB0B0597D4AE9ULL, 0xE983E9E9F2CF6A1BULL, 0x0F3C0F0F771E3378ULL, 0xD573D5D533B7A6E6ULL, 0x803A8080F41DBA74ULL, 0xBEC2BEBE27617C99ULL, 0xCD13CDCDEB87DE26ULL, 0x34D034348968E4BDULL, 0x483D48483290757AULL, 0xFFDBFFFF54E324ABULL, 0x7AF57A7A8DF48FF7ULL, 0x907A9090643DEAF4ULL, 0x5F615F5F9DBE3EC2ULL, 0x208020203D40A01DULL, 0x68BD68680FD0D567ULL, 0x1A681A1ACA3472D0ULL, 0xAE82AEAEB7412C19ULL, 0xB4EAB4B47D755EC9ULL, 0x544D5454CEA8199AULL, 0x937693937F3BE5ECULL, 0x228822222F44AA0DULL, 0x648D646463C8E907ULL, 0xF1E3F1F12AFF12DBULL, 0x73D17373CCE6A2BFULL, 0x1248121282245A90ULL, 0x401D40407A805D3AULL, 0x0820080848102840ULL, 0xC32BC3C3959BE856ULL, 0xEC97ECECDFC57B33ULL, 0xDB4BDBDB4DAB9096ULL, 0xA1BEA1A1C05F1F61ULL, 0x8D0E8D8D9107831CULL, 0x3DF43D3DC87AC9F5ULL, 0x976697975B33F1CCULL, 0x0000000000000000ULL, 0xCF1BCFCFF983D436ULL, 0x2BAC2B2B6E568745ULL, 0x76C57676E1ECB397ULL, 0x82328282E619B064ULL, 0xD67FD6D628B1A9FEULL, 0x1B6C1B1BC33677D8ULL, 0xB5EEB5B574775BC1ULL, 0xAF86AFAFBE432911ULL, 0x6AB56A6A1DD4DF77ULL, 0x505D5050EAA00DBAULL, 0x45094545578A4C12ULL, 0xF3EBF3F338FB18CBULL, 0x30C03030AD60F09DULL, 0xEF9BEFEFC4C3742BULL, 0x3FFC3F3FDA7EC3E5ULL, 0x55495555C7AA1C92ULL, 0xA2B2A2A2DB591079ULL, 0xEA8FEAEAE9C96503ULL, 0x658965656ACAEC0FULL, 0xBAD2BABA036968B9ULL, 0x2FBC2F2F4A5E9365ULL, 0xC027C0C08E9DE74EULL, 0xDE5FDEDE60A181BEULL, 0x1C701C1CFC386CE0ULL, 0xFDD3FDFD46E72EBBULL, 0x4D294D4D1F9A6452ULL, 0x927292927639E0E4ULL, 0x75C97575FAEABC8FULL, 0x06180606360C1E30ULL, 0x8A128A8AAE099824ULL, 0xB2F2B2B24B7940F9ULL, 0xE6BFE6E685D15963ULL, 0x0E380E0E7E1C3670ULL, 0x1F7C1F1FE73E63F8ULL, 0x6295626255C4F737ULL, 0xD477D4D43AB5A3EEULL, 0xA89AA8A8814D3229ULL, 0x966296965231F4C4ULL, 0xF9C3F9F962EF3A9BULL, 0xC533C5C5A397F666ULL, 0x25942525104AB135ULL, 0x59795959ABB220F2ULL, 0x842A8484D015AE54ULL, 0x72D57272C5E4A7B7ULL, 0x39E43939EC72DDD5ULL, 0x4C2D4C4C1698615AULL, 0x5E655E5E94BC3BCAULL, 0x78FD78789FF085E7ULL, 0x38E03838E570D8DDULL, 0x8C0A8C8C98058614ULL, 0xD163D1D117BFB2C6ULL, 0xA5AEA5A5E4570B41ULL, 0xE2AFE2E2A1D94D43ULL, 0x619961614EC2F82FULL, 0xB3F6B3B3427B45F1ULL, 0x218421213442A515ULL, 0x9C4A9C9C0825D694ULL, 0x1E781E1EEE3C66F0ULL, 0x4311434361865222ULL, 0xC73BC7C7B193FC76ULL, 0xFCD7FCFC4FE52BB3ULL, 0x0410040424081420ULL, 0x51595151E3A208B2ULL, 0x995E9999252FC7BCULL, 0x6DA96D6D22DAC44FULL, 0x0D340D0D651A3968ULL, 0xFACFFAFA79E93583ULL, 0xDF5BDFDF69A384B6ULL, 0x7EE57E7EA9FC9BD7ULL, 0x249024241948B43DULL, 0x3BEC3B3BFE76D7C5ULL, 0xAB96ABAB9A4B3D31ULL, 0xCE1FCECEF081D13EULL, 0x1144111199225588ULL, 0x8F068F8F8303890CULL, 0x4E254E4E049C6B4AULL, 0xB7E6B7B7667351D1ULL, 0xEB8BEBEBE0CB600BULL, 0x3CF03C3CC178CCFDULL, 0x813E8181FD1FBF7CULL, 0x946A94944035FED4ULL, 0xF7FBF7F71CF30CEBULL, 0xB9DEB9B9186F67A1ULL, 0x134C13138B265F98ULL, 0x2CB02C2C51589C7DULL, 0xD36BD3D305BBB8D6ULL, 0xE7BBE7E78CD35C6BULL, 0x6EA56E6E39DCCB57ULL, 0xC437C4C4AA95F36EULL, 0x030C03031B060F18ULL, 0x56455656DCAC138AULL, 0x440D44445E88491AULL, 0x7FE17F7FA0FE9EDFULL, 0xA99EA9A9884F3721ULL, 0x2AA82A2A6754824DULL, 0xBBD6BBBB0A6B6DB1ULL, 0xC123C1C1879FE246ULL, 0x53515353F1A602A2ULL, 0xDC57DCDC72A58BAEULL, 0x0B2C0B0B53162758ULL, 0x9D4E9D9D0127D39CULL, 0x6CAD6C6C2BD8C147ULL, 0x31C43131A462F595ULL, 0x74CD7474F3E8B987ULL, 0xF6FFF6F615F109E3ULL, 0x460546464C8C430AULL, 0xAC8AACACA5452609ULL, 0x891E8989B50F973CULL, 0x14501414B42844A0ULL, 0xE1A3E1E1BADF425BULL, 0x16581616A62C4EB0ULL, 0x3AE83A3AF774D2CDULL, 0x69B9696906D2D06FULL, 0x0924090941122D48ULL, 0x70DD7070D7E0ADA7ULL, 0xB6E2B6B66F7154D9ULL, 0xD067D0D01EBDB7CEULL, 0xED93EDEDD6C77E3BULL, 0xCC17CCCCE285DB2EULL, 0x421542426884572AULL, 0x985A98982C2DC2B4ULL, 0xA4AAA4A4ED550E49ULL, 0x28A028287550885DULL, 0x5C6D5C5C86B831DAULL, 0xF8C7F8F86BED3F93ULL, 0x86228686C211A444ULL,

0x601818D83078C018ULL, 0x8C23232646AF0523ULL, 0x3FC6C6B891F97EC6ULL, 0x87E8E8FBCD6F13E8ULL, 0x268787CB13A14C87ULL, 0xDAB8B8116D62A9B8ULL, 0x0401010902050801ULL, 0x214F4F0D9E6E424FULL, 0xD836369B6CEEAD36ULL, 0xA2A6A6FF510459A6ULL, 0x6FD2D20CB9BDDED2ULL, 0xF3F5F50EF706FBF5ULL, 0xF9797996F280EF79ULL, 0xA16F6F30DECE5F6FULL, 0x7E91916D3FEFFC91ULL, 0x555252F8A407AA52ULL, 0x9D606047C0FD2760ULL, 0xCABCBC35657689BCULL, 0x569B9B372BCDAC9BULL, 0x028E8E8A018C048EULL, 0xB6A3A3D25B1571A3ULL, 0x300C0C6C183C600CULL, 0xF17B7B84F68AFF7BULL, 0xD43535806AE1B535ULL, 0x741D1DF53A69E81DULL, 0xA7E0E0B3DD4753E0ULL, 0x7BD7D721B3ACF6D7ULL, 0x2FC2C29C99ED5EC2ULL, 0xB82E2E435C966D2EULL, 0x314B4B29967A624BULL, 0xDFFEFE5DE121A3FEULL, 0x415757D5AE168257ULL, 0x541515BD2A41A815ULL, 0xC17777E8EEB69F77ULL, 0xDC3737926EEBA537ULL, 0xB3E5E59ED7567BE5ULL, 0x469F9F1323D98C9FULL, 0xE7F0F023FD17D3F0ULL, 0x354A4A20947F6A4AULL, 0x4FDADA44A9959EDAULL, 0x7D5858A2B025FA58ULL, 0x03C9C9CF8FCA06C9ULL, 0xA429297C528D5529ULL, 0x280A0A5A1422500AULL, 0xFEB1B1507F4FE1B1ULL, 0xBAA0A0C95D1A69A0ULL, 0xB16B6B14D6DA7F6BULL, 0x2E8585D917AB5C85ULL, 0xCEBDBD3C677381BDULL, 0x695D5D8FBA34D25DULL, 0x4010109020508010ULL, 0xF7F4F407F503F3F4ULL, 0x0BCBCBDD8BC016CBULL, 0xF83E3ED37CC6ED3EULL, 0x1405052D0A112805ULL, 0x81676778CEE61F67ULL, 0xB7E4E497D55373E4ULL, 0x9C2727024EBB2527ULL, 0x1941417382583241ULL, 0x168B8BA70B9D2C8BULL, 0xA6A7A7F6530151A7ULL, 0xE97D7DB2FA94CF7DULL, 0x6E95954937FBDC95ULL, 0x47D8D856AD9F8ED8ULL, 0xCBFBFB70EB308BFBULL, 0x9FEEEECDC17123EEULL, 0xED7C7CBBF891C77CULL, 0x85666671CCE31766ULL, 0x53DDDD7BA78EA6DDULL, 0x5C1717AF2E4BB817ULL, 0x014747458E460247ULL, 0x429E9E1A21DC849EULL, 0x0FCACAD489C51ECAULL, 0xB42D2D585A99752DULL, 0xC6BFBF2E637991BFULL, 0x1C07073F0E1B3807ULL, 0x8EADADAC472301ADULL, 0x755A5AB0B42FEA5AULL, 0x368383EF1BB56C83ULL, 0xCC3333B666FF8533ULL, 0x9163635CC6F23F63ULL, 0x08020212040A1002ULL, 0x92AAAA93493839AAULL, 0xD97171DEE2A8AF71ULL, 0x07C8C8C68DCF0EC8ULL, 0x641919D1327DC819ULL, 0x3949493B92707249ULL, 0x43D9D95FAF9A86D9ULL, 0xEFF2F231F91DC3F2ULL, 0xABE3E3A8DB484BE3ULL, 0x715B5BB9B62AE25BULL, 0x1A8888BC0D923488ULL, 0x529A9A3E29C8A49AULL, 0x9826260B4CBE2D26ULL, 0xC83232BF64FA8D32ULL, 0xFAB0B0597D4AE9B0ULL, 0x83E9E9F2CF6A1BE9ULL, 0x3C0F0F771E33780FULL, 0x73D5D533B7A6E6D5ULL, 0x3A8080F41DBA7480ULL, 0xC2BEBE27617C99BEULL, 0x13CDCDEB87DE26CDULL, 0xD034348968E4BD34ULL, 0x3D48483290757A48ULL, 0xDBFFFF54E324ABFFULL, 0xF57A7A8DF48FF77AULL, 0x7A9090643DEAF490ULL, 0x615F5F9DBE3EC25FULL, 0x8020203D40A01D20ULL, 0xBD68680FD0D56768ULL, 0x681A1ACA3472D01AULL, 0x82AEAEB7412C19AEULL, 0xEAB4B47D755EC9B4ULL, 0x4D5454CEA8199A54ULL, 0x7693937F3BE5EC93ULL, 0x8822222F44AA0D22ULL, 0x8D646463C8E90764ULL, 0xE3F1F12AFF12DBF1ULL, 0xD17373CCE6A2BF73ULL, 0x48121282245A9012ULL, 0x1D40407A805D3A40ULL, 0x2008084810284008ULL, 0x2BC3C3959BE856C3ULL, 0x97ECECDFC57B33ECULL, 0x4BDBDB4DAB9096DBULL, 0xBEA1A1C05F1F61A1ULL, 0x0E8D8D9107831C8DULL, 0xF43D3DC87AC9F53DULL, 0x6697975B33F1CC97ULL, 0x0000000000000000ULL, 0x1BCFCFF983D436CFULL, 0xAC2B2B6E5687452BULL, 0xC57676E1ECB39776ULL, 0x328282E619B06482ULL, 0x7FD6D628B1A9FED6ULL, 0x6C1B1BC33677D81BULL, 0xEEB5B574775BC1B5ULL, 0x86AFAFBE432911AFULL, 0xB56A6A1DD4DF776AULL, 0x5D5050EAA00DBA50ULL, 0x094545578A4C1245ULL, 0xEBF3F338FB18CBF3ULL, 0xC03030AD60F09D30ULL, 0x9BEFEFC4C3742BEFULL, 0xFC3F3FDA7EC3E53FULL, 0x495555C7AA1C9255ULL, 0xB2A2A2DB591079A2ULL, 0x8FEAEAE9C96503EAULL, 0x8965656ACAEC0F65ULL, 0xD2BABA036968B9BAULL, 0xBC2F2F4A5E93652FULL, 0x27C0C08E9DE74EC0ULL, 0x5FDEDE60A181BEDEULL, 0x701C1CFC386CE01CULL, 0xD3FDFD46E72EBBFDULL, 0x294D4D1F9A64524DULL, 0x7292927639E0E492ULL, 0xC97575FAEABC8F75ULL, 0x180606360C1E3006ULL, 0x128A8AAE0998248AULL, 0xF2B2B24B7940F9B2ULL, 0xBFE6E685D15963E6ULL, 0x380E0E7E1C36700EULL, 0x7C1F1FE73E63F81FULL, 0x95626255C4F73762ULL, 0x77D4D43AB5A3EED4ULL, 0x9AA8A8814D3229A8ULL, 0x6296965231F4C496ULL, 0xC3F9F962EF3A9BF9ULL, 0x33C5C5A397F666C5ULL, 0x942525104AB13525ULL, 0x795959ABB220F259ULL, 0x2A8484D015AE5484ULL, 0xD57272C5E4A7B772ULL, 0xE43939EC72DDD539ULL, 0x2D4C4C1698615A4CULL, 0x655E5E94BC3BCA5EULL, 0xFD78789FF085E778ULL, 0xE03838E570D8DD38ULL, 0x0A8C8C980586148CULL, 0x63D1D117BFB2C6D1ULL, 0xAEA5A5E4570B41A5ULL, 0xAFE2E2A1D94D43E2ULL, 0x9961614EC2F82F61ULL, 0xF6B3B3427B45F1B3ULL, 0x8421213442A51521ULL, 0x4A9C9C0825D6949CULL, 0x781E1EEE3C66F01EULL, 0x1143436186522243ULL, 0x3BC7C7B193FC76C7ULL, 0xD7FCFC4FE52BB3FCULL, 0x1004042408142004ULL, 0x595151E3A208B251ULL, 0x5E9999252FC7BC99ULL, 0xA96D6D22DAC44F6DULL, 0x340D0D651A39680DULL, 0xCFFAFA79E93583FAULL, 0x5BDFDF69A384B6DFULL, 0xE57E7EA9FC9BD77EULL, 0x9024241948B43D24ULL, 0xEC3B3BFE76D7C53BULL, 0x96ABAB9A4B3D31ABULL, 0x1FCECEF081D13ECEULL, 0x4411119922558811ULL, 0x068F8F8303890C8FULL, 0x254E4E049C6B4A4EULL, 0xE6B7B7667351D1B7ULL, 0x8BEBEBE0CB600BEBULL, 0xF03C3CC178CCFD3CULL, 0x3E8181FD1FBF7C81ULL, 0x6A94944035FED494ULL, 0xFBF7F71CF30CEBF7ULL, 0xDEB9B9186F67A1B9ULL, 0x4C13138B265F9813ULL, 0xB02C2C51589C7D2CULL, 0x6BD3D305BBB8D6D3ULL, 0xBBE7E78CD35C6BE7ULL, 0xA56E6E39DCCB576EULL, 0x37C4C4AA95F36EC4ULL, 0x0C03031B060F1803ULL, 0x455656DCAC138A56ULL, 0x0D44445E88491A44ULL, 0xE17F7FA0FE9EDF7FULL, 0x9EA9A9884F3721A9ULL, 0xA82A2A6754824D2AULL, 0xD6BBBB0A6B6DB1BBULL, 0x23C1C1879FE246C1ULL, 0x515353F1A602A253ULL, 0x57DCDC72A58BAEDCULL, 0x2C0B0B531627580BULL, 0x4E9D9D0127D39C9DULL, 0xAD6C6C2BD8C1476CULL, 0xC43131A462F59531ULL, 0xCD7474F3E8B98774ULL, 0xFFF6F615F109E3F6ULL, 0x0546464C8C430A46ULL, 0x8AACACA5452609ACULL, 0x1E8989B50F973C89ULL, 0x501414B42844A014ULL, 0xA3E1E1BADF425BE1ULL, 0x581616A62C4EB016ULL, 0xE83A3AF774D2CD3AULL, 0xB9696906D2D06F69ULL, 0x24090941122D4809ULL, 0xDD7070D7E0ADA770ULL, 0xE2B6B66F7154D9B6ULL, 0x67D0D01EBDB7CED0ULL, 0x93EDEDD6C77E3BEDULL, 0x17CCCCE285DB2ECCULL, 0x1542426884572A42ULL, 0x5A98982C2DC2B498ULL, 0xAAA4A4ED550E49A4ULL, 0xA028287550885D28ULL, 0x6D5C5C86B831DA5CULL, 0xC7F8F86BED3F93F8ULL, 0x228686C211A44486ULL,

0x1818D83078C01860ULL, 0x23232646AF05238CULL, 0xC6C6B891F97EC63FULL, 0xE8E8FBCD6F13E887ULL, 0x8787CB13A14C8726ULL, 0xB8B8116D62A9B8DAULL, 0x0101090205080104ULL, 0x4F4F0D9E6E424F21ULL, 0x36369B6CEEAD36D8ULL, 0xA6A6FF510459A6A2ULL, 0xD2D20CB9BDDED26FULL, 0xF5F50EF706FBF5F3ULL, 0x797996F280EF79F9ULL, 0x6F6F30DECE5F6FA1ULL, 0x91916D3FEFFC917EULL, 0x5252F8A407AA5255ULL, 0x606047C0FD27609DULL, 0xBCBC35657689BCCAULL, 0x9B9B372BCDAC9B56ULL, 0x8E8E8A018C048E02ULL, 0xA3A3D25B1571A3B6ULL, 0x0C0C6C183C600C30ULL, 0x7B7B84F68AFF7BF1ULL, 0x3535806AE1B535D4ULL, 0x1D1DF53A69E81D74ULL, 0xE0E0B3DD4753E0A7ULL, 0xD7D721B3ACF6D77BULL, 0xC2C29C99ED5EC22FULL, 0x2E2E435C966D2EB8ULL, 0x4B4B29967A624B31ULL, 0xFEFE5DE121A3FEDFULL, 0x5757D5AE16825741ULL, 0x1515BD2A41A81554ULL, 0x7777E8EEB69F77C1ULL, 0x3737926EEBA537DCULL, 0xE5E59ED7567BE5B3ULL, 0x9F9F1323D98C9F46ULL, 0xF0F023FD17D3F0E7ULL, 0x4A4A20947F6A4A35ULL, 0xDADA44A9959EDA4FULL, 0x5858A2B025FA587DULL, 0xC9C9CF8FCA06C903ULL, 0x29297C528D5529A4ULL, 0x0A0A5A1422500A28ULL, 0xB1B1507F4FE1B1FEULL, 0xA0A0C95D1A69A0BAULL, 0x6B6B14D6DA7F6BB1ULL, 0x8585D917AB5C852EULL, 0xBDBD3C677381BDCEULL, 0x5D5D8FBA34D25D69ULL, 0x1010902050801040ULL, 0xF4F407F503F3F4F7ULL, 0xCBCBDD8BC016CB0BULL, 0x3E3ED37CC6ED3EF8ULL, 0x05052D0A11280514ULL, 0x676778CEE61F6781ULL, 0xE4E497D55373E4B7ULL, 0x2727024EBB25279CULL, 0x4141738258324119ULL, 0x8B8BA70B9D2C8B16ULL, 0xA7A7F6530151A7A6ULL, 0x7D7DB2FA94CF7DE9ULL, 0x95954937FBDC956EULL, 0xD8D856AD9F8ED847ULL, 0xFBFB70EB308BFBCBULL, 0xEEEECDC17123EE9FULL, 0x7C7CBBF891C77CEDULL, 0x666671CCE3176685ULL, 0xDDDD7BA78EA6DD53ULL, 0x1717AF2E4BB8175CULL, 0x4747458E46024701ULL, 0x9E9E1A21DC849E42ULL, 0xCACAD489C51ECA0FULL, 0x2D2D585A99752DB4ULL, 0xBFBF2E637991BFC6ULL, 0x07073F0E1B38071CULL, 0xADADAC472301AD8EULL, 0x5A5AB0B42FEA5A75ULL, 0x8383EF1BB56C8336ULL, 0x3333B666FF8533CCULL, 0x63635CC6F23F6391ULL, 0x020212040A100208ULL, 0xAAAA93493839AA92ULL, 0x7171DEE2A8AF71D9ULL, 0xC8C8C68DCF0EC807ULL, 0x1919D1327DC81964ULL, 0x49493B9270724939ULL, 0xD9D95FAF9A86D943ULL, 0xF2F231F91DC3F2EFULL, 0xE3E3A8DB484BE3ABULL, 0x5B5BB9B62AE25B71ULL, 0x8888BC0D9234881AULL, 0x9A9A3E29C8A49A52ULL, 0x26260B4CBE2D2698ULL, 0x3232BF64FA8D32C8ULL, 0xB0B0597D4AE9B0FAULL, 0xE9E9F2CF6A1BE983ULL, 0x0F0F771E33780F3CULL, 0xD5D533B7A6E6D573ULL, 0x8080F41DBA74803AULL, 0xBEBE27617C99BEC2ULL, 0xCDCDEB87DE26CD13ULL, 0x34348968E4BD34D0ULL, 0x48483290757A483DULL, 0xFFFF54E324ABFFDBULL, 0x7A7A8DF48FF77AF5ULL, 0x9090643DEAF4907AULL, 0x5F5F9DBE3EC25F61ULL, 0x20203D40A01D2080ULL, 0x68680FD0D56768BDULL, 0x1A1ACA3472D01A68ULL, 0xAEAEB7412C19AE82ULL, 0xB4B47D755EC9B4EAULL, 0x5454CEA8199A544DULL, 0x93937F3BE5EC9376ULL, 0x22222F44AA0D2288ULL, 0x646463C8E907648DULL, 0xF1F12AFF12DBF1E3ULL, 0x7373CCE6A2BF73D1ULL, 0x121282245A901248ULL, 0x40407A805D3A401DULL, 0x0808481028400820ULL, 0xC3C3959BE856C32BULL, 0xECECDFC57B33EC97ULL, 0xDBDB4DAB9096DB4BULL, 0xA1A1C05F1F61A1BEULL, 0x8D8D9107831C8D0EULL, 0x3D3DC87AC9F53DF4ULL, 0x97975B33F1CC9766ULL, 0x0000000000000000ULL, 0xCFCFF983D436CF1BULL, 0x2B2B6E5687452BACULL, 0x7676E1ECB39776C5ULL, 0x8282E619B0648232ULL, 0xD6D628B1A9FED67FULL, 0x1B1BC33677D81B6CULL, 0xB5B574775BC1B5EEULL, 0xAFAFBE432911AF86ULL, 0x6A6A1DD4DF776AB5ULL, 0x5050EAA00DBA505DULL, 0x4545578A4C124509ULL, 0xF3F338FB18CBF3EBULL, 0x3030AD60F09D30C0ULL, 0xEFEFC4C3742BEF9BULL, 0x3F3FDA7EC3E53FFCULL, 0x5555C7AA1C925549ULL, 0xA2A2DB591079A2B2ULL, 0xEAEAE9C96503EA8FULL, 0x65656ACAEC0F6589ULL, 0xBABA036968B9BAD2ULL, 0x2F2F4A5E93652FBCULL, 0xC0C08E9DE74EC027ULL, 0xDEDE60A181BEDE5FULL, 0x1C1CFC386CE01C70ULL, 0xFDFD46E72EBBFDD3ULL, 0x4D4D1F9A64524D29ULL, 0x92927639E0E49272ULL, 0x7575FAEABC8F75C9ULL, 0x0606360C1E300618ULL, 0x8A8AAE0998248A12ULL, 0xB2B24B7940F9B2F2ULL, 0xE6E685D15963E6BFULL, 0x0E0E7E1C36700E38ULL, 0x1F1FE73E63F81F7CULL, 0x626255C4F7376295ULL, 0xD4D43AB5A3EED477ULL, 0xA8A8814D3229A89AULL, 0x96965231F4C49662ULL, 0xF9F962EF3A9BF9C3ULL, 0xC5C5A397F666C533ULL, 0x2525104AB1352594ULL, 0x5959ABB220F25979ULL, 0x8484D015AE54842AULL, 0x7272C5E4A7B772D5ULL, 0x3939EC72DDD539E4ULL, 0x4C4C1698615A4C2DULL, 0x5E5E94BC3BCA5E65ULL, 0x78789FF085E778FDULL, 0x3838E570D8DD38E0ULL, 0x8C8C980586148C0AULL, 0xD1D117BFB2C6D163ULL, 0xA5A5E4570B41A5AEULL, 0xE2E2A1D94D43E2AFULL, 0x61614EC2F82F6199ULL, 0xB3B3427B45F1B3F6ULL, 0x21213442A5152184ULL, 0x9C9C0825D6949C4AULL, 0x1E1EEE3C66F01E78ULL, 0x4343618652224311ULL, 0xC7C7B193FC76C73BULL, 0xFCFC4FE52BB3FCD7ULL, 0x0404240814200410ULL, 0x5151E3A208B25159ULL, 0x9999252FC7BC995EULL, 0x6D6D22DAC44F6DA9ULL, 0x0D0D651A39680D34ULL, 0xFAFA79E93583FACFULL, 0xDFDF69A384B6DF5BULL, 0x7E7EA9FC9BD77EE5ULL, 0x24241948B43D2490ULL, 0x3B3BFE76D7C53BECULL, 0xABAB9A4B3D31AB96ULL, 0xCECEF081D13ECE1FULL, 0x1111992255881144ULL, 0x8F8F8303890C8F06ULL, 0x4E4E049C6B4A4E25ULL, 0xB7B7667351D1B7E6ULL, 0xEBEBE0CB600BEB8BULL, 0x3C3CC178CCFD3CF0ULL, 0x8181FD1FBF7C813EULL, 0x94944035FED4946AULL, 0xF7F71CF30CEBF7FBULL, 0xB9B9186F67A1B9DEULL, 0x13138B265F98134CULL, 0x2C2C51589C7D2CB0ULL, 0xD3D305BBB8D6D36BULL, 0xE7E78CD35C6BE7BBULL, 0x6E6E39DCCB576EA5ULL, 0xC4C4AA95F36EC437ULL, 0x03031B060F18030CULL, 0x5656DCAC138A5645ULL, 0x44445E88491A440DULL, 0x7F7FA0FE9EDF7FE1ULL, 0xA9A9884F3721A99EULL, 0x2A2A6754824D2AA8ULL, 0xBBBB0A6B6DB1BBD6ULL, 0xC1C1879FE246C123ULL, 0x5353F1A602A25351ULL, 0xDCDC72A58BAEDC57ULL, 0x0B0B531627580B2CULL, 0x9D9D0127D39C9D4EULL, 0x6C6C2BD8C1476CADULL, 0x3131A462F59531C4ULL, 0x7474F3E8B98774CDULL, 0xF6F615F109E3F6FFULL, 0x46464C8C430A4605ULL, 0xACACA5452609AC8AULL, 0x8989B50F973C891EULL, 0x1414B42844A01450ULL, 0xE1E1BADF425BE1A3ULL, 0x1616A62C4EB01658ULL, 0x3A3AF774D2CD3AE8ULL, 0x696906D2D06F69B9ULL, 0x090941122D480924ULL, 0x7070D7E0ADA770DDULL, 0xB6B66F7154D9B6E2ULL, 0xD0D01EBDB7CED067ULL, 0xEDEDD6C77E3BED93ULL, 0xCCCCE285DB2ECC17ULL, 0x42426884572A4215ULL, 0x98982C2DC2B4985AULL, 0xA4A4ED550E49A4AAULL, 0x28287550885D28A0ULL, 0x5C5C86B831DA5C6DULL, 0xF8F86BED3F93F8C7ULL, 0x8686C211A4448622ULL,

0x18D83078C0186018ULL, 0x232646AF05238C23ULL, 0xC6B891F97EC63FC6ULL, 0xE8FBCD6F13E887E8ULL, 0x87CB13A14C872687ULL, 0xB8116D62A9B8DAB8ULL, 0x0109020508010401ULL, 0x4F0D9E6E424F214FULL, 0x369B6CEEAD36D836ULL, 0xA6FF510459A6A2A6ULL, 0xD20CB9BDDED26FD2ULL, 0xF50EF706FBF5F3F5ULL, 0x7996F280EF79F979ULL, 0x6F30DECE5F6FA16FULL, 0x916D3FEFFC917E91ULL, 0x52F8A407AA525552ULL, 0x6047C0FD27609D60ULL, 0xBC35657689BCCABCULL, 0x9B372BCDAC9B569BULL, 0x8E8A018C048E028EULL, 0xA3D25B1571A3B6A3ULL, 0x0C6C183C600C300CULL, 0x7B84F68AFF7BF17BULL, 0x35806AE1B535D435ULL, 0x1DF53A69E81D741DULL, 0xE0B3DD4753E0A7E0ULL, 0xD721B3ACF6D77BD7ULL, 0xC29C99ED5EC22FC2ULL, 0x2E435C966D2EB82EULL, 0x4B29967A624B314BULL, 0xFE5DE121A3FEDFFEULL, 0x57D5AE1682574157ULL, 0x15BD2A41A8155415ULL, 0x77E8EEB69F77C177ULL, 0x37926EEBA537DC37ULL, 0xE59ED7567BE5B3E5ULL, 0x9F1323D98C9F469FULL, 0xF023FD17D3F0E7F0ULL, 0x4A20947F6A4A354AULL, 0xDA44A9959EDA4FDAULL, 0x58A2B025FA587D58ULL, 0xC9CF8FCA06C903C9ULL, 0x297C528D5529A429ULL, 0x0A5A1422500A280AULL, 0xB1507F4FE1B1FEB1ULL, 0xA0C95D1A69A0BAA0ULL, 0x6B14D6DA7F6BB16BULL, 0x85D917AB5C852E85ULL, 0xBD3C677381BDCEBDULL, 0x5D8FBA34D25D695DULL, 0x1090205080104010ULL, 0xF407F503F3F4F7F4ULL, 0xCBDD8BC016CB0BCBULL, 0x3ED37CC6ED3EF83EULL, 0x052D0A1128051405ULL, 0x6778CEE61F678167ULL, 0xE497D55373E4B7E4ULL, 0x27024EBB25279C27ULL, 0x4173825832411941ULL, 0x8BA70B9D2C8B168BULL, 0xA7F6530151A7A6A7ULL, 0x7DB2FA94CF7DE97DULL, 0x954937FBDC956E95ULL, 0xD856AD9F8ED847D8ULL, 0xFB70EB308BFBCBFBULL, 0xEECDC17123EE9FEEULL, 0x7CBBF891C77CED7CULL, 0x6671CCE317668566ULL, 0xDD7BA78EA6DD53DDULL, 0x17AF2E4BB8175C17ULL, 0x47458E4602470147ULL, 0x9E1A21DC849E429EULL, 0xCAD489C51ECA0FCAULL, 0x2D585A99752DB42DULL, 0xBF2E637991BFC6BFULL, 0x073F0E1B38071C07ULL, 0xADAC472301AD8EADULL, 0x5AB0B42FEA5A755AULL, 0x83EF1BB56C833683ULL, 0x33B666FF8533CC33ULL, 0x635CC6F23F639163ULL, 0x0212040A10020802ULL, 0xAA93493839AA92AAULL, 0x71DEE2A8AF71D971ULL, 0xC8C68DCF0EC807C8ULL, 0x19D1327DC8196419ULL, 0x493B927072493949ULL, 0xD95FAF9A86D943D9ULL, 0xF231F91DC3F2EFF2ULL, 0xE3A8DB484BE3ABE3ULL, 0x5BB9B62AE25B715BULL, 0x88BC0D9234881A88ULL, 0x9A3E29C8A49A529AULL, 0x260B4CBE2D269826ULL, 0x32BF64FA8D32C832ULL, 0xB0597D4AE9B0FAB0ULL, 0xE9F2CF6A1BE983E9ULL, 0x0F771E33780F3C0FULL, 0xD533B7A6E6D573D5ULL, 0x80F41DBA74803A80ULL, 0xBE27617C99BEC2BEULL, 0xCDEB87DE26CD13CDULL, 0x348968E4BD34D034ULL, 0x483290757A483D48ULL, 0xFF54E324ABFFDBFFULL, 0x7A8DF48FF77AF57AULL, 0x90643DEAF4907A90ULL, 0x5F9DBE3EC25F615FULL, 0x203D40A01D208020ULL, 0x680FD0D56768BD68ULL, 0x1ACA3472D01A681AULL, 0xAEB7412C19AE82AEULL, 0xB47D755EC9B4EAB4ULL, 0x54CEA8199A544D54ULL, 0x937F3BE5EC937693ULL, 0x222F44AA0D228822ULL, 0x6463C8E907648D64ULL, 0xF12AFF12DBF1E3F1ULL, 0x73CCE6A2BF73D173ULL, 0x1282245A90124812ULL, 0x407A805D3A401D40ULL, 0x0848102840082008ULL, 0xC3959BE856C32BC3ULL, 0xECDFC57B33EC97ECULL, 0xDB4DAB9096DB4BDBULL, 0xA1C05F1F61A1BEA1ULL, 0x8D9107831C8D0E8DULL, 0x3DC87AC9F53DF43DULL, 0x975B33F1CC976697ULL, 0x0000000000000000ULL, 0xCFF983D436CF1BCFULL, 0x2B6E5687452BAC2BULL, 0x76E1ECB39776C576ULL, 0x82E619B064823282ULL, 0xD628B1A9FED67FD6ULL, 0x1BC33677D81B6C1BULL, 0xB574775BC1B5EEB5ULL, 0xAFBE432911AF86AFULL, 0x6A1DD4DF776AB56AULL, 0x50EAA00DBA505D50ULL, 0x45578A4C12450945ULL, 0xF338FB18CBF3EBF3ULL, 0x30AD60F09D30C030ULL, 0xEFC4C3742BEF9BEFULL, 0x3FDA7EC3E53FFC3FULL, 0x55C7AA1C92554955ULL, 0xA2DB591079A2B2A2ULL, 0xEAE9C96503EA8FEAULL, 0x656ACAEC0F658965ULL, 0xBA036968B9BAD2BAULL, 0x2F4A5E93652FBC2FULL, 0xC08E9DE74EC027C0ULL, 0xDE60A181BEDE5FDEULL, 0x1CFC386CE01C701CULL, 0xFD46E72EBBFDD3FDULL, 0x4D1F9A64524D294DULL, 0x927639E0E4927292ULL, 0x75FAEABC8F75C975ULL, 0x06360C1E30061806ULL, 0x8AAE0998248A128AULL, 0xB24B7940F9B2F2B2ULL, 0xE685D15963E6BFE6ULL, 0x0E7E1C36700E380EULL, 0x1FE73E63F81F7C1FULL, 0x6255C4F737629562ULL, 0xD43AB5A3EED477D4ULL, 0xA8814D3229A89AA8ULL, 0x965231F4C4966296ULL, 0xF962EF3A9BF9C3F9ULL, 0xC5A397F666C533C5ULL, 0x25104AB135259425ULL, 0x59ABB220F2597959ULL, 0x84D015AE54842A84ULL, 0x72C5E4A7B772D572ULL, 0x39EC72DDD539E439ULL, 0x4C1698615A4C2D4CULL, 0x5E94BC3BCA5E655EULL, 0x789FF085E778FD78ULL, 0x38E570D8DD38E038ULL, 0x8C980586148C0A8CULL, 0xD117BFB2C6D163D1ULL, 0xA5E4570B41A5AEA5ULL, 0xE2A1D94D43E2AFE2ULL, 0x614EC2F82F619961ULL, 0xB3427B45F1B3F6B3ULL, 0x213442A515218421ULL, 0x9C0825D6949C4A9CULL, 0x1EEE3C66F01E781EULL, 0x4361865222431143ULL, 0xC7B193FC76C73BC7ULL, 0xFC4FE52BB3FCD7FCULL, 0x0424081420041004ULL, 0x51E3A208B2515951ULL, 0x99252FC7BC995E99ULL, 0x6D22DAC44F6DA96DULL, 0x0D651A39680D340DULL, 0xFA79E93583FACFFAULL, 0xDF69A384B6DF5BDFULL, 0x7EA9FC9BD77EE57EULL, 0x241948B43D249024ULL, 0x3BFE76D7C53BEC3BULL, 0xAB9A4B3D31AB96ABULL, 0xCEF081D13ECE1FCEULL, 0x1199225588114411ULL, 0x8F8303890C8F068FULL, 0x4E049C6B4A4E254EULL, 0xB7667351D1B7E6B7ULL, 0xEBE0CB600BEB8BEBULL, 0x3CC178CCFD3CF03CULL, 0x81FD1FBF7C813E81ULL, 0x944035FED4946A94ULL, 0xF71CF30CEBF7FBF7ULL, 0xB9186F67A1B9DEB9ULL, 0x138B265F98134C13ULL, 0x2C51589C7D2CB02CULL, 0xD305BBB8D6D36BD3ULL, 0xE78CD35C6BE7BBE7ULL, 0x6E39DCCB576EA56EULL, 0xC4AA95F36EC437C4ULL, 0x031B060F18030C03ULL, 0x56DCAC138A564556ULL, 0x445E88491A440D44ULL, 0x7FA0FE9EDF7FE17FULL, 0xA9884F3721A99EA9ULL, 0x2A6754824D2AA82AULL, 0xBB0A6B6DB1BBD6BBULL, 0xC1879FE246C123C1ULL, 0x53F1A602A2535153ULL, 0xDC72A58BAEDC57DCULL, 0x0B531627580B2C0BULL, 0x9D0127D39C9D4E9DULL, 0x6C2BD8C1476CAD6CULL, 0x31A462F59531C431ULL, 0x74F3E8B98774CD74ULL, 0xF615F109E3F6FFF6ULL, 0x464C8C430A460546ULL, 0xACA5452609AC8AACULL, 0x89B50F973C891E89ULL, 0x14B42844A0145014ULL, 0xE1BADF425BE1A3E1ULL, 0x16A62C4EB0165816ULL, 0x3AF774D2CD3AE83AULL, 0x6906D2D06F69B969ULL, 0x0941122D48092409ULL, 0x70D7E0ADA770DD70ULL, 0xB66F7154D9B6E2B6ULL, 0xD01EBDB7CED067D0ULL, 0xEDD6C77E3BED93EDULL, 0xCCE285DB2ECC17CCULL, 0x426884572A421542ULL, 0x982C2DC2B4985A98ULL, 0xA4ED550E49A4AAA4ULL, 0x287550885D28A028ULL, 0x5C86B831DA5C6D5CULL, 0xF86BED3F93F8C7F8ULL, 0x86C211A444862286ULL,

};



Code:

static UINT8 SBox[256] =
{

0x18, 0x23, 0xC6, 0xE8, 0x87, 0xB8, 0x01, 0x4F, 0x36, 0xA6, 0xD2, 0xF5, 0x79, 0x6F, 0x91, 0x52,

0x60, 0xBC, 0x9B, 0x8E, 0xA3, 0x0C, 0x7B, 0x35, 0x1D, 0xE0, 0xD7, 0xC2, 0x2E, 0x4B, 0xFE, 0x57,

0x15, 0x77, 0x37, 0xE5, 0x9F, 0xF0, 0x4A, 0xDA, 0x58, 0xC9, 0x29, 0x0A, 0xB1, 0xA0, 0x6B, 0x85,

0xBD, 0x5D, 0x10, 0xF4, 0xCB, 0x3E, 0x05, 0x67, 0xE4, 0x27, 0x41, 0x8B, 0xA7, 0x7D, 0x95, 0xD8,

0xFB, 0xEE, 0x7C, 0x66, 0xDD, 0x17, 0x47, 0x9E, 0xCA, 0x2D, 0xBF, 0x07, 0xAD, 0x5A, 0x83, 0x33,

0x63, 0x02, 0xAA, 0x71, 0xC8, 0x19, 0x49, 0xD9, 0xF2, 0xE3, 0x5B, 0x88, 0x9A, 0x26, 0x32, 0xB0,

0xE9, 0x0F, 0xD5, 0x80, 0xBE, 0xCD, 0x34, 0x48, 0xFF, 0x7A, 0x90, 0x5F, 0x20, 0x68, 0x1A, 0xAE,

0xB4, 0x54, 0x93, 0x22, 0x64, 0xF1, 0x73, 0x12, 0x40, 0x08, 0xC3, 0xEC, 0xDB, 0xA1, 0x8D, 0x3D,

0x97, 0x00, 0xCF, 0x2B, 0x76, 0x82, 0xD6, 0x1B, 0xB5, 0xAF, 0x6A, 0x50, 0x45, 0xF3, 0x30, 0xEF,

0x3F, 0x55, 0xA2, 0xEA, 0x65, 0xBA, 0x2F, 0xC0, 0xDE, 0x1C, 0xFD, 0x4D, 0x92, 0x75, 0x06, 0x8A,

0xB2, 0xE6, 0x0E, 0x1F, 0x62, 0xD4, 0xA8, 0x96, 0xF9, 0xC5, 0x25, 0x59, 0x84, 0x72, 0x39, 0x4C,

0x5E, 0x78, 0x38, 0x8C, 0xD1, 0xA5, 0xE2, 0x61, 0xB3, 0x21, 0x9C, 0x1E, 0x43, 0xC7, 0xFC, 0x04,

0x51, 0x99, 0x6D, 0x0D, 0xFA, 0xDF, 0x7E, 0x24, 0x3B, 0xAB, 0xCE, 0x11, 0x8F, 0x4E, 0xB7, 0xEB,

0x3C, 0x81, 0x94, 0xF7, 0xB9, 0x13, 0x2C, 0xD3, 0xE7, 0x6E, 0xC4, 0x03, 0x56, 0x44, 0x7F, 0xA9,

0x2A, 0xBB, 0xC1, 0x53, 0xDC, 0x0B, 0x9D, 0x6C, 0x31, 0x74, 0xF6, 0x46, 0xAC, 0x89, 0x14, 0xE1,

0x16, 0x3A, 0x69, 0x09, 0x70, 0xB6, 0xD0, 0xED, 0xCC, 0x42, 0x98, 0xA4, 0x28, 0x5C, 0xF8, 0x86,

};





static const UINT64 arrRoundConstants[10] =

{

0x4F01B887E8C62318ULL,

0x52916F79F5D2A636ULL,

0x357B0CA38E9BBC60ULL,

0x57FE4B2EC2D7E01DULL,

0xDA4AF09FE5377715ULL,

0x856BA0B10A29C958ULL,

0x67053ECBF4105DBDULL,

0xD8957DA78B4127E4ULL,

0x9E4717DD667CEEFBULL,

0x33835AAD07BF2DCAULL,



};



static UINT8 SBoxCalc(UINT8 u)

{

return SBox[u];

}





static void WhirlpoolRound_Table(void *pInOut)

{

const UINT8 *pIn8 = (const UINT8 *)pInOut;



UINT64 blockResult64[8] = {0};


// by source row

for(unsigned i = 0; i < 8; i++)

{

for(unsigned k = 0; k < 8; k++)

{

UINT8 bv = pIn8[(i<<3) ^ k];

blockResult64[7&(i+k)] ^= arrPrecalc[k*256 + bv];

}

}



memcpy(pInOut, blockResult64, 64);

}



static void WhirlpoolIteration_Table(UINT8 state[64], const UINT8 block[64])

{

UINT8 tempState[64];

UINT8 tempBlock[64];



memcpy(tempState, state, 64);

memcpy(tempBlock, block, 64);



for(unsigned i = 0; i < 64; i++)

{

state[i] = tempBlock[i] = tempBlock[i] ^ tempState[i];

}



for(unsigned i = 0; i < 10; i++)

{

WhirlpoolRound_Table(tempState);

WhirlpoolRound_Table(tempBlock);



for(unsigned j = 0; j < 8; j++)

tempState[j] ^= SBoxCalc((i << 3) | j);



for(unsigned j = 0; j < 64; j++)

tempBlock[j] ^= tempState[j];

}



for(unsigned i = 0; i < 64; i++)

state[i] ^= tempBlock[i];



}



void vanilla0_Precompute(

unsigned char *pDst, unsigned sizeDst,

const unsigned char *pSrc, unsigned sizeSrc)

{

const UINT32 *pIn32 = (const UINT32 *)pSrc;

UINT8 hashA[64];

memset(hashA, 0, 64);

UINT32 blockA32[16];



UINT8 blockt[64];

memcpy(blockt, pIn32, 64);



WhirlpoolIteration_Table(hashA, blockt);



blockA32[ 0] = pIn32[16 + 0];

blockA32[ 1] = pIn32[16 + 1];

blockA32[ 2] = pIn32[16 + 2];

blockA32[ 3] = 0; // nonceA

blockA32[ 4] = 0x00000080;

blockA32[ 5] = 0;

blockA32[ 6] = 0;

blockA32[ 7] = 0;

blockA32[ 8] = 0;

blockA32[ 9] = 0;

blockA32[10] = 0;

blockA32[11] = 0;

blockA32[12] = 0;

blockA32[13] = 0;

blockA32[14] = 0;

blockA32[15] = 0x80020000;



//blockA32[ 3] = nonceA;



UINT64 tempBlock64[8];

memcpy(tempBlock64, blockA32, 64);



UINT64 tempStatesPre64[10][8];

memcpy(&tempStatesPre64[0][0], hashA, 64);

// drop hashA



for(unsigned i = 0; i < 8; i++)

{

tempBlock64[i] ^= tempStatesPre64[0][i];

}



for(unsigned i = 0; i < 10; i++)

{

WhirlpoolRound_Table(&tempStatesPre64[i][0]);

*(UINT64*)&tempStatesPre64[i][0] ^= arrRoundConstants[i];

if(i < 9)

memcpy(&tempStatesPre64[i+1][0], &tempStatesPre64[i][0], 64);

}






UINT32 preHWA32 = 0;

preHWA32 ^= *(UINT32*) &(((UINT8*)&tempBlock64[0])[3*8 + 4]);

preHWA32 ^= *(UINT32*) &(((UINT8*)&tempBlock64[0])[5*8 + 4]);



preHWA32 ^= *(UINT32*) &(((UINT8*)&tempStatesPre64[9][0])[3*8 + 4]);

preHWA32 ^= *(UINT32*) &(((UINT8*)&tempStatesPre64[9][0])[5*8 + 4]);

// drop tempStatesPre64[9]



UINT32 nonceXor = tempBlock64[1] >> 32; // XXXXXX00



tempBlock64[1] &= 0x00000000FFFFFFFFULL;

tempBlock64[1] ^= 0x8181818100000000ULL;



WhirlpoolRound_Table(tempBlock64);



for(unsigned j = 0; j < 8; j++)

{

tempBlock64[j] ^= tempStatesPre64[0][j];

}



UINT64 pre5 = tempBlock64[5];

UINT64 pre6 = tempBlock64[6];

UINT64 pre7 = tempBlock64[7];

UINT64 pre0 = tempBlock64[0];



tempBlock64[5] = 0x8181818181818181ULL;

tempBlock64[6] = 0x8181818181818181ULL;

tempBlock64[7] = 0x8181818181818181ULL;

tempBlock64[0] = 0x8181818181818181ULL;



WhirlpoolRound_Table(tempBlock64);

for(unsigned j = 0; j < 8; j++)

{

tempBlock64[j] ^= tempStatesPre64[1][j];

}








#if 1

ASSERT(616 == sizeDst);

GLOBAL UINT64 *arrMidstate = (UINT64 *)pDst;

for(unsigned i = 0; i < 8; ++i)

{

for(unsigned j = 0; j < 8; ++j)

arrMidstate[i*8+j] = tempStatesPre64[i+2][j];

}

memcpy(&arrMidstate[64], tempBlock64, 64);

arrMidstate[64+8+0] = pre5;

arrMidstate[64+8+1] = pre6;

arrMidstate[64+8+2] = pre7;

arrMidstate[64+8+3] = pre0;





arrMidstate[64+8+4] = preHWA32 ^ ((UINT64)nonceXor << 32);

#endif



#if 1

// ROL 3

for(unsigned i = 0; i < 77; ++i)

{

arrMidstate[i] = ROL64(arrMidstate[i], 3);

}

#endif

}


Of course I gave you bad advice. Good one is way out of your price range.
smolen (OP)
Hero Member
*****
Offline Offline

Activity: 524
Merit: 500


View Profile
January 15, 2016, 05:30:52 AM
 #352

Code:
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable



static const CONSTANT UINT64 arrPrecalc_post_l27[4*256] =

{

0x00C300C0C6C183C6ULL, 0x291C611919323578ULL, 0xF631FE3635C48FCBULL, 0x9F443F4747DE6B78ULL, 0x6439343C3E589D0AULL, 0x4DC6D5C5C08B6B15ULL, 0x4008200808481028ULL, 0x12790A7A786CF372ULL, 0x69B6C1B1B4DB6775ULL, 0xCD35153537FA8822ULL, 0xF6937E969065CDEEULL, 0xDFAF9FAFA877B837ULL, 0x7BCFCBCBCCB79407ULL, 0xFB7D0B7B7986F672ULL, 0xE48BF48C8B69FF7FULL, 0x5292AA9297C5203DULL, 0x3B04EB03023E07E9ULL, 0x4DE655E5E1AB2BB4ULL, 0x64DAB4DCD9B95E6DULL, 0x2470147474500C60ULL, 0x8D1DB51D1E92D8ABULL, 0x006180606360C1E3ULL, 0xFBDF8BDBDC27B457ULL, 0xA9AEA1A9AC03570DULL, 0x40EBA0E8EFA9D34FULL, 0x9F053F07059EEA3AULL, 0xB6BBDEBEB90D9D67ULL, 0xF6117E1614E4CF6AULL, 0x6975C171721AE4B3ULL, 0x12598A5A594CB3D3ULL, 0x1FF6FFF7F2EF090DULL, 0x12BA0ABABEAD70B4ULL, 0x40AAA0A8ADE9520DULL, 0xFBBE0BBBBF4775B4ULL, 0x29BEE1B9BC93775DULL, 0xDF2D9F2F2CF6BAB3ULL, 0x64FA34FCF8991ECCULL, 0x9F873F87811FE8BEULL, 0x5251AA525104A3FBULL, 0xF6D27ED6D2254CACULL, 0xD2C3EAC2C515812FULL, 0x36481E4E4E7C7E50ULL, 0xA94D21494BE2946AULL, 0x8051405052D0A112ULL, 0x0D8FF58D8A83FA7FULL, 0x4D05D505064AE8D3ULL, 0xFB5D8B5B58A6B6D3ULL, 0xE429742C2EC8BD5AULL, 0x0DEE75EDE9E33B9CULL, 0x92EB4AEAEC7DD1A6ULL, 0x0082008084810284ULL, 0x9FA7BFA7A03FA81FULL, 0xB6585E5E5EEC5E00ULL, 0x69F7C1F1F69BE637ULL, 0x4028A02829685089ULL, 0xFB3C0B3B3BC67730ULL, 0x9F25BF2724BEAA9BULL, 0x293CE139381275D9ULL, 0x9208CA0A0B9C12C1ULL, 0x6458B45C5D385CE9ULL, 0x8D3D353D3FB2980AULL, 0x7BEF4BEBED97D4A6ULL, 0xE4AB74ACAA49BFDEULL, 0x76C23EC6C2B56CFCULL, 0x5FDE5FDFDB875984ULL, 0x1F74FF77766E0B89ULL, 0x3BE76BE3E5DFC48EULL, 0xBB342B33338E6718ULL, 0x36EA9EEEEBDD3C75ULL, 0xC0BAE0B8BD79725DULL, 0x12380A3A3A2C7230ULL, 0x24F214F4F0D10EE4ULL, 0xF6507E5656A44E28ULL, 0xA96DA1696AC2D4CBULL, 0x8DFE35FDF9731BCCULL, 0xC038E03839F870D9ULL, 0x0D6C756D6D623918ULL, 0x52D3AAD2D585A17FULL, 0x6419B41C1F78DDABULL, 0x299E61999DB337FCULL, 0xFB1C8B1B1AE63791ULL, 0x8010401010902050ULL, 0xCD549555549A49C1ULL, 0x7B8ECB8B8EF71545ULL, 0x76403E4646346E78ULL, 0x40CB20C8CE8993EEULL, 0x9249CA4A49DC9383ULL, 0x36CA1ECECAFD7CD4ULL, 0x1F977F97918FC8EEULL, 0x5F1D5F1F1D46DA42ULL, 0x12DB8ADADDCDB157ULL, 0xA440D44445E06C91ULL, 0x24D294D4D1F14E45ULL, 0x6934C131305A65F1ULL, 0x6996419195FB27D4ULL, 0x4D87D58582CBEA57ULL, 0xDF4C1F4F4F967B50ULL, 0xC079E0787BB8F19BULL, 0x36AB9EAEA99DBD37ULL, 0xA401D40407A0EDD3ULL, 0xCDF615F5F13B0BE4ULL, 0x36689E6E6F5C3EF1ULL, 0xE9A681A1A44B4725ULL, 0xD241EA42419483ABULL, 0x5FFEDFFFFAA71925ULL, 0xBBD7ABD3D46FA47FULL, 0xA483D4848321EF57ULL, 0x12FB0AFAFCEDF1F6ULL, 0xE904010101EA0500ULL, 0x3B45EB43407E86ABULL, 0x80D340D0D651A396ULL, 0xCD74157575BA0960ULL, 0x4DA755A5A3EBAAF6ULL, 0xD2A26AA2A67540CCULL, 0x649BB49C9BF9DF2FULL, 0x69144111117A2550ULL, 0x3B246B23231E4748ULL, 0xDF8F1F8F8957F896ULL, 0xFB9E8B9B9E673515ULL, 0x80924090941122D4ULL, 0xD200EA0203D402E9ULL, 0x0041004042408142ULL, 0xB6195E1E1CACDF42ULL, 0x9F64BF6766FE2BD9ULL, 0xB6DA5EDEDA6D5C84ULL, 0x0D0DF50D0E02F8FBULL, 0xE468746C6C883C18ULL, 0xA9EFA1E9EE43D64FULL, 0x64BB34BCBAD99F8EULL, 0x0000000000000000ULL, 0xB678DE7E7FCC1EA1ULL, 0x295D61595B72B43AULL, 0xBBB62BB3B70F659CULL, 0x241194141730CD83ULL, 0xF6B3FEB6B1458D4FULL, 0xC0DB60D8DE19B3BEULL, 0x0DAF75ADABA3BADEULL, 0x8D7C357D7DF21948ULL, 0xBB55AB5350EEA6FBULL, 0xD282EA828755006DULL, 0x92284A2A2ABC5260ULL, 0x5F9F5F9F99C7D8C6ULL, 0xE9860181856B0784ULL, 0x5F7CDF7F7E261BA1ULL, 0x29FFE1F9FED3F61FULL, 0x92AA4AAAAE3D50E4ULL, 0xCD15951516DAC883ULL, 0x1F547F57574E4B28ULL, 0x7B2C4B2B2B565760ULL, 0xCDD695D5D01B4B45ULL, 0x297DE1797A52F49BULL, 0x76013E060474EF3AULL, 0xF6F2FEF6F3050C0DULL, 0x00E380E0E7E1C367ULL, 0xDFEE9FEFEA373975ULL, 0x92694A6A68FCD322ULL, 0x2493949493B1CF07ULL, 0x7BAE4BABAFD755E4ULL, 0x8030C03031B060F1ULL, 0x2450945455704CC1ULL, 0xCD979595925BCA07ULL, 0x1F35FF37342E8ACBULL, 0x8071C07073F0E1B3ULL, 0xC0FBE0F8FF39F31FULL, 0xBB14AB1312AE27B9ULL, 0x76A3BEA6A1D5AD1FULL, 0x4D44D545440A6991ULL, 0x24B314B4B2918FA6ULL, 0xDFCE1FCFCB1779D4ULL, 0x36299E2E2D1CBFB3ULL, 0xA92CA12928825589ULL, 0x92CBCACACD5D9107ULL, 0xA42154242680AD72ULL, 0xBB96AB93962F253DULL, 0xA9CF21C9CF6396EEULL, 0xD2616A6260B4C30AULL, 0x52F32AF2F4A5E1DEULL, 0x3BC7EBC3C4FF842FULL, 0xE9C701C1C72B86C6ULL, 0xA460546464C02C30ULL, 0x368B1E8E88BDFD96ULL, 0x0D2D752D2F22B85AULL, 0x1F157F17150ECA6AULL, 0x7B0CCB0B0A7617C1ULL, 0x8D9FB59D9A13DA2FULL, 0xA90C210909A21528ULL, 0xA4E254E4E0412EB4ULL, 0x80F3C0F0F771E337ULL, 0x12188A1A1B0C3291ULL, 0xB639DE3E3D8C9FE3ULL, 0x9FE6BFE7E27F295DULL, 0x00208020212040A1ULL, 0x928ACA8A8F1D1045ULL, 0xE4CAF4CCC9297E3DULL, 0x7B6D4B6B6916D622ULL, 0x4069A0686B28D1CBULL, 0x1FD67FD7D3CF49ACULL, 0xB6FADEFEFB4D1C25ULL, 0xBBF72BF3F54FE4DEULL, 0xE924812120CA45A1ULL, 0x29DF61D9DFF3B6BEULL, 0x8D5CB55D5CD259E9ULL, 0xF670FE7677840E89ULL, 0x408A20888CC912ACULL, 0x6478347C7C181C48ULL, 0x52712A727024E35AULL, 0x8DBF35BDBB339A8EULL, 0x5F5C5F5F5F065B00ULL, 0xE9E781E1E60BC667ULL, 0xE409F40C0FE8FDFBULL, 0xA4A354A4A201AFF6ULL, 0x5FBFDFBFB8E79867ULL, 0x0DCEF5CDC8C37B3DULL, 0xC09A60989C5932FCULL, 0xE9658161628AC4E3ULL, 0xB69B5E9E982DDDC6ULL, 0x5F3DDF3F3C669AE3ULL, 0xBB752B7371CEE65AULL, 0x7621BE262554AF9BULL, 0xC018601818D83078ULL, 0x52B22AB2B6E5609CULL, 0xD2206A2222F44248ULL, 0xFBFF0BFBFD07F4F6ULL, 0x0D4CF54D4C4279B9ULL, 0x69554151533AA412ULL, 0x8DDEB5DDD8535B6DULL, 0x36091E0E0C3CFF12ULL, 0x129A8A9A9F8D3015ULL, 0x76E2BEE6E3952C5DULL, 0xC05960585A98B13AULL, 0xE4EA74ECE8093E9CULL, 0x3B656B63615EC60AULL, 0xA98E21898D2317ACULL, 0x3BA66BA3A79F45CCULL, 0x1FB7FFB7B0AF884FULL, 0x52302A3232646218ULL, 0x4D645565652A2930ULL, 0xE448F44C4DA87CB9ULL, 0x00A280A0A5A14225ULL, 0xDF0D1F0F0DD6FA12ULL, 0x80B2C0B0B5316275ULL, 0x69D741D1D7BBA696ULL, 0x7B4DCB4B48369683ULL, 0x404920484A08916AULL, 0x3B86EB8386BF056DULL, 0xCDB715B5B37B8AA6ULL, 0x76833E8680F5EDBEULL, 0xDF6C9F6F6EB63BF1ULL, 0x7660BE6667142ED9ULL, 0x5210AA12134422B9ULL, 0xA4C2D4C4C1616E15ULL, 0x4D255525276AA872ULL, 0xE945014143AA8442ULL, 0xD2E36AE2E435C18EULL, 0x9FC63FC7C35F69FCULL, 0x2431143436108D22ULL,

};



static const CONSTANT UINT64 arrPrecalc_post_r3[4*256] =

{

0xC183C600C300C0C6ULL, 0x323578291C611919ULL, 0xC48FCBF631FE3635ULL, 0xDE6B789F443F4747ULL, 0x589D0A6439343C3EULL, 0x8B6B154DC6D5C5C0ULL, 0x4810284008200808ULL, 0x6CF37212790A7A78ULL, 0xDB677569B6C1B1B4ULL, 0xFA8822CD35153537ULL, 0x65CDEEF6937E9690ULL, 0x77B837DFAF9FAFA8ULL, 0xB794077BCFCBCBCCULL, 0x86F672FB7D0B7B79ULL, 0x69FF7FE48BF48C8BULL, 0xC5203D5292AA9297ULL, 0x3E07E93B04EB0302ULL, 0xAB2BB44DE655E5E1ULL, 0xB95E6D64DAB4DCD9ULL, 0x500C602470147474ULL, 0x92D8AB8D1DB51D1EULL, 0x60C1E30061806063ULL, 0x27B457FBDF8BDBDCULL, 0x03570DA9AEA1A9ACULL, 0xA9D34F40EBA0E8EFULL, 0x9EEA3A9F053F0705ULL, 0x0D9D67B6BBDEBEB9ULL, 0xE4CF6AF6117E1614ULL, 0x1AE4B36975C17172ULL, 0x4CB3D312598A5A59ULL, 0xEF090D1FF6FFF7F2ULL, 0xAD70B412BA0ABABEULL, 0xE9520D40AAA0A8ADULL, 0x4775B4FBBE0BBBBFULL, 0x93775D29BEE1B9BCULL, 0xF6BAB3DF2D9F2F2CULL, 0x991ECC64FA34FCF8ULL, 0x1FE8BE9F873F8781ULL, 0x04A3FB5251AA5251ULL, 0x254CACF6D27ED6D2ULL, 0x15812FD2C3EAC2C5ULL, 0x7C7E5036481E4E4EULL, 0xE2946AA94D21494BULL, 0xD0A1128051405052ULL, 0x83FA7F0D8FF58D8AULL, 0x4AE8D34D05D50506ULL, 0xA6B6D3FB5D8B5B58ULL, 0xC8BD5AE429742C2EULL, 0xE33B9C0DEE75EDE9ULL, 0x7DD1A692EB4AEAECULL, 0x8102840082008084ULL, 0x3FA81F9FA7BFA7A0ULL, 0xEC5E00B6585E5E5EULL, 0x9BE63769F7C1F1F6ULL, 0x6850894028A02829ULL, 0xC67730FB3C0B3B3BULL, 0xBEAA9B9F25BF2724ULL, 0x1275D9293CE13938ULL, 0x9C12C19208CA0A0BULL, 0x385CE96458B45C5DULL, 0xB2980A8D3D353D3FULL, 0x97D4A67BEF4BEBEDULL, 0x49BFDEE4AB74ACAAULL, 0xB56CFC76C23EC6C2ULL, 0x8759845FDE5FDFDBULL, 0x6E0B891F74FF7776ULL, 0xDFC48E3BE76BE3E5ULL, 0x8E6718BB342B3333ULL, 0xDD3C7536EA9EEEEBULL, 0x79725DC0BAE0B8BDULL, 0x2C723012380A3A3AULL, 0xD10EE424F214F4F0ULL, 0xA44E28F6507E5656ULL, 0xC2D4CBA96DA1696AULL, 0x731BCC8DFE35FDF9ULL, 0xF870D9C038E03839ULL, 0x6239180D6C756D6DULL, 0x85A17F52D3AAD2D5ULL, 0x78DDAB6419B41C1FULL, 0xB337FC299E61999DULL, 0xE63791FB1C8B1B1AULL, 0x9020508010401010ULL, 0x9A49C1CD54955554ULL, 0xF715457B8ECB8B8EULL, 0x346E7876403E4646ULL, 0x8993EE40CB20C8CEULL, 0xDC93839249CA4A49ULL, 0xFD7CD436CA1ECECAULL, 0x8FC8EE1F977F9791ULL, 0x46DA425F1D5F1F1DULL, 0xCDB15712DB8ADADDULL, 0xE06C91A440D44445ULL, 0xF14E4524D294D4D1ULL, 0x5A65F16934C13130ULL, 0xFB27D46996419195ULL, 0xCBEA574D87D58582ULL, 0x967B50DF4C1F4F4FULL, 0xB8F19BC079E0787BULL, 0x9DBD3736AB9EAEA9ULL, 0xA0EDD3A401D40407ULL, 0x3B0BE4CDF615F5F1ULL, 0x5C3EF136689E6E6FULL, 0x4B4725E9A681A1A4ULL, 0x9483ABD241EA4241ULL, 0xA719255FFEDFFFFAULL, 0x6FA47FBBD7ABD3D4ULL, 0x21EF57A483D48483ULL, 0xEDF1F612FB0AFAFCULL, 0xEA0500E904010101ULL, 0x7E86AB3B45EB4340ULL, 0x51A39680D340D0D6ULL, 0xBA0960CD74157575ULL, 0xEBAAF64DA755A5A3ULL, 0x7540CCD2A26AA2A6ULL, 0xF9DF2F649BB49C9BULL, 0x7A25506914411111ULL, 0x1E47483B246B2323ULL, 0x57F896DF8F1F8F89ULL, 0x673515FB9E8B9B9EULL, 0x1122D48092409094ULL, 0xD402E9D200EA0203ULL, 0x4081420041004042ULL, 0xACDF42B6195E1E1CULL, 0xFE2BD99F64BF6766ULL, 0x6D5C84B6DA5EDEDAULL, 0x02F8FB0D0DF50D0EULL, 0x883C18E468746C6CULL, 0x43D64FA9EFA1E9EEULL, 0xD99F8E64BB34BCBAULL, 0x0000000000000000ULL, 0xCC1EA1B678DE7E7FULL, 0x72B43A295D61595BULL, 0x0F659CBBB62BB3B7ULL, 0x30CD832411941417ULL, 0x458D4FF6B3FEB6B1ULL, 0x19B3BEC0DB60D8DEULL, 0xA3BADE0DAF75ADABULL, 0xF219488D7C357D7DULL, 0xEEA6FBBB55AB5350ULL, 0x55006DD282EA8287ULL, 0xBC526092284A2A2AULL, 0xC7D8C65F9F5F9F99ULL, 0x6B0784E986018185ULL, 0x261BA15F7CDF7F7EULL, 0xD3F61F29FFE1F9FEULL, 0x3D50E492AA4AAAAEULL, 0xDAC883CD15951516ULL, 0x4E4B281F547F5757ULL, 0x5657607B2C4B2B2BULL, 0x1B4B45CDD695D5D0ULL, 0x52F49B297DE1797AULL, 0x74EF3A76013E0604ULL, 0x050C0DF6F2FEF6F3ULL, 0xE1C36700E380E0E7ULL, 0x373975DFEE9FEFEAULL, 0xFCD32292694A6A68ULL, 0xB1CF072493949493ULL, 0xD755E47BAE4BABAFULL, 0xB060F18030C03031ULL, 0x704CC12450945455ULL, 0x5BCA07CD97959592ULL, 0x2E8ACB1F35FF3734ULL, 0xF0E1B38071C07073ULL, 0x39F31FC0FBE0F8FFULL, 0xAE27B9BB14AB1312ULL, 0xD5AD1F76A3BEA6A1ULL, 0x0A69914D44D54544ULL, 0x918FA624B314B4B2ULL, 0x1779D4DFCE1FCFCBULL, 0x1CBFB336299E2E2DULL, 0x825589A92CA12928ULL, 0x5D910792CBCACACDULL, 0x80AD72A421542426ULL, 0x2F253DBB96AB9396ULL, 0x6396EEA9CF21C9CFULL, 0xB4C30AD2616A6260ULL, 0xA5E1DE52F32AF2F4ULL, 0xFF842F3BC7EBC3C4ULL, 0x2B86C6E9C701C1C7ULL, 0xC02C30A460546464ULL, 0xBDFD96368B1E8E88ULL, 0x22B85A0D2D752D2FULL, 0x0ECA6A1F157F1715ULL, 0x7617C17B0CCB0B0AULL, 0x13DA2F8D9FB59D9AULL, 0xA21528A90C210909ULL, 0x412EB4A4E254E4E0ULL, 0x71E33780F3C0F0F7ULL, 0x0C329112188A1A1BULL, 0x8C9FE3B639DE3E3DULL, 0x7F295D9FE6BFE7E2ULL, 0x2040A10020802021ULL, 0x1D1045928ACA8A8FULL, 0x297E3DE4CAF4CCC9ULL, 0x16D6227B6D4B6B69ULL, 0x28D1CB4069A0686BULL, 0xCF49AC1FD67FD7D3ULL, 0x4D1C25B6FADEFEFBULL, 0x4FE4DEBBF72BF3F5ULL, 0xCA45A1E924812120ULL, 0xF3B6BE29DF61D9DFULL, 0xD259E98D5CB55D5CULL, 0x840E89F670FE7677ULL, 0xC912AC408A20888CULL, 0x181C486478347C7CULL, 0x24E35A52712A7270ULL, 0x339A8E8DBF35BDBBULL, 0x065B005F5C5F5F5FULL, 0x0BC667E9E781E1E6ULL, 0xE8FDFBE409F40C0FULL, 0x01AFF6A4A354A4A2ULL, 0xE798675FBFDFBFB8ULL, 0xC37B3D0DCEF5CDC8ULL, 0x5932FCC09A60989CULL, 0x8AC4E3E965816162ULL, 0x2DDDC6B69B5E9E98ULL, 0x669AE35F3DDF3F3CULL, 0xCEE65ABB752B7371ULL, 0x54AF9B7621BE2625ULL, 0xD83078C018601818ULL, 0xE5609C52B22AB2B6ULL, 0xF44248D2206A2222ULL, 0x07F4F6FBFF0BFBFDULL, 0x4279B90D4CF54D4CULL, 0x3AA4126955415153ULL, 0x535B6D8DDEB5DDD8ULL, 0x3CFF1236091E0E0CULL, 0x8D3015129A8A9A9FULL, 0x952C5D76E2BEE6E3ULL, 0x98B13AC05960585AULL, 0x093E9CE4EA74ECE8ULL, 0x5EC60A3B656B6361ULL, 0x2317ACA98E21898DULL, 0x9F45CC3BA66BA3A7ULL, 0xAF884F1FB7FFB7B0ULL, 0x64621852302A3232ULL, 0x2A29304D64556565ULL, 0xA87CB9E448F44C4DULL, 0xA1422500A280A0A5ULL, 0xD6FA12DF0D1F0F0DULL, 0x31627580B2C0B0B5ULL, 0xBBA69669D741D1D7ULL, 0x3696837B4DCB4B48ULL, 0x08916A404920484AULL, 0xBF056D3B86EB8386ULL, 0x7B8AA6CDB715B5B3ULL, 0xF5EDBE76833E8680ULL, 0xB63BF1DF6C9F6F6EULL, 0x142ED97660BE6667ULL, 0x4422B95210AA1213ULL, 0x616E15A4C2D4C4C1ULL, 0x6AA8724D25552527ULL, 0xAA8442E945014143ULL, 0x35C18ED2E36AE2E4ULL, 0x5F69FC9FC63FC7C3ULL, 0x108D222431143436ULL,

};









#ifdef __OPENCL_VERSION__

#define X64 uint2

#define ASX64(v) (as_uint2(v))

#else

#define X64 UINT64

#define ASX64(v) (v)

#endif



#define Toff8(off8) (*(const LOCAL UINT64*)&(((const LOCAL UINT8*)TAll_local)[off8]))

#define TCoff8(off8) (*(const CONSTANT UINT64*)&(((const CONSTANT UINT8*)arrPrecalc_post)[off8]))






#define Toff8_r3(off8) (*(const LOCAL UINT64*)&(((const LOCAL UINT8*)TAll_local_r3)[off8]))

#define TCoff8_r3(off8) (*(const CONSTANT UINT64*)&(((const CONSTANT UINT8*)arrPrecalc_post_r3)[off8]))

#define TCoff8_l27(off8) (*(const CONSTANT UINT64*)&(((const CONSTANT UINT8*)arrPrecalc_post_l27)[off8]))


#define TC0off8_l27(off8) (*(const CONSTANT UINT64*)&(((const CONSTANT UINT8*)0)[off8]))



#ifdef __OPENCL_VERSION__



#define LUT0_r3(v) ASX64(Toff8_r3(v.x & 0x7F8))

#define LUT1_r3(v) ASX64(ROL64(Toff8_r3((v.x >>  8) & 0x7F8U), 8))

#define LUT2_r3(v) ASX64(ROL64(Toff8_r3((v.x >> 16) & 0x7F8U), 16));

#define LUT3_r3(v) ASX64(TC0off8_l27(bitselect(baseL27, (UINT32)(as_ulong(v) >> 24), 0x7F8U)))

#define LUT4_r3(v) (ASX64(Toff8_r3((v.y) & 0x7F8U))).yx

#define LUT5_r3(v) (ASX64(ROL64(Toff8_r3((v.y >> 8) & 0x7F8U), 8))).yx

#define LUT6_r3(v) (ASX64(ROL64(Toff8_r3((v.y >> 16) & 0x7F8U), 16))).yx;

#define LUT7_r3(v) (ASX64(TC0off8_l27(bitselect(baseL27, amd_bitalign(v.x, v.y, 24), 0x7F8U)))).yx


#else




#define LUT0_r3(v) ASX64(Toff8_r3((v) & 0x7F8))

#define LUT1_r3(v) ASX64(ROL64(Toff8_r3((v >>  8) & 0x7F8U), 8))

#define LUT2_r3(v) ASX64(ROL64(Toff8_r3((v >> 16) & 0x7F8U), 16))

#define LUT3_r3(v) ASX64(ROL64(Toff8_r3((v >> 24) & 0x7F8U), 24))

#define LUT4_r3(v) ASX64(ROL64(Toff8_r3((v >> 32) & 0x7F8U), 32))

#define LUT5_r3(v) ASX64(ROL64(Toff8_r3((v >> 40) & 0x7F8U), 40))

#define LUT6_r3(v) ASX64(ROL64(Toff8_r3((v >> 48) & 0x7F8U), 48))

#define LUT7_r3(v) ASX64(ROL64(Toff8_r3(ROR64(v, 56) & 0x7F8U), 56))





#endif



KERNEL void vanilla0_post(

GLOBAL UINT32 *pOut32,

GLOBAL const UINT32 *pIn32

#ifdef __OPENCL_VERSION__

, UINT32 nMask

#else

, UINT32 GLOBALID

#endif

)

{



#ifdef __OPENCL_VERSION__

#else

UINT32 nMask = 0xFFFFFFFF;

#endif

GLOBAL const UINT64 *arrMidstate = (GLOBAL const UINT64 *)pIn32;


#define baseL27 ((UINT32)&arrPrecalc_post_l27[0])



LOCAL X64 TAll_local_r3[256*1];

{

UINT32 nLocalId = LOCALID;

for(unsigned i = 0; i < 256; i += WORKSIZE)

{


TAll_local_r3[i + nLocalId]

= ASX64(arrPrecalc_post_r3[i + nLocalId]);


}

}







GLOBAL const UINT64 *post_pStatesPre64_pr3 = arrMidstate;




X64 stateAX64_pr3[8];

X64 stateBX64_pr3[8];




for(unsigned i = 0; i < 8; ++i)

{

stateAX64_pr3[i] = ASX64(arrMidstate[64+i]);

}




X64 post_pre5_pr3 = ASX64(arrMidstate[64+8+0]);

X64 post_pre6_pr3 = ASX64(arrMidstate[64+8+1]);

X64 post_pre7_pr3 = ASX64(arrMidstate[64+8+2]);

X64 post_pre0_pr3 = ASX64(arrMidstate[64+8+3]);





#ifdef __OPENCL_VERSION__


X64 post_nonceXored_pr3 = ASX64(arrMidstate[64+8+4]);

post_nonceXored_pr3.x ^= GLOBALID >> 29;

post_nonceXored_pr3.y ^= GLOBALID << 3;



#else

X64 post_tmp_pr3 = ASX64(arrMidstate[64+8+4]);

UINT32 post_preHWA32_pr0 = ROR64(post_tmp_pr3, 3) & 0xFFFFFFFF;


X64 post_nonceXored_pr3 = post_tmp_pr3 ^ ROR64(((UINT64)GLOBALID), 29); // & 0x00FFFF00


#endif






post_pre5_pr3 ^= LUT4_r3(ASX64(post_nonceXored_pr3));

stateAX64_pr3[7&(5+0)] ^= LUT0_r3(post_pre5_pr3);

stateAX64_pr3[7&(5+1)] ^= LUT1_r3(post_pre5_pr3);

stateAX64_pr3[7&(5+2)] ^= LUT2_r3(post_pre5_pr3);


stateAX64_pr3[7&(5+3)] ^= LUT3_r3(post_pre5_pr3);


stateAX64_pr3[7&(5+4)] ^= LUT4_r3(post_pre5_pr3);

stateAX64_pr3[7&(5+5)] ^= LUT5_r3(post_pre5_pr3);

stateAX64_pr3[7&(5+6)] ^= LUT6_r3(post_pre5_pr3);


stateAX64_pr3[7&(5+7)] ^= LUT7_r3(post_pre5_pr3);




post_pre6_pr3 ^= LUT5_r3(ASX64(post_nonceXored_pr3));

stateAX64_pr3[7&(6+0)] ^= LUT0_r3(post_pre6_pr3);

stateAX64_pr3[7&(6+1)] ^= LUT1_r3(post_pre6_pr3);

stateAX64_pr3[7&(6+2)] ^= LUT2_r3(post_pre6_pr3);


stateAX64_pr3[7&(6+3)] ^= LUT3_r3(post_pre6_pr3);


stateAX64_pr3[7&(6+4)] ^= LUT4_r3(post_pre6_pr3);

stateAX64_pr3[7&(6+5)] ^= LUT5_r3(post_pre6_pr3);

stateAX64_pr3[7&(6+6)] ^= LUT6_r3(post_pre6_pr3);


stateAX64_pr3[7&(6+7)] ^= LUT7_r3(post_pre6_pr3);




post_pre7_pr3 ^= LUT6_r3(ASX64(post_nonceXored_pr3));

stateAX64_pr3[7&(7+0)] ^= LUT0_r3(post_pre7_pr3);

stateAX64_pr3[7&(7+1)] ^= LUT1_r3(post_pre7_pr3);

stateAX64_pr3[7&(7+2)] ^= LUT2_r3(post_pre7_pr3);


stateAX64_pr3[7&(7+3)] ^= LUT3_r3(post_pre7_pr3);


stateAX64_pr3[7&(7+4)] ^= LUT4_r3(post_pre7_pr3);

stateAX64_pr3[7&(7+5)] ^= LUT5_r3(post_pre7_pr3);

stateAX64_pr3[7&(7+6)] ^= LUT6_r3(post_pre7_pr3);


stateAX64_pr3[7&(7+7)] ^= LUT7_r3(post_pre7_pr3);




post_pre0_pr3 ^= LUT7_r3(ASX64(post_nonceXored_pr3));

stateAX64_pr3[7&(0+0)] ^= LUT0_r3(post_pre0_pr3);

stateAX64_pr3[7&(0+1)] ^= LUT1_r3(post_pre0_pr3);

stateAX64_pr3[7&(0+2)] ^= LUT2_r3(post_pre0_pr3);


stateAX64_pr3[7&(0+3)] ^= LUT3_r3(post_pre0_pr3);


stateAX64_pr3[7&(0+4)] ^= LUT4_r3(post_pre0_pr3);

stateAX64_pr3[7&(0+5)] ^= LUT5_r3(post_pre0_pr3);

stateAX64_pr3[7&(0+6)] ^= LUT6_r3(post_pre0_pr3);


stateAX64_pr3[7&(0+7)] ^= LUT7_r3(post_pre0_pr3);








{

for(unsigned round = 0; round < 3; round++)

{

for(unsigned j = 0; j < 8; j++)

{


stateBX64_pr3[j] = ASX64(post_pStatesPre64_pr3[round*16 + 0 +j]);

}




for(unsigned p = 0; p < 8; ++p)

{

stateBX64_pr3[7&(p+0)] ^= LUT0_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+1)] ^= LUT1_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+2)] ^= LUT2_r3(stateAX64_pr3[p]);


stateBX64_pr3[7&(p+3)] ^= LUT3_r3(stateAX64_pr3[p]);






stateBX64_pr3[7&(p+4)] ^= LUT4_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+5)] ^= LUT5_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+6)] ^= LUT6_r3(stateAX64_pr3[p]);


stateBX64_pr3[7&(p+7)] ^= LUT7_r3(stateAX64_pr3[p]);




}



for(unsigned j = 0; j < 8; j++)

{


stateAX64_pr3[j] = ASX64(post_pStatesPre64_pr3[round*16 + 8 +j]);

}



for(unsigned p = 0; p < 8; ++p)

{

stateAX64_pr3[7&(p+0)] ^= LUT0_r3(stateBX64_pr3[p]);

stateAX64_pr3[7&(p+1)] ^= LUT1_r3(stateBX64_pr3[p]);

stateAX64_pr3[7&(p+2)] ^= LUT2_r3(stateBX64_pr3[p]);


stateAX64_pr3[7&(p+3)] ^= LUT3_r3(stateBX64_pr3[p]);






stateAX64_pr3[7&(p+4)] ^= LUT4_r3(stateBX64_pr3[p]);

stateAX64_pr3[7&(p+5)] ^= LUT5_r3(stateBX64_pr3[p]);

stateAX64_pr3[7&(p+6)] ^= LUT6_r3(stateBX64_pr3[p]);


stateAX64_pr3[7&(p+7)] ^= LUT7_r3(stateBX64_pr3[p]);




}





}



for(unsigned j = 0; j < 8; j++)

{

stateBX64_pr3[j] = ASX64(post_pStatesPre64_pr3[6*8 + 0 +j]);

}



for(unsigned p = 0; p < 8; ++p)

{

stateBX64_pr3[7&(p+0)] ^= LUT0_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+1)] ^= LUT1_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+2)] ^= LUT2_r3(stateAX64_pr3[p]);


stateBX64_pr3[7&(p+3)] ^= LUT3_r3(stateAX64_pr3[p]);





stateBX64_pr3[7&(p+4)] ^= LUT4_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+5)] ^= LUT5_r3(stateAX64_pr3[p]);

stateBX64_pr3[7&(p+6)] ^= LUT6_r3(stateAX64_pr3[p]);


stateBX64_pr3[7&(p+7)] ^= LUT7_r3(stateAX64_pr3[p]);




}













// by result row; 3,5


X64 result64_pr3 = LUT0_r3(stateBX64_pr3[7&(8+3-0)]);

result64_pr3 ^= LUT1_r3(stateBX64_pr3[7&(8+3-1)]);

result64_pr3 ^= LUT2_r3(stateBX64_pr3[7&(8+3-2)]);

result64_pr3 ^= LUT3_r3(stateBX64_pr3[7&(8+3-3)]);






result64_pr3 ^= LUT4_r3(stateBX64_pr3[7&(8+3-4)]);

result64_pr3 ^= LUT5_r3(stateBX64_pr3[7&(8+3-5)]);

result64_pr3 ^= LUT6_r3(stateBX64_pr3[7&(8+3-6)]);

result64_pr3 ^= LUT7_r3(stateBX64_pr3[7&(8+3-7)]);






result64_pr3 ^= LUT0_r3(stateBX64_pr3[7&(8+5-0)]);

result64_pr3 ^= LUT1_r3(stateBX64_pr3[7&(8+5-1)]);

result64_pr3 ^= LUT2_r3(stateBX64_pr3[7&(8+5-2)]);

result64_pr3 ^= LUT3_r3(stateBX64_pr3[7&(8+5-3)]);




result64_pr3 ^= LUT4_r3(stateBX64_pr3[7&(8+5-4)]);

result64_pr3 ^= LUT5_r3(stateBX64_pr3[7&(8+5-5)]);

result64_pr3 ^= LUT6_r3(stateBX64_pr3[7&(8+5-6)]);

result64_pr3 ^= LUT7_r3(stateBX64_pr3[7&(8+5-7)]);












#ifdef __OPENCL_VERSION__




X64 post_tmp_pr3 = ASX64(arrMidstate[64+8+4]);


UINT32 post_preHWA32_pr0 = amd_bitalign(post_tmp_pr3.y, post_tmp_pr3.x, 3);




if(!(nMask & (post_preHWA32_pr0 ^ amd_bitalign(result64_pr3.x, result64_pr3.y, 3))))

{

pOut32[atom_inc(&pOut32[0]) + 1] = GLOBALID;

}





#else


post_preHWA32_pr0 ^= ROR64(result64_pr3, 32+3);



if(!(post_preHWA32_pr0 & nMask))

{


pOut32[++pOut32[0]] = GLOBALID;

}



#endif



}

}

Of course I gave you bad advice. Good one is way out of your price range.
pallas
Legendary
*
Offline Offline

Activity: 2716
Merit: 1094


Black Belt Developer


View Profile
January 15, 2016, 09:51:47 AM
 #353

interesting, I'll have a look asap, thanks for sharing.
but my kernel, which is a little faster on hawaii and little slower on tahiti, is just 1/4 lines of code.

smolen (OP)
Hero Member
*****
Offline Offline

Activity: 524
Merit: 500


View Profile
January 21, 2016, 08:24:48 AM
 #354

interesting, I'll have a look asap, thanks for sharing.
but my kernel, which is a little faster on hawaii and little slower on tahiti, is just 1/4 lines of code.
Yes, it's overengineered, some failed optimization attempts still live in the code. OTOH, smelter still has no overclocking code, may be putting this kernel as-is into sgminer will bring some speed boost.

Of course I gave you bad advice. Good one is way out of your price range.
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!