Merge branch 'dpkg' of pc18:/srv/git/r/doldaconnect into dpkg
[doldaconnect.git] / common / tiger.c
1 /*
2  *  Dolda Connect - Modular multiuser Direct Connect-style client
3  *  Copyright (C) 2004 Fredrik Tolf <fredrik@dolda2000.com>
4  *  
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2 of the License, or
8  *  (at your option) any later version.
9  *  
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *  
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 */
19 #include <stdlib.h>
20 #include <string.h>
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25 #include "tiger.h"
26 #include "utils.h"
27
28 /*
29  * This won't be a fast implementation of Tiger. For now, I just want
30  * to be done with it and have it somewhat portable.
31  */
32
33 static unsigned long long table[];
34
35 void inittiger(struct tigerhash *th)
36 {
37     th->a = 0x0123456789abcdefULL;
38     th->b = 0xfedcba9876543210ULL;
39     th->c = 0xf096a5b4c3b2e187ULL;
40     th->offset = 0;
41     th->len = 0;
42 }
43
44 static void round(unsigned long long *a, unsigned long long *b, unsigned long long *c, unsigned long long x, int mul)
45 {
46     *c ^= x;
47     *a -= table[((*c >> 0) & 0xff) + 0x0000] ^ table[((*c >> 16) & 0xff) + 0x0100] ^ table[((*c >> 32) & 0xff) + 0x0200] ^ table[((*c >> 48) & 0xff) + 0x0300];
48     *b += table[((*c >> 8) & 0xff) + 0x0300] ^ table[((*c >> 24) & 0xff) + 0x0200] ^ table[((*c >> 40) & 0xff) + 0x0100] ^ table[((*c >> 56) & 0xff) + 0x0000];
49     *b *= mul;
50 }
51
52 static void pass(unsigned long long *a, unsigned long long *b, unsigned long long *c, unsigned long long *x, int mul)
53 {
54     round(a, b, c, x[0], mul);
55     round(b, c, a, x[1], mul);
56     round(c, a, b, x[2], mul);
57     round(a, b, c, x[3], mul);
58     round(b, c, a, x[4], mul);
59     round(c, a, b, x[5], mul);
60     round(a, b, c, x[6], mul);
61     round(b, c, a, x[7], mul);
62 }
63
64 static void key_schedule(unsigned long long *x)
65 {
66     x[0] -= x[7] ^ 0xa5a5a5a5a5a5a5a5ULL;
67     x[1] ^= x[0];
68     x[2] += x[1];
69     x[3] -= x[2] ^ ((~x[1]) << 19);
70     x[4] ^= x[3];
71     x[5] += x[4];
72     x[6] -= x[5] ^ ((~x[4]) >> 23);
73     x[7] ^= x[6];
74     x[0] += x[7];
75     x[1] -= x[0] ^ ((~x[7]) << 19);
76     x[2] ^= x[1];
77     x[3] += x[2];
78     x[4] -= x[3] ^ ((~x[2]) >> 23);
79     x[5] ^= x[4];
80     x[6] += x[5];
81     x[7] -= x[6] ^ 0x0123456789abcdefULL;
82 }
83
84 static void doblock(struct tigerhash *th)
85 {
86     int i, o;
87     unsigned long long x[8], aa, bb, cc;
88     
89     for(i = 0; i < 8; i++) {
90         x[i] = 0;
91         for(o = 0; o < 8; o++) {
92             x[i] <<= 8;
93             x[i] |= th->block[(i * 8) + 7 - o];
94         }
95     }
96     aa = th->a;
97     bb = th->b;
98     cc = th->c;
99     pass(&th->a, &th->b, &th->c, x, 5);
100     key_schedule(x);
101     pass(&th->c, &th->a, &th->b, x, 7);
102     key_schedule(x);
103     pass(&th->b, &th->c, &th->a, x, 9);
104     th->a ^= aa;
105     th->b -= bb;
106     th->c += cc;
107     th->offset = 0;
108 }
109
110 void dotiger(struct tigerhash *th, char *buf, size_t buflen)
111 {
112     int taken;
113     
114     th->len += buflen;
115     while(buflen > 0) {
116         taken = buflen;
117         if(taken > 64 - th->offset)
118             taken = 64 - th->offset;
119         memcpy(th->block + th->offset, buf, taken);
120         th->offset += taken;
121         buflen -= taken;
122         buf += taken;
123         if(th->offset == 64)
124             doblock(th);
125     }
126 }
127
128 void synctiger(struct tigerhash *th)
129 {
130     int i;
131     unsigned long long buf;
132     
133     th->block[th->offset++] = 1;
134     while(th->offset & 7)
135         th->block[th->offset++] = 0;
136     if(th->offset > 56)
137         doblock(th);
138     if(th->offset < 56)
139         memset(th->block + th->offset, 0, 56 - th->offset);
140     buf = th->len << 3;
141     for(i = 0; i < 8; i++) {
142         th->block[56 + i] = buf & 0xff;
143         buf >>= 8;
144     }
145     doblock(th);
146 }
147
148 void restiger(struct tigerhash *th, char *rbuf)
149 {
150     int i;
151     unsigned long long buf;
152     
153     buf = th->a;
154     for(i = 0; i < 8; i++) {
155         rbuf[i] = buf & 0xff;
156         buf >>= 8;
157     }
158     buf = th->b;
159     for(; i < 16; i++) {
160         rbuf[i] = buf & 0xff;
161         buf >>= 8;
162     }
163     buf = th->c;
164     for(; i < 24; i++) {
165         rbuf[i] = buf & 0xff;
166         buf >>= 8;
167     }
168 }
169
170 void inittigertree(struct tigertreehash *tth)
171 {
172     tth->blocks = 0;
173     tth->offset = 0;
174     tth->depth = 0;
175 }
176
177 static void combine(struct tigertreehash *tth)
178 {
179     struct tigerhash th;
180     
181     inittiger(&th);
182     dotiger(&th, "\001", 1);
183     tth->depth--;
184     dotiger(&th, tth->stack[tth->depth - 1], 24);
185     dotiger(&th, tth->stack[tth->depth], 24);
186     synctiger(&th);
187     restiger(&th, tth->stack[tth->depth - 1]);
188 }
189
190 void pushtigertree(struct tigertreehash *tth, char *buf)
191 {
192     int nb;
193     
194     memcpy(tth->stack[tth->depth++], buf, 24);
195     for(nb = ++tth->blocks; !(nb & 1); nb >>= 1)
196         combine(tth);
197 }
198
199 static void dotreeblock(struct tigertreehash *tth)
200 {
201     struct tigerhash th;
202     int nb;
203     
204     inittiger(&th);
205     dotiger(&th, "\0", 1);
206     dotiger(&th, tth->block, tth->offset);
207     synctiger(&th);
208     restiger(&th, tth->stack[tth->depth++]);
209     tth->offset = 0;
210     for(nb = ++tth->blocks; !(nb & 1); nb >>= 1)
211         combine(tth);
212 }
213
214 void dotigertree(struct tigertreehash *tth, char *buf, size_t buflen)
215 {
216     int taken;
217     
218     while(buflen > 0) {
219         taken = buflen;
220         if(taken > 1024 - tth->offset)
221             taken = 1024 - tth->offset;
222         memcpy(tth->block + tth->offset, buf, taken);
223         tth->offset += taken;
224         buflen -= taken;
225         buf += taken;
226         if(tth->offset == 1024)
227             dotreeblock(tth);
228     }
229 }
230
231 void synctigertree(struct tigertreehash *tth)
232 {
233     if((tth->offset > 0) || (tth->blocks == 0))
234         dotreeblock(tth);
235     while(tth->depth > 1)
236         combine(tth);
237 }
238
239 void restigertree(struct tigertreehash *tth, char *rbuf)
240 {
241     memcpy(rbuf, tth->stack[0], 24);
242 }
243
244 static unsigned long long table[1024] = {
245     0x02aab17cf7e90c5eULL,    0xac424b03e243a8ecULL,
246     0x72cd5be30dd5fcd3ULL,    0x6d019b93f6f97f3aULL,
247     0xcd9978ffd21f9193ULL,    0x7573a1c9708029e2ULL,
248     0xb164326b922a83c3ULL,    0x46883eee04915870ULL,
249     0xeaace3057103ece6ULL,    0xc54169b808a3535cULL,
250     0x4ce754918ddec47cULL,    0x0aa2f4dfdc0df40cULL,
251     0x10b76f18a74dbefaULL,    0xc6ccb6235ad1ab6aULL,
252     0x13726121572fe2ffULL,    0x1a488c6f199d921eULL,
253     0x4bc9f9f4da0007caULL,    0x26f5e6f6e85241c7ULL,
254     0x859079dbea5947b6ULL,    0x4f1885c5c99e8c92ULL,
255     0xd78e761ea96f864bULL,    0x8e36428c52b5c17dULL,
256     0x69cf6827373063c1ULL,    0xb607c93d9bb4c56eULL,
257     0x7d820e760e76b5eaULL,    0x645c9cc6f07fdc42ULL,
258     0xbf38a078243342e0ULL,    0x5f6b343c9d2e7d04ULL,
259     0xf2c28aeb600b0ec6ULL,    0x6c0ed85f7254bcacULL,
260     0x71592281a4db4fe5ULL,    0x1967fa69ce0fed9fULL,
261     0xfd5293f8b96545dbULL,    0xc879e9d7f2a7600bULL,
262     0x860248920193194eULL,    0xa4f9533b2d9cc0b3ULL,
263     0x9053836c15957613ULL,    0xdb6dcf8afc357bf1ULL,
264     0x18beea7a7a370f57ULL,    0x037117ca50b99066ULL,
265     0x6ab30a9774424a35ULL,    0xf4e92f02e325249bULL,
266     0x7739db07061ccae1ULL,    0xd8f3b49ceca42a05ULL,
267     0xbd56be3f51382f73ULL,    0x45faed5843b0bb28ULL,
268     0x1c813d5c11bf1f83ULL,    0x8af0e4b6d75fa169ULL,
269     0x33ee18a487ad9999ULL,    0x3c26e8eab1c94410ULL,
270     0xb510102bc0a822f9ULL,    0x141eef310ce6123bULL,
271     0xfc65b90059ddb154ULL,    0xe0158640c5e0e607ULL,
272     0x884e079826c3a3cfULL,    0x930d0d9523c535fdULL,
273     0x35638d754e9a2b00ULL,    0x4085fccf40469dd5ULL,
274     0xc4b17ad28be23a4cULL,    0xcab2f0fc6a3e6a2eULL,
275     0x2860971a6b943fcdULL,    0x3dde6ee212e30446ULL,
276     0x6222f32ae01765aeULL,    0x5d550bb5478308feULL,
277     0xa9efa98da0eda22aULL,    0xc351a71686c40da7ULL,
278     0x1105586d9c867c84ULL,    0xdcffee85fda22853ULL,
279     0xccfbd0262c5eef76ULL,    0xbaf294cb8990d201ULL,
280     0xe69464f52afad975ULL,    0x94b013afdf133e14ULL,
281     0x06a7d1a32823c958ULL,    0x6f95fe5130f61119ULL,
282     0xd92ab34e462c06c0ULL,    0xed7bde33887c71d2ULL,
283     0x79746d6e6518393eULL,    0x5ba419385d713329ULL,
284     0x7c1ba6b948a97564ULL,    0x31987c197bfdac67ULL,
285     0xde6c23c44b053d02ULL,    0x581c49fed002d64dULL,
286     0xdd474d6338261571ULL,    0xaa4546c3e473d062ULL,
287     0x928fce349455f860ULL,    0x48161bbacaab94d9ULL,
288     0x63912430770e6f68ULL,    0x6ec8a5e602c6641cULL,
289     0x87282515337ddd2bULL,    0x2cda6b42034b701bULL,
290     0xb03d37c181cb096dULL,    0xe108438266c71c6fULL,
291     0x2b3180c7eb51b255ULL,    0xdf92b82f96c08bbcULL,
292     0x5c68c8c0a632f3baULL,    0x5504cc861c3d0556ULL,
293     0xabbfa4e55fb26b8fULL,    0x41848b0ab3baceb4ULL,
294     0xb334a273aa445d32ULL,    0xbca696f0a85ad881ULL,
295     0x24f6ec65b528d56cULL,    0x0ce1512e90f4524aULL,
296     0x4e9dd79d5506d35aULL,    0x258905fac6ce9779ULL,
297     0x2019295b3e109b33ULL,    0xf8a9478b73a054ccULL,
298     0x2924f2f934417eb0ULL,    0x3993357d536d1bc4ULL,
299     0x38a81ac21db6ff8bULL,    0x47c4fbf17d6016bfULL,
300     0x1e0faadd7667e3f5ULL,    0x7abcff62938beb96ULL,
301     0xa78dad948fc179c9ULL,    0x8f1f98b72911e50dULL,
302     0x61e48eae27121a91ULL,    0x4d62f7ad31859808ULL,
303     0xeceba345ef5ceaebULL,    0xf5ceb25ebc9684ceULL,
304     0xf633e20cb7f76221ULL,    0xa32cdf06ab8293e4ULL,
305     0x985a202ca5ee2ca4ULL,    0xcf0b8447cc8a8fb1ULL,
306     0x9f765244979859a3ULL,    0xa8d516b1a1240017ULL,
307     0x0bd7ba3ebb5dc726ULL,    0xe54bca55b86adb39ULL,
308     0x1d7a3afd6c478063ULL,    0x519ec608e7669eddULL,
309     0x0e5715a2d149aa23ULL,    0x177d4571848ff194ULL,
310     0xeeb55f3241014c22ULL,    0x0f5e5ca13a6e2ec2ULL,
311     0x8029927b75f5c361ULL,    0xad139fabc3d6e436ULL,
312     0x0d5df1a94ccf402fULL,    0x3e8bd948bea5dfc8ULL,
313     0xa5a0d357bd3ff77eULL,    0xa2d12e251f74f645ULL,
314     0x66fd9e525e81a082ULL,    0x2e0c90ce7f687a49ULL,
315     0xc2e8bcbeba973bc5ULL,    0x000001bce509745fULL,
316     0x423777bbe6dab3d6ULL,    0xd1661c7eaef06eb5ULL,
317     0xa1781f354daacfd8ULL,    0x2d11284a2b16affcULL,
318     0xf1fc4f67fa891d1fULL,    0x73ecc25dcb920adaULL,
319     0xae610c22c2a12651ULL,    0x96e0a810d356b78aULL,
320     0x5a9a381f2fe7870fULL,    0xd5ad62ede94e5530ULL,
321     0xd225e5e8368d1427ULL,    0x65977b70c7af4631ULL,
322     0x99f889b2de39d74fULL,    0x233f30bf54e1d143ULL,
323     0x9a9675d3d9a63c97ULL,    0x5470554ff334f9a8ULL,
324     0x166acb744a4f5688ULL,    0x70c74caab2e4aeadULL,
325     0xf0d091646f294d12ULL,    0x57b82a89684031d1ULL,
326     0xefd95a5a61be0b6bULL,    0x2fbd12e969f2f29aULL,
327     0x9bd37013feff9fe8ULL,    0x3f9b0404d6085a06ULL,
328     0x4940c1f3166cfe15ULL,    0x09542c4dcdf3defbULL,
329     0xb4c5218385cd5ce3ULL,    0xc935b7dc4462a641ULL,
330     0x3417f8a68ed3b63fULL,    0xb80959295b215b40ULL,
331     0xf99cdaef3b8c8572ULL,    0x018c0614f8fcb95dULL,
332     0x1b14accd1a3acdf3ULL,    0x84d471f200bb732dULL,
333     0xc1a3110e95e8da16ULL,    0x430a7220bf1a82b8ULL,
334     0xb77e090d39df210eULL,    0x5ef4bd9f3cd05e9dULL,
335     0x9d4ff6da7e57a444ULL,    0xda1d60e183d4a5f8ULL,
336     0xb287c38417998e47ULL,    0xfe3edc121bb31886ULL,
337     0xc7fe3ccc980ccbefULL,    0xe46fb590189bfd03ULL,
338     0x3732fd469a4c57dcULL,    0x7ef700a07cf1ad65ULL,
339     0x59c64468a31d8859ULL,    0x762fb0b4d45b61f6ULL,
340     0x155baed099047718ULL,    0x68755e4c3d50baa6ULL,
341     0xe9214e7f22d8b4dfULL,    0x2addbf532eac95f4ULL,
342     0x32ae3909b4bd0109ULL,    0x834df537b08e3450ULL,
343     0xfa209da84220728dULL,    0x9e691d9b9efe23f7ULL,
344     0x0446d288c4ae8d7fULL,    0x7b4cc524e169785bULL,
345     0x21d87f0135ca1385ULL,    0xcebb400f137b8aa5ULL,
346     0x272e2b66580796beULL,    0x3612264125c2b0deULL,
347     0x057702bdad1efbb2ULL,    0xd4babb8eacf84be9ULL,
348     0x91583139641bc67bULL,    0x8bdc2de08036e024ULL,
349     0x603c8156f49f68edULL,    0xf7d236f7dbef5111ULL,
350     0x9727c4598ad21e80ULL,    0xa08a0896670a5fd7ULL,
351     0xcb4a8f4309eba9cbULL,    0x81af564b0f7036a1ULL,
352     0xc0b99aa778199abdULL,    0x959f1ec83fc8e952ULL,
353     0x8c505077794a81b9ULL,    0x3acaaf8f056338f0ULL,
354     0x07b43f50627a6778ULL,    0x4a44ab49f5eccc77ULL,
355     0x3bc3d6e4b679ee98ULL,    0x9cc0d4d1cf14108cULL,
356     0x4406c00b206bc8a0ULL,    0x82a18854c8d72d89ULL,
357     0x67e366b35c3c432cULL,    0xb923dd61102b37f2ULL,
358     0x56ab2779d884271dULL,    0xbe83e1b0ff1525afULL,
359     0xfb7c65d4217e49a9ULL,    0x6bdbe0e76d48e7d4ULL,
360     0x08df828745d9179eULL,    0x22ea6a9add53bd34ULL,
361     0xe36e141c5622200aULL,    0x7f805d1b8cb750eeULL,
362     0xafe5c7a59f58e837ULL,    0xe27f996a4fb1c23cULL,
363     0xd3867dfb0775f0d0ULL,    0xd0e673de6e88891aULL,
364     0x123aeb9eafb86c25ULL,    0x30f1d5d5c145b895ULL,
365     0xbb434a2dee7269e7ULL,    0x78cb67ecf931fa38ULL,
366     0xf33b0372323bbf9cULL,    0x52d66336fb279c74ULL,
367     0x505f33ac0afb4eaaULL,    0xe8a5cd99a2cce187ULL,
368     0x534974801e2d30bbULL,    0x8d2d5711d5876d90ULL,
369     0x1f1a412891bc038eULL,    0xd6e2e71d82e56648ULL,
370     0x74036c3a497732b7ULL,    0x89b67ed96361f5abULL,
371     0xffed95d8f1ea02a2ULL,    0xe72b3bd61464d43dULL,
372     0xa6300f170bdc4820ULL,    0xebc18760ed78a77aULL,
373     0xe6a6be5a05a12138ULL,    0xb5a122a5b4f87c98ULL,
374     0x563c6089140b6990ULL,    0x4c46cb2e391f5dd5ULL,
375     0xd932addbc9b79434ULL,    0x08ea70e42015aff5ULL,
376     0xd765a6673e478cf1ULL,    0xc4fb757eab278d99ULL,
377     0xdf11c6862d6e0692ULL,    0xddeb84f10d7f3b16ULL,
378     0x6f2ef604a665ea04ULL,    0x4a8e0f0ff0e0dfb3ULL,
379     0xa5edeef83dbcba51ULL,    0xfc4f0a2a0ea4371eULL,
380     0xe83e1da85cb38429ULL,    0xdc8ff882ba1b1ce2ULL,
381     0xcd45505e8353e80dULL,    0x18d19a00d4db0717ULL,
382     0x34a0cfeda5f38101ULL,    0x0be77e518887caf2ULL,
383     0x1e341438b3c45136ULL,    0xe05797f49089ccf9ULL,
384     0xffd23f9df2591d14ULL,    0x543dda228595c5cdULL,
385     0x661f81fd99052a33ULL,    0x8736e641db0f7b76ULL,
386     0x15227725418e5307ULL,    0xe25f7f46162eb2faULL,
387     0x48a8b2126c13d9feULL,    0xafdc541792e76eeaULL,
388     0x03d912bfc6d1898fULL,    0x31b1aafa1b83f51bULL,
389     0xf1ac2796e42ab7d9ULL,    0x40a3a7d7fcd2ebacULL,
390     0x1056136d0afbbcc5ULL,    0x7889e1dd9a6d0c85ULL,
391     0xd33525782a7974aaULL,    0xa7e25d09078ac09bULL,
392     0xbd4138b3eac6edd0ULL,    0x920abfbe71eb9e70ULL,
393     0xa2a5d0f54fc2625cULL,    0xc054e36b0b1290a3ULL,
394     0xf6dd59ff62fe932bULL,    0x3537354511a8ac7dULL,
395     0xca845e9172fadcd4ULL,    0x84f82b60329d20dcULL,
396     0x79c62ce1cd672f18ULL,    0x8b09a2add124642cULL,
397     0xd0c1e96a19d9e726ULL,    0x5a786a9b4ba9500cULL,
398     0x0e020336634c43f3ULL,    0xc17b474aeb66d822ULL,
399     0x6a731ae3ec9baac2ULL,    0x8226667ae0840258ULL,
400     0x67d4567691caeca5ULL,    0x1d94155c4875adb5ULL,
401     0x6d00fd985b813fdfULL,    0x51286efcb774cd06ULL,
402     0x5e8834471fa744afULL,    0xf72ca0aee761ae2eULL,
403     0xbe40e4cdaee8e09aULL,    0xe9970bbb5118f665ULL,
404     0x726e4beb33df1964ULL,    0x703b000729199762ULL,
405     0x4631d816f5ef30a7ULL,    0xb880b5b51504a6beULL,
406     0x641793c37ed84b6cULL,    0x7b21ed77f6e97d96ULL,
407     0x776306312ef96b73ULL,    0xae528948e86ff3f4ULL,
408     0x53dbd7f286a3f8f8ULL,    0x16cadce74cfc1063ULL,
409     0x005c19bdfa52c6ddULL,    0x68868f5d64d46ad3ULL,
410     0x3a9d512ccf1e186aULL,    0x367e62c2385660aeULL,
411     0xe359e7ea77dcb1d7ULL,    0x526c0773749abe6eULL,
412     0x735ae5f9d09f734bULL,    0x493fc7cc8a558ba8ULL,
413     0xb0b9c1533041ab45ULL,    0x321958ba470a59bdULL,
414     0x852db00b5f46c393ULL,    0x91209b2bd336b0e5ULL,
415     0x6e604f7d659ef19fULL,    0xb99a8ae2782ccb24ULL,
416     0xccf52ab6c814c4c7ULL,    0x4727d9afbe11727bULL,
417     0x7e950d0c0121b34dULL,    0x756f435670ad471fULL,
418     0xf5add442615a6849ULL,    0x4e87e09980b9957aULL,
419     0x2acfa1df50aee355ULL,    0xd898263afd2fd556ULL,
420     0xc8f4924dd80c8fd6ULL,    0xcf99ca3d754a173aULL,
421     0xfe477bacaf91bf3cULL,    0xed5371f6d690c12dULL,
422     0x831a5c285e687094ULL,    0xc5d3c90a3708a0a4ULL,
423     0x0f7f903717d06580ULL,    0x19f9bb13b8fdf27fULL,
424     0xb1bd6f1b4d502843ULL,    0x1c761ba38fff4012ULL,
425     0x0d1530c4e2e21f3bULL,    0x8943ce69a7372c8aULL,
426     0xe5184e11feb5ce66ULL,    0x618bdb80bd736621ULL,
427     0x7d29bad68b574d0bULL,    0x81bb613e25e6fe5bULL,
428     0x071c9c10bc07913fULL,    0xc7beeb7909ac2d97ULL,
429     0xc3e58d353bc5d757ULL,    0xeb017892f38f61e8ULL,
430     0xd4effb9c9b1cc21aULL,    0x99727d26f494f7abULL,
431     0xa3e063a2956b3e03ULL,    0x9d4a8b9a4aa09c30ULL,
432     0x3f6ab7d500090fb4ULL,    0x9cc0f2a057268ac0ULL,
433     0x3dee9d2dedbf42d1ULL,    0x330f49c87960a972ULL,
434     0xc6b2720287421b41ULL,    0x0ac59ec07c00369cULL,
435     0xef4eac49cb353425ULL,    0xf450244eef0129d8ULL,
436     0x8acc46e5caf4deb6ULL,    0x2ffeab63989263f7ULL,
437     0x8f7cb9fe5d7a4578ULL,    0x5bd8f7644e634635ULL,
438     0x427a7315bf2dc900ULL,    0x17d0c4aa2125261cULL,
439     0x3992486c93518e50ULL,    0xb4cbfee0a2d7d4c3ULL,
440     0x7c75d6202c5ddd8dULL,    0xdbc295d8e35b6c61ULL,
441     0x60b369d302032b19ULL,    0xce42685fdce44132ULL,
442     0x06f3ddb9ddf65610ULL,    0x8ea4d21db5e148f0ULL,
443     0x20b0fce62fcd496fULL,    0x2c1b912358b0ee31ULL,
444     0xb28317b818f5a308ULL,    0xa89c1e189ca6d2cfULL,
445     0x0c6b18576aaadbc8ULL,    0xb65deaa91299fae3ULL,
446     0xfb2b794b7f1027e7ULL,    0x04e4317f443b5bebULL,
447     0x4b852d325939d0a6ULL,    0xd5ae6beefb207ffcULL,
448     0x309682b281c7d374ULL,    0xbae309a194c3b475ULL,
449     0x8cc3f97b13b49f05ULL,    0x98a9422ff8293967ULL,
450     0x244b16b01076ff7cULL,    0xf8bf571c663d67eeULL,
451     0x1f0d6758eee30da1ULL,    0xc9b611d97adeb9b7ULL,
452     0xb7afd5887b6c57a2ULL,    0x6290ae846b984fe1ULL,
453     0x94df4cdeacc1a5fdULL,    0x058a5bd1c5483affULL,
454     0x63166cc142ba3c37ULL,    0x8db8526eb2f76f40ULL,
455     0xe10880036f0d6d4eULL,    0x9e0523c9971d311dULL,
456     0x45ec2824cc7cd691ULL,    0x575b8359e62382c9ULL,
457     0xfa9e400dc4889995ULL,    0xd1823ecb45721568ULL,
458     0xdafd983b8206082fULL,    0xaa7d29082386a8cbULL,
459     0x269fcd4403b87588ULL,    0x1b91f5f728bdd1e0ULL,
460     0xe4669f39040201f6ULL,    0x7a1d7c218cf04adeULL,
461     0x65623c29d79ce5ceULL,    0x2368449096c00bb1ULL,
462     0xab9bf1879da503baULL,    0xbc23ecb1a458058eULL,
463     0x9a58df01bb401eccULL,    0xa070e868a85f143dULL,
464     0x4ff188307df2239eULL,    0x14d565b41a641183ULL,
465     0xee13337452701602ULL,    0x950e3dcf3f285e09ULL,
466     0x59930254b9c80953ULL,    0x3bf299408930da6dULL,
467     0xa955943f53691387ULL,    0xa15edecaa9cb8784ULL,
468     0x29142127352be9a0ULL,    0x76f0371fff4e7afbULL,
469     0x0239f450274f2228ULL,    0xbb073af01d5e868bULL,
470     0xbfc80571c10e96c1ULL,    0xd267088568222e23ULL,
471     0x9671a3d48e80b5b0ULL,    0x55b5d38ae193bb81ULL,
472     0x693ae2d0a18b04b8ULL,    0x5c48b4ecadd5335fULL,
473     0xfd743b194916a1caULL,    0x2577018134be98c4ULL,
474     0xe77987e83c54a4adULL,    0x28e11014da33e1b9ULL,
475     0x270cc59e226aa213ULL,    0x71495f756d1a5f60ULL,
476     0x9be853fb60afef77ULL,    0xadc786a7f7443dbfULL,
477     0x0904456173b29a82ULL,    0x58bc7a66c232bd5eULL,
478     0xf306558c673ac8b2ULL,    0x41f639c6b6c9772aULL,
479     0x216defe99fda35daULL,    0x11640cc71c7be615ULL,
480     0x93c43694565c5527ULL,    0xea038e6246777839ULL,
481     0xf9abf3ce5a3e2469ULL,    0x741e768d0fd312d2ULL,
482     0x0144b883ced652c6ULL,    0xc20b5a5ba33f8552ULL,
483     0x1ae69633c3435a9dULL,    0x97a28ca4088cfdecULL,
484     0x8824a43c1e96f420ULL,    0x37612fa66eeea746ULL,
485     0x6b4cb165f9cf0e5aULL,    0x43aa1c06a0abfb4aULL,
486     0x7f4dc26ff162796bULL,    0x6cbacc8e54ed9b0fULL,
487     0xa6b7ffefd2bb253eULL,    0x2e25bc95b0a29d4fULL,
488     0x86d6a58bdef1388cULL,    0xded74ac576b6f054ULL,
489     0x8030bdbc2b45805dULL,    0x3c81af70e94d9289ULL,
490     0x3eff6dda9e3100dbULL,    0xb38dc39fdfcc8847ULL,
491     0x123885528d17b87eULL,    0xf2da0ed240b1b642ULL,
492     0x44cefadcd54bf9a9ULL,    0x1312200e433c7ee6ULL,
493     0x9ffcc84f3a78c748ULL,    0xf0cd1f72248576bbULL,
494     0xec6974053638cfe4ULL,    0x2ba7b67c0cec4e4cULL,
495     0xac2f4df3e5ce32edULL,    0xcb33d14326ea4c11ULL,
496     0xa4e9044cc77e58bcULL,    0x5f513293d934fcefULL,
497     0x5dc9645506e55444ULL,    0x50de418f317de40aULL,
498     0x388cb31a69dde259ULL,    0x2db4a83455820a86ULL,
499     0x9010a91e84711ae9ULL,    0x4df7f0b7b1498371ULL,
500     0xd62a2eabc0977179ULL,    0x22fac097aa8d5c0eULL,
501     0xf49fcc2ff1daf39bULL,    0x487fd5c66ff29281ULL,
502     0xe8a30667fcdca83fULL,    0x2c9b4be3d2fcce63ULL,
503     0xda3ff74b93fbbbc2ULL,    0x2fa165d2fe70ba66ULL,
504     0xa103e279970e93d4ULL,    0xbecdec77b0e45e71ULL,
505     0xcfb41e723985e497ULL,    0xb70aaa025ef75017ULL,
506     0xd42309f03840b8e0ULL,    0x8efc1ad035898579ULL,
507     0x96c6920be2b2abc5ULL,    0x66af4163375a9172ULL,
508     0x2174abdcca7127fbULL,    0xb33ccea64a72ff41ULL,
509     0xf04a4933083066a5ULL,    0x8d970acdd7289af5ULL,
510     0x8f96e8e031c8c25eULL,    0xf3fec02276875d47ULL,
511     0xec7bf310056190ddULL,    0xf5adb0aebb0f1491ULL,
512     0x9b50f8850fd58892ULL,    0x4975488358b74de8ULL,
513     0xa3354ff691531c61ULL,    0x0702bbe481d2c6eeULL,
514     0x89fb24057deded98ULL,    0xac3075138596e902ULL,
515     0x1d2d3580172772edULL,    0xeb738fc28e6bc30dULL,
516     0x5854ef8f63044326ULL,    0x9e5c52325add3bbeULL,
517     0x90aa53cf325c4623ULL,    0xc1d24d51349dd067ULL,
518     0x2051cfeea69ea624ULL,    0x13220f0a862e7e4fULL,
519     0xce39399404e04864ULL,    0xd9c42ca47086fcb7ULL,
520     0x685ad2238a03e7ccULL,    0x066484b2ab2ff1dbULL,
521     0xfe9d5d70efbf79ecULL,    0x5b13b9dd9c481854ULL,
522     0x15f0d475ed1509adULL,    0x0bebcd060ec79851ULL,
523     0xd58c6791183ab7f8ULL,    0xd1187c5052f3eee4ULL,
524     0xc95d1192e54e82ffULL,    0x86eea14cb9ac6ca2ULL,
525     0x3485beb153677d5dULL,    0xdd191d781f8c492aULL,
526     0xf60866baa784ebf9ULL,    0x518f643ba2d08c74ULL,
527     0x8852e956e1087c22ULL,    0xa768cb8dc410ae8dULL,
528     0x38047726bfec8e1aULL,    0xa67738b4cd3b45aaULL,
529     0xad16691cec0dde19ULL,    0xc6d4319380462e07ULL,
530     0xc5a5876d0ba61938ULL,    0x16b9fa1fa58fd840ULL,
531     0x188ab1173ca74f18ULL,    0xabda2f98c99c021fULL,
532     0x3e0580ab134ae816ULL,    0x5f3b05b773645abbULL,
533     0x2501a2be5575f2f6ULL,    0x1b2f74004e7e8ba9ULL,
534     0x1cd7580371e8d953ULL,    0x7f6ed89562764e30ULL,
535     0xb15926ff596f003dULL,    0x9f65293da8c5d6b9ULL,
536     0x6ecef04dd690f84cULL,    0x4782275fff33af88ULL,
537     0xe41433083f820801ULL,    0xfd0dfe409a1af9b5ULL,
538     0x4325a3342cdb396bULL,    0x8ae77e62b301b252ULL,
539     0xc36f9e9f6655615aULL,    0x85455a2d92d32c09ULL,
540     0xf2c7dea949477485ULL,    0x63cfb4c133a39ebaULL,
541     0x83b040cc6ebc5462ULL,    0x3b9454c8fdb326b0ULL,
542     0x56f56a9e87ffd78cULL,    0x2dc2940d99f42bc6ULL,
543     0x98f7df096b096e2dULL,    0x19a6e01e3ad852bfULL,
544     0x42a99ccbdbd4b40bULL,    0xa59998af45e9c559ULL,
545     0x366295e807d93186ULL,    0x6b48181bfaa1f773ULL,
546     0x1fec57e2157a0a1dULL,    0x4667446af6201ad5ULL,
547     0xe615ebcacfb0f075ULL,    0xb8f31f4f68290778ULL,
548     0x22713ed6ce22d11eULL,    0x3057c1a72ec3c93bULL,
549     0xcb46acc37c3f1f2fULL,    0xdbb893fd02aaf50eULL,
550     0x331fd92e600b9fcfULL,    0xa498f96148ea3ad6ULL,
551     0xa8d8426e8b6a83eaULL,    0xa089b274b7735cdcULL,
552     0x87f6b3731e524a11ULL,    0x118808e5cbc96749ULL,
553     0x9906e4c7b19bd394ULL,    0xafed7f7e9b24a20cULL,
554     0x6509eadeeb3644a7ULL,    0x6c1ef1d3e8ef0edeULL,
555     0xb9c97d43e9798fb4ULL,    0xa2f2d784740c28a3ULL,
556     0x7b8496476197566fULL,    0x7a5be3e6b65f069dULL,
557     0xf96330ed78be6f10ULL,    0xeee60de77a076a15ULL,
558     0x2b4bee4aa08b9bd0ULL,    0x6a56a63ec7b8894eULL,
559     0x02121359ba34fef4ULL,    0x4cbf99f8283703fcULL,
560     0x398071350caf30c8ULL,    0xd0a77a89f017687aULL,
561     0xf1c1a9eb9e423569ULL,    0x8c7976282dee8199ULL,
562     0x5d1737a5dd1f7abdULL,    0x4f53433c09a9fa80ULL,
563     0xfa8b0c53df7ca1d9ULL,    0x3fd9dcbc886ccb77ULL,
564     0xc040917ca91b4720ULL,    0x7dd00142f9d1dcdfULL,
565     0x8476fc1d4f387b58ULL,    0x23f8e7c5f3316503ULL,
566     0x032a2244e7e37339ULL,    0x5c87a5d750f5a74bULL,
567     0x082b4cc43698992eULL,    0xdf917becb858f63cULL,
568     0x3270b8fc5bf86ddaULL,    0x10ae72bb29b5dd76ULL,
569     0x576ac94e7700362bULL,    0x1ad112dac61efb8fULL,
570     0x691bc30ec5faa427ULL,    0xff246311cc327143ULL,
571     0x3142368e30e53206ULL,    0x71380e31e02ca396ULL,
572     0x958d5c960aad76f1ULL,    0xf8d6f430c16da536ULL,
573     0xc8ffd13f1be7e1d2ULL,    0x7578ae66004ddbe1ULL,
574     0x05833f01067be646ULL,    0xbb34b5ad3bfe586dULL,
575     0x095f34c9a12b97f0ULL,    0x247ab64525d60ca8ULL,
576     0xdcdbc6f3017477d1ULL,    0x4a2e14d4decad24dULL,
577     0xbdb5e6d9be0a1eebULL,    0x2a7e70f7794301abULL,
578     0xdef42d8a270540fdULL,    0x01078ec0a34c22c1ULL,
579     0xe5de511af4c16387ULL,    0x7ebb3a52bd9a330aULL,
580     0x77697857aa7d6435ULL,    0x004e831603ae4c32ULL,
581     0xe7a21020ad78e312ULL,    0x9d41a70c6ab420f2ULL,
582     0x28e06c18ea1141e6ULL,    0xd2b28cbd984f6b28ULL,
583     0x26b75f6c446e9d83ULL,    0xba47568c4d418d7fULL,
584     0xd80badbfe6183d8eULL,    0x0e206d7f5f166044ULL,
585     0xe258a43911cbca3eULL,    0x723a1746b21dc0bcULL,
586     0xc7caa854f5d7cdd3ULL,    0x7cac32883d261d9cULL,
587     0x7690c26423ba942cULL,    0x17e55524478042b8ULL,
588     0xe0be477656a2389fULL,    0x4d289b5e67ab2da0ULL,
589     0x44862b9c8fbbfd31ULL,    0xb47cc8049d141365ULL,
590     0x822c1b362b91c793ULL,    0x4eb14655fb13dfd8ULL,
591     0x1ecbba0714e2a97bULL,    0x6143459d5cde5f14ULL,
592     0x53a8fbf1d5f0ac89ULL,    0x97ea04d81c5e5b00ULL,
593     0x622181a8d4fdb3f3ULL,    0xe9bcd341572a1208ULL,
594     0x1411258643cce58aULL,    0x9144c5fea4c6e0a4ULL,
595     0x0d33d06565cf620fULL,    0x54a48d489f219ca1ULL,
596     0xc43e5eac6d63c821ULL,    0xa9728b3a72770dafULL,
597     0xd7934e7b20df87efULL,    0xe35503b61a3e86e5ULL,
598     0xcae321fbc819d504ULL,    0x129a50b3ac60bfa6ULL,
599     0xcd5e68ea7e9fb6c3ULL,    0xb01c90199483b1c7ULL,
600     0x3de93cd5c295376cULL,    0xaed52edf2ab9ad13ULL,
601     0x2e60f512c0a07884ULL,    0xbc3d86a3e36210c9ULL,
602     0x35269d9b163951ceULL,    0x0c7d6e2ad0cdb5faULL,
603     0x59e86297d87f5733ULL,    0x298ef221898db0e7ULL,
604     0x55000029d1a5aa7eULL,    0x8bc08ae1b5061b45ULL,
605     0xc2c31c2b6c92703aULL,    0x94cc596baf25ef42ULL,
606     0x0a1d73db22540456ULL,    0x04b6a0f9d9c4179aULL,
607     0xeffdafa2ae3d3c60ULL,    0xf7c8075bb49496c4ULL,
608     0x9cc5c7141d1cd4e3ULL,    0x78bd1638218e5534ULL,
609     0xb2f11568f850246aULL,    0xedfabcfa9502bc29ULL,
610     0x796ce5f2da23051bULL,    0xaae128b0dc93537cULL,
611     0x3a493da0ee4b29aeULL,    0xb5df6b2c416895d7ULL,
612     0xfcabbd25122d7f37ULL,    0x70810b58105dc4b1ULL,
613     0xe10fdd37f7882a90ULL,    0x524dcab5518a3f5cULL,
614     0x3c9e85878451255bULL,    0x4029828119bd34e2ULL,
615     0x74a05b6f5d3ceccbULL,    0xb610021542e13ecaULL,
616     0x0ff979d12f59e2acULL,    0x6037da27e4f9cc50ULL,
617     0x5e92975a0df1847dULL,    0xd66de190d3e623feULL,
618     0x5032d6b87b568048ULL,    0x9a36b7ce8235216eULL,
619     0x80272a7a24f64b4aULL,    0x93efed8b8c6916f7ULL,
620     0x37ddbff44cce1555ULL,    0x4b95db5d4b99bd25ULL,
621     0x92d3fda169812fc0ULL,    0xfb1a4a9a90660bb6ULL,
622     0x730c196946a4b9b2ULL,    0x81e289aa7f49da68ULL,
623     0x64669a0f83b1a05fULL,    0x27b3ff7d9644f48bULL,
624     0xcc6b615c8db675b3ULL,    0x674f20b9bcebbe95ULL,
625     0x6f31238275655982ULL,    0x5ae488713e45cf05ULL,
626     0xbf619f9954c21157ULL,    0xeabac46040a8eae9ULL,
627     0x454c6fe9f2c0c1cdULL,    0x419cf6496412691cULL,
628     0xd3dc3bef265b0f70ULL,    0x6d0e60f5c3578a9eULL,
629     0x5b0e608526323c55ULL,    0x1a46c1a9fa1b59f5ULL,
630     0xa9e245a17c4c8ffaULL,    0x65ca5159db2955d7ULL,
631     0x05db0a76ce35afc2ULL,    0x81eac77ea9113d45ULL,
632     0x528ef88ab6ac0a0dULL,    0xa09ea253597be3ffULL,
633     0x430ddfb3ac48cd56ULL,    0xc4b3a67af45ce46fULL,
634     0x4ececfd8fbe2d05eULL,    0x3ef56f10b39935f0ULL,
635     0x0b22d6829cd619c6ULL,    0x17fd460a74df2069ULL,
636     0x6cf8cc8e8510ed40ULL,    0xd6c824bf3a6ecaa7ULL,
637     0x61243d581a817049ULL,    0x048bacb6bbc163a2ULL,
638     0xd9a38ac27d44cc32ULL,    0x7fddff5baaf410abULL,
639     0xad6d495aa804824bULL,    0xe1a6a74f2d8c9f94ULL,
640     0xd4f7851235dee8e3ULL,    0xfd4b7f886540d893ULL,
641     0x247c20042aa4bfdaULL,    0x096ea1c517d1327cULL,
642     0xd56966b4361a6685ULL,    0x277da5c31221057dULL,
643     0x94d59893a43acff7ULL,    0x64f0c51ccdc02281ULL,
644     0x3d33bcc4ff6189dbULL,    0xe005cb184ce66af1ULL,
645     0xff5ccd1d1db99beaULL,    0xb0b854a7fe42980fULL,
646     0x7bd46a6a718d4b9fULL,    0xd10fa8cc22a5fd8cULL,
647     0xd31484952be4bd31ULL,    0xc7fa975fcb243847ULL,
648     0x4886ed1e5846c407ULL,    0x28cddb791eb70b04ULL,
649     0xc2b00be2f573417fULL,    0x5c9590452180f877ULL,
650     0x7a6bddfff370eb00ULL,    0xce509e38d6d9d6a4ULL,
651     0xebeb0f00647fa702ULL,    0x1dcc06cf76606f06ULL,
652     0xe4d9f28ba286ff0aULL,    0xd85a305dc918c262ULL,
653     0x475b1d8732225f54ULL,    0x2d4fb51668ccb5feULL,
654     0xa679b9d9d72bba20ULL,    0x53841c0d912d43a5ULL,
655     0x3b7eaa48bf12a4e8ULL,    0x781e0e47f22f1ddfULL,
656     0xeff20ce60ab50973ULL,    0x20d261d19dffb742ULL,
657     0x16a12b03062a2e39ULL,    0x1960eb2239650495ULL,
658     0x251c16fed50eb8b8ULL,    0x9ac0c330f826016eULL,
659     0xed152665953e7671ULL,    0x02d63194a6369570ULL,
660     0x5074f08394b1c987ULL,    0x70ba598c90b25ce1ULL,
661     0x794a15810b9742f6ULL,    0x0d5925e9fcaf8c6cULL,
662     0x3067716cd868744eULL,    0x910ab077e8d7731bULL,
663     0x6a61bbdb5ac42f61ULL,    0x93513efbf0851567ULL,
664     0xf494724b9e83e9d5ULL,    0xe887e1985c09648dULL,
665     0x34b1d3c675370cfdULL,    0xdc35e433bc0d255dULL,
666     0xd0aab84234131be0ULL,    0x08042a50b48b7eafULL,
667     0x9997c4ee44a3ab35ULL,    0x829a7b49201799d0ULL,
668     0x263b8307b7c54441ULL,    0x752f95f4fd6a6ca6ULL,
669     0x927217402c08c6e5ULL,    0x2a8ab754a795d9eeULL,
670     0xa442f7552f72943dULL,    0x2c31334e19781208ULL,
671     0x4fa98d7ceaee6291ULL,    0x55c3862f665db309ULL,
672     0xbd0610175d53b1f3ULL,    0x46fe6cb840413f27ULL,
673     0x3fe03792df0cfa59ULL,    0xcfe700372eb85e8fULL,
674     0xa7be29e7adbce118ULL,    0xe544ee5cde8431ddULL,
675     0x8a781b1b41f1873eULL,    0xa5c94c78a0d2f0e7ULL,
676     0x39412e2877b60728ULL,    0xa1265ef3afc9a62cULL,
677     0xbcc2770c6a2506c5ULL,    0x3ab66dd5dce1ce12ULL,
678     0xe65499d04a675b37ULL,    0x7d8f523481bfd216ULL,
679     0x0f6f64fcec15f389ULL,    0x74efbe618b5b13c8ULL,
680     0xacdc82b714273e1dULL,    0xdd40bfe003199d17ULL,
681     0x37e99257e7e061f8ULL,    0xfa52626904775aaaULL,
682     0x8bbbf63a463d56f9ULL,    0xf0013f1543a26e64ULL,
683     0xa8307e9f879ec898ULL,    0xcc4c27a4150177ccULL,
684     0x1b432f2cca1d3348ULL,    0xde1d1f8f9f6fa013ULL,
685     0x606602a047a7ddd6ULL,    0xd237ab64cc1cb2c7ULL,
686     0x9b938e7225fcd1d3ULL,    0xec4e03708e0ff476ULL,
687     0xfeb2fbda3d03c12dULL,    0xae0bced2ee43889aULL,
688     0x22cb8923ebfb4f43ULL,    0x69360d013cf7396dULL,
689     0x855e3602d2d4e022ULL,    0x073805bad01f784cULL,
690     0x33e17a133852f546ULL,    0xdf4874058ac7b638ULL,
691     0xba92b29c678aa14aULL,    0x0ce89fc76cfaadcdULL,
692     0x5f9d4e0908339e34ULL,    0xf1afe9291f5923b9ULL,
693     0x6e3480f60f4a265fULL,    0xeebf3a2ab29b841cULL,
694     0xe21938a88f91b4adULL,    0x57dfeff845c6d3c3ULL,
695     0x2f006b0bf62caaf2ULL,    0x62f479ef6f75ee78ULL,
696     0x11a55ad41c8916a9ULL,    0xf229d29084fed453ULL,
697     0x42f1c27b16b000e6ULL,    0x2b1f76749823c074ULL,
698     0x4b76eca3c2745360ULL,    0x8c98f463b91691bdULL,
699     0x14bcc93cf1ade66aULL,    0x8885213e6d458397ULL,
700     0x8e177df0274d4711ULL,    0xb49b73b5503f2951ULL,
701     0x10168168c3f96b6bULL,    0x0e3d963b63cab0aeULL,
702     0x8dfc4b5655a1db14ULL,    0xf789f1356e14de5cULL,
703     0x683e68af4e51dac1ULL,    0xc9a84f9d8d4b0fd9ULL,
704     0x3691e03f52a0f9d1ULL,    0x5ed86e46e1878e80ULL,
705     0x3c711a0e99d07150ULL,    0x5a0865b20c4e9310ULL,
706     0x56fbfc1fe4f0682eULL,    0xea8d5de3105edf9bULL,
707     0x71abfdb12379187aULL,    0x2eb99de1bee77b9cULL,
708     0x21ecc0ea33cf4523ULL,    0x59a4d7521805c7a1ULL,
709     0x3896f5eb56ae7c72ULL,    0xaa638f3db18f75dcULL,
710     0x9f39358dabe9808eULL,    0xb7defa91c00b72acULL,
711     0x6b5541fd62492d92ULL,    0x6dc6dee8f92e4d5bULL,
712     0x353f57abc4beea7eULL,    0x735769d6da5690ceULL,
713     0x0a234aa642391484ULL,    0xf6f9508028f80d9dULL,
714     0xb8e319a27ab3f215ULL,    0x31ad9c1151341a4dULL,
715     0x773c22a57bef5805ULL,    0x45c7561a07968633ULL,
716     0xf913da9e249dbe36ULL,    0xda652d9b78a64c68ULL,
717     0x4c27a97f3bc334efULL,    0x76621220e66b17f4ULL,
718     0x967743899acd7d0bULL,    0xf3ee5bcae0ed6782ULL,
719     0x409f753600c879fcULL,    0x06d09a39b5926db6ULL,
720     0x6f83aeb0317ac588ULL,    0x01e6ca4a86381f21ULL,
721     0x66ff3462d19f3025ULL,    0x72207c24ddfd3bfbULL,
722     0x4af6b6d3e2ece2ebULL,    0x9c994dbec7ea08deULL,
723     0x49ace597b09a8bc4ULL,    0xb38c4766cf0797baULL,
724     0x131b9373c57c2a75ULL,    0xb1822cce61931e58ULL,
725     0x9d7555b909ba1c0cULL,    0x127fafdd937d11d2ULL,
726     0x29da3badc66d92e4ULL,    0xa2c1d57154c2ecbcULL,
727     0x58c5134d82f6fe24ULL,    0x1c3ae3515b62274fULL,
728     0xe907c82e01cb8126ULL,    0xf8ed091913e37fcbULL,
729     0x3249d8f9c80046c9ULL,    0x80cf9bede388fb63ULL,
730     0x1881539a116cf19eULL,    0x5103f3f76bd52457ULL,
731     0x15b7e6f5ae47f7a8ULL,    0xdbd7c6ded47e9ccfULL,
732     0x44e55c410228bb1aULL,    0xb647d4255edb4e99ULL,
733     0x5d11882bb8aafc30ULL,    0xf5098bbb29d3212aULL,
734     0x8fb5ea14e90296b3ULL,    0x677b942157dd025aULL,
735     0xfb58e7c0a390acb5ULL,    0x89d3674c83bd4a01ULL,
736     0x9e2da4df4bf3b93bULL,    0xfcc41e328cab4829ULL,
737     0x03f38c96ba582c52ULL,    0xcad1bdbd7fd85db2ULL,
738     0xbbb442c16082ae83ULL,    0xb95fe86ba5da9ab0ULL,
739     0xb22e04673771a93fULL,    0x845358c9493152d8ULL,
740     0xbe2a488697b4541eULL,    0x95a2dc2dd38e6966ULL,
741     0xc02c11ac923c852bULL,    0x2388b1990df2a87bULL,
742     0x7c8008fa1b4f37beULL,    0x1f70d0c84d54e503ULL,
743     0x5490adec7ece57d4ULL,    0x002b3c27d9063a3aULL,
744     0x7eaea3848030a2bfULL,    0xc602326ded2003c0ULL,
745     0x83a7287d69a94086ULL,    0xc57a5fcb30f57a8aULL,
746     0xb56844e479ebe779ULL,    0xa373b40f05dcbce9ULL,
747     0xd71a786e88570ee2ULL,    0x879cbacdbde8f6a0ULL,
748     0x976ad1bcc164a32fULL,    0xab21e25e9666d78bULL,
749     0x901063aae5e5c33cULL,    0x9818b34448698d90ULL,
750     0xe36487ae3e1e8abbULL,    0xafbdf931893bdcb4ULL,
751     0x6345a0dc5fbbd519ULL,    0x8628fe269b9465caULL,
752     0x1e5d01603f9c51ecULL,    0x4de44006a15049b7ULL,
753     0xbf6c70e5f776cbb1ULL,    0x411218f2ef552bedULL,
754     0xcb0c0708705a36a3ULL,    0xe74d14754f986044ULL,
755     0xcd56d9430ea8280eULL,    0xc12591d7535f5065ULL,
756     0xc83223f1720aef96ULL,    0xc3a0396f7363a51fULL
757 };